From 0b372db31fccf78555539a815513c88c863a580a Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:46:48 -0800 Subject: [PATCH 01/31] Remove old packages --- .../packages/queue-manager/package.json | 5 - .../packages/queue-manager/queue-manager.mjs | 137 -- .../multiplayer/packages/zjs/README.md | 15 - .../multiplayer/packages/zjs/encoding.mjs | 343 --- .../multiplayer/packages/zjs/package.json | 12 - .../multiplayer/packages/zjs/test/test.mjs | 1490 ------------ .../multiplayer/packages/zjs/util.mjs | 10 - .../packages/multiplayer/packages/zjs/z.mjs | 2066 ----------------- 8 files changed, 4078 deletions(-) delete mode 100644 packages/usdk/packages/upstreet-agent/packages/queue-manager/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/queue-manager/queue-manager.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/README.md delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/encoding.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/test/test.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/util.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/z.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/queue-manager/package.json b/packages/usdk/packages/upstreet-agent/packages/queue-manager/package.json deleted file mode 100644 index fdbebe4db..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/queue-manager/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "queue-manager", - "version": "0.0.1", - "main": "queue-manager.mjs" -} diff --git a/packages/usdk/packages/upstreet-agent/packages/queue-manager/queue-manager.mjs b/packages/usdk/packages/upstreet-agent/packages/queue-manager/queue-manager.mjs deleted file mode 100644 index 04f0047d2..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/queue-manager/queue-manager.mjs +++ /dev/null @@ -1,137 +0,0 @@ -class Entry { - fn; - abortController; - constructor(fn, abortController = new AbortController()) { - this.fn = fn; - this.abortController = abortController; - } -} - -const abortError = new Error('abort'); -abortError.isAbortError = true; - -export class QueueManager extends EventTarget { - constructor({ - parallelism = 1, - } = {}) { - super(); - - this.parallelism = parallelism; - - this.runningEntries = []; - this.queue = []; - } - isIdle() { - return this.runningEntries.length === 0; - } - next(n = 1) { - let i; - for (i = 0; i < n; i++) { - const entry = this.runningEntries.shift(); - if (entry) { - entry.abortController.abort(abortError); - continue; - } - } - // return whether we were able to abort all the entries - return i === n; - } - async waitForTurn(fn) { - const entry = new Entry(fn); - return await this.#waitForTurnEntry(entry); - } - async #waitForTurnEntry(entry) { - if (this.runningEntries.length < this.parallelism) { - this.runningEntries.push(entry); - - if (this.runningEntries.length === 1) { - this.dispatchEvent(new MessageEvent('idlechange', { - data: { - idle: false, - }, - })); - } - - let result, error; - try { - const { fn, abortController } = entry; - const { signal } = abortController; - result = await fn({ - signal, - }); - } catch(err) { - error = err; - } - - const index = this.runningEntries.indexOf(entry); - this.runningEntries.splice(index, 1); - if (this.queue.length > 0) { - const entry = this.queue.shift(); - this.#waitForTurnEntry(entry); - } else { - if (this.runningEntries.length === 0) { - this.dispatchEvent(new MessageEvent('idlechange', { - data: { - idle: true, - }, - })); - } - } - - if (error === undefined || error === abortError) { - return result; - } else { - throw error; - } - } else { - const { fn, abortController } = entry; - const { - promise, - resolve, - reject, - } = Promise.withResolvers(); - const fn2 = async (...args) => { - let result, error; - try { - result = await fn(...args); - } catch(err) { - error = err; - } - - if (error === undefined || error === abortError) { - resolve(result); - return result; - } else { - reject(error); - throw error; - } - }; - const entry2 = new Entry(fn2, abortController); - this.queue.push(entry2); - const result = await promise; - return result; - } - } -} - -export class MultiQueueManager { - constructor(opts) { - this.opts = opts; - - this.queueManagers = new Map(); - } - async waitForTurn(key, fn) { - let queueManager = this.queueManagers.get(key); - if (!queueManager) { - queueManager = new QueueManager(this.opts); - this.queueManagers.set(key, queueManager); - queueManager.addEventListener('idlechange', e => { - const { idle } = e.data; - if (idle) { - this.queueManagers.delete(key); - } - }); - } - return await queueManager.waitForTurn(fn); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/README.md b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/README.md deleted file mode 100644 index 41ff9ad19..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# zjs - -API-compatible [yjs](https://github.com/yjs/yjs) CRDT, but faster for game engine usage. - -## Benefits - -- Small memory footprint (O(data) objects garbage) -- Fast conflict resolution based on single clock, resolution priority, and binary history buffer -- Supports all JSON and binary data (typed arrays) - -## Restrictions - -- Only SFU supported -- Can only push one element at a time -- Cannot move elements diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/encoding.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/encoding.mjs deleted file mode 100644 index d97a9a78c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/encoding.mjs +++ /dev/null @@ -1,343 +0,0 @@ -const HTMLImageElement = typeof globalThis.window !== 'undefined' ? globalThis.window.HTMLImageElement : function() {}; -const HTMLCanvasElement = typeof globalThis.window !== 'undefined' ? globalThis.window.HTMLCanvasElement : function() {}; -const ImageData = typeof globalThis.window !== 'undefined' ? globalThis.window.ImageData : function() {}; -const ImageBitmap = typeof globalThis.window !== 'undefined' ? globalThis.window.ImageBitmap : function() {}; - -const align = (v, N) => { - const r = v % N; - return r === 0 ? v : v - r + N; -}; -const align4 = v => align(v, 4); - -const ADDENDUM_TYPES = (() => { - let iota = 0; - const result = new Map(); - result.set(Uint8Array, ++iota); - result.set(Uint16Array, ++iota); - result.set(Uint32Array, ++iota); - result.set(Int8Array, ++iota); - result.set(Int16Array, ++iota); - result.set(Int32Array, ++iota); - result.set(Float32Array, ++iota); - result.set(Float64Array, ++iota); - result.set(ArrayBuffer, ++iota); - - { - const imageIota = ++iota; - result.set(HTMLImageElement, imageIota); - result.set(HTMLCanvasElement, imageIota); - result.set(ImageData, imageIota); - result.set(ImageBitmap, imageIota); - } - - result.set(Uint8ClampedArray, ++iota); - - return result; -})(); -const ADDENDUM_CONSTRUCTORS = (() => { - const _construct = constructor => - (buffer, offset, byteLength) => - new constructor(buffer, offset, byteLength / constructor.BYTES_PER_ELEMENT) - return [ - null, // start at 1 - _construct(Uint8Array), - _construct(Uint16Array), - _construct(Uint32Array), - _construct(Int8Array), - _construct(Int16Array), - _construct(Int32Array), - _construct(Float32Array), - _construct(Float64Array), - (buffer, offset, byteLength) => buffer.slice(offset, offset + byteLength), // ArrayBuffer - (buffer, offset, byteLength) => { // ImageData - const dataView = new DataView(buffer, offset, byteLength); - const width = dataView.getUint32(0, true); - const height = dataView.getUint32(4, true); - const data = new Uint8ClampedArray(buffer, offset + 8, byteLength - 8); - const imageData = new ImageData(data, width, height); - return imageData; - }, - _construct(Uint8ClampedArray), - ]; -})(); -const ADDENDUM_SERIALIZERS = (() => { - const _serializedTypedArray = (typedArray, uint8Array, index) => { - uint8Array.set(new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength), index); - }; - _serializedTypedArray.normalize = a => a; - _serializedTypedArray.getSize = typedArray => typedArray.byteLength; - - const _serializeArrayBuffer = (arrayBuffer, uint8Array, index) => { - uint8Array.set(new Uint8Array(arrayBuffer), index); - }; - _serializeArrayBuffer.normalize = a => a; - _serializeArrayBuffer.getSize = arrayBuffer => arrayBuffer.byteLength; - - const _serializeImage = (imageData, uint8Array, index) => { - const dataView = new DataView(uint8Array.buffer, index); - dataView.setUint32(0, imageData.width, true); - dataView.setUint32(4, imageData.height, true); - const srcData = new Uint8Array(imageData.data.buffer, imageData.data.byteOffset, imageData.data.byteLength); - uint8Array.set(srcData, index + 8); - }; - _serializeImage.normalize = image => { - if (!(image instanceof ImageData)) { - // draw to canvas to convert to ImageData - const canvas = document.createElement('canvas'); - canvas.width = image.width; - canvas.height = image.height; - const context = canvas.getContext('2d'); - context.drawImage(image, 0, 0); - image = context.getImageData(0, 0, image.width, image.height); - } - return image; - }; - _serializeImage.getSize = imageData => { - const size = 8 + imageData.data.byteLength; - // if (align4(imageData.data.byteLength) !== imageData.data.byteLength) { - // throw new Error('invalid image data size'); - // } - return size; - }; - - return [ - null, // start at 1 - _serializedTypedArray, // Uint8Array - _serializedTypedArray, // Uint16Array - _serializedTypedArray, // Uint32Array - _serializedTypedArray, // Int8Array - _serializedTypedArray, // Int16Array - _serializedTypedArray, // Int32Array - _serializedTypedArray, // Float32Array - _serializedTypedArray, // Float64Array - _serializeArrayBuffer, // ArrayBuffer - _serializeImage, // ImageData - _serializedTypedArray, // Uint8ClampedArray - ]; -})(); - -const textEncoder = new TextEncoder(); -const textDecoder = new TextDecoder(); -let textUint8Array = new Uint8Array(4 * 1024 * 1024); // 4 MB - -const encodableConstructors = [ - Uint8Array, - Uint16Array, - Uint32Array, - Int8Array, - Int16Array, - Int32Array, - Float32Array, - Float64Array, - ArrayBuffer, - HTMLImageElement, - HTMLCanvasElement, - ImageData, - ImageBitmap, - Uint8ClampedArray, -]; -const _isAddendumEncodable = o => - encodableConstructors.includes( - o?.constructor - ); -const nullUint8Array = textEncoder.encode('null'); -function zbencode(o) { - const addendums = []; - const addendumIndexes = []; - const addendumTypes = []; - const _getSb = () => { - if (_isAddendumEncodable(o)) { // common fast path - addendums.push(o); - addendumIndexes.push(1); - addendumTypes.push(ADDENDUM_TYPES.get(o.constructor)); - return nullUint8Array; - } else { - let recursionIndex = 0; - const _recurseExtractAddendums = o => { - recursionIndex++; - if (_isAddendumEncodable(o)) { - addendums.push(o); - addendumIndexes.push(recursionIndex); - const addendumType = ADDENDUM_TYPES.get(o.constructor); - addendumTypes.push(addendumType) - return null; - } else { - return o; - } - }; - const s = JSON.stringify(o, function(k, v) { - return _recurseExtractAddendums(v); - }); - let result; - for (;;) { - result = textEncoder.encodeInto(s, textUint8Array); - if (result.read === s.length) { - break; - } else { - textUint8Array = new Uint8Array(textUint8Array.length * 2); - console.warn('zjs: resizing buffer'); - } - } - return textUint8Array.subarray(0, result.written); - } - }; - const sb = _getSb(); - - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // length - totalSize += sb.byteLength; // data - totalSize = align4(totalSize); - totalSize += Uint32Array.BYTES_PER_ELEMENT; // count - for (let i = 0; i < addendums.length; i++) { - const addendum = addendums[i]; - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // index - totalSize += Uint32Array.BYTES_PER_ELEMENT; // type - totalSize += Uint32Array.BYTES_PER_ELEMENT; // length - - // totalSize += addendum.byteLength; // data - const addendumType = addendumTypes[i]; - const Serializer = ADDENDUM_SERIALIZERS[addendumType]; - const normalizedAddendum = Serializer.normalize(addendum); - addendums[i] = normalizedAddendum; - const addendumByteLength = Serializer.getSize(normalizedAddendum); - totalSize += align4(addendumByteLength); - } - - const ab = new ArrayBuffer(totalSize); - const uint8Array = new Uint8Array(ab); - const dataView = new DataView(ab); - { - let index = 0; - // sb - { - dataView.setUint32(index, sb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - uint8Array.set(sb, index); - index += sb.byteLength; - index = align4(index); - } - // addendums - dataView.setUint32(index, addendums.length, true); - index += Uint32Array.BYTES_PER_ELEMENT; - for (let i = 0; i < addendums.length; i++) { - const addendum = addendums[i]; - const addendumIndex = addendumIndexes[i]; - const addendumType = addendumTypes[i]; - - dataView.setUint32(index, addendumIndex, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - dataView.setUint32(index, addendumType, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const Serializer = ADDENDUM_SERIALIZERS[addendumType]; - const addendumByteLength = Serializer.getSize(addendum); - - dataView.setUint32(index, addendumByteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - Serializer(addendum, uint8Array, index); - index += align4(addendumByteLength); - } - } - return uint8Array; -} -function zbdecode(uint8Array) { - // console.log('zbdecode 1', uint8Array, new Error().stack); - const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength); - // console.log('zbdecode 2', dataView, new Error().stack); - - let index = 0; - const sbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const sb = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, sbLength); - index += sbLength; - index = align4(index); - const s = textDecoder.decode(sb); - let j = JSON.parse(s); - - const numAddendums = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const addendums = Array(numAddendums); - const addendumIndexes = Array(numAddendums); - const addendumTypes = Array(numAddendums); - for (let i = 0; i < numAddendums; i++) { - const addendumIndex = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const addendumType = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const addendumByteLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const TypedArrayCons = ADDENDUM_CONSTRUCTORS[addendumType]; - /* if (!TypedArrayCons) { - console.warn('failed to find typed array cons for', addendumType); - } */ - const addendum = TypedArrayCons( - uint8Array.buffer, - uint8Array.byteOffset + index, - addendumByteLength - ); - index += addendumByteLength; - index = align4(index); - - addendums[i] = addendum; - addendumIndexes[i] = addendumIndex; - addendumTypes[i] = addendumType; - } - - { - let recursionIndex = 0; - let currentAddendum = 0; - const _recurseBindAddendums = o => { - recursionIndex++; - - const addendumIndex = addendumIndexes[currentAddendum]; - if (addendumIndex === recursionIndex) { - const addendum = addendums[currentAddendum]; - currentAddendum++; - return addendum; - } else if (Array.isArray(o)) { - for (let i = 0; i < o.length; i++) { - const addendum = _recurseBindAddendums(o[i]); - if (addendum) { - o[i] = addendum; - } - } - } else if (typeof o === 'object' && o !== null) { - for (const k in o) { - const addendum = _recurseBindAddendums(o[k]); - if (addendum) { - o[k] = addendum; - } - } - } - return null; - }; - const j2 = _recurseBindAddendums(j); - if (j2 !== null) { - j = j2; - } - if (currentAddendum !== addendums.length) { - console.warn('did not bind all addendums', j, currentAddendum, addendums); - debugger; - } - return j; - } -} - -function zbclone(o) { - return zbdecode(zbencode(o)); -} - -export { - zbencode, - zbdecode, - zbclone, -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/package.json deleted file mode 100644 index c22d76838..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "@upstreet/zjs", - "version": "0.6.0", - "main": "encoding.mjs", - "scripts": { - "test": "mocha --timeout 60000" - }, - "devDependencies": { - "alea": "^1.0.1", - "mocha": "^9.1.3" - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/test/test.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/test/test.mjs deleted file mode 100644 index 3495e74c0..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/test/test.mjs +++ /dev/null @@ -1,1490 +0,0 @@ -import assert from 'assert'; -import Z from '../z.mjs'; -import alea from 'alea'; - -const rng = new alea('lol'); -Z.setRng(rng); - -function rngndc() { - return (rng() - 0.5) * 2; -} - -/* const keypress = async () => { - process.stdin.setRawMode(true) - return new Promise(resolve => process.stdin.once('data', () => { - process.stdin.setRawMode(false) - resolve() - })) -}; */ - -describe('zbencode + zbdecode', function() { - describe('basic', function() { - it('should support basic operations', function() { - const s = 'lol'; - assert.equal(s, Z.zbdecode(Z.zbencode(s))); - - const n = 42; - assert.equal(n, Z.zbdecode(Z.zbencode(n))); - - const a = [s, n]; - assert.deepEqual(a, Z.zbdecode(Z.zbencode(a))); - - const o = { - s, - }; - assert.deepEqual(o, Z.zbdecode(Z.zbencode(o))); - - const float32Array = Float32Array.from([1, 2, 2]); - const o2 = { - float32Array, - }; - assert.deepEqual(o2, Z.zbdecode(Z.zbencode(o2))); - - const uint8Array = Uint8Array.from([1, 2, 2]); - const int16Array = Int8Array.from([1, 2, 2]); - const o3 = { - uint8Array, - int16Array, - float32Array, - }; - assert.deepEqual(o3, Z.zbdecode(Z.zbencode(o3))); - }); - }); -}); - -describe('ZMap', function() { - describe('detached', function() { - const map = new Z.Map(); - - map.set('key', 'value'); - assert.equal(map.get('key'), 'value'); - assert.equal(map.get('key2'), undefined); - }); - describe('inline', function() { - it('should support basic operations', function() { - const doc = new Z.Doc(); - const map = doc.getMap('map'); - - map.set('key', 'value'); - assert.equal(map.get('key'), 'value'); - assert.equal(map.get('key2'), undefined); - - const keys = Array.from(map.keys()); - assert.deepEqual(keys, ['key']); - - const values = Array.from(map.values()); - assert.deepEqual(values, [{ - content: { - type: 'value', - }, - }]); - - const entries = Array.from(map.entries()); - assert.deepEqual(entries, [['key', { - content: { - type: 'value', - }, - }]]); - - map.set('key2', 'value2'); - assert.equal(map.get('key2'), 'value2'); - }); - }); - describe('delayed attach', function() { - const map = new Z.Map(); - map.set('key', 'value'); - - const doc = new Z.Doc(); - const array = doc.getArray('array'); - array.push([map]); - - assert.deepEqual(doc.toJSON(), { - array: [ - { - key: 'value', - }, - ], - }); - }); -}); - -describe('ZArray', function() { - describe('detached', function() { - const array = new Z.Array(); - - array.push([1]); - assert.equal(array.get(0), 1); - assert.equal(array.get(1), undefined); - assert.equal(array.length, 1); - assert.deepEqual(array.toJSON(), [1]); - }); - describe('inline', function() { - it('should support basic operations', function() { - const doc = new Z.Doc(); - const array = doc.getArray('array'); - - array.push([1]); - assert.equal(array.get(0), 1); - assert.equal(array.get(1), undefined); - assert.equal(array.length, 1); - assert.deepEqual(array.toJSON(), [1]); - - array.push([2]); - assert.equal(array.length, 2); - assert.equal(array.get(0), 1); - assert.equal(array.get(1), 2); - assert.equal(array.get(2), undefined); - assert.deepEqual(array.toJSON(), [1, 2]); - - array.delete(0); - assert.equal(array.length, 1); - assert.equal(array.get(0), 2); - assert.equal(array.get(1), undefined); - assert.deepEqual(array.toJSON(), [2]); - }); - }); - describe('delayed attach', function() { - const array = new Z.Array(); - array.push([1]); - - const doc = new Z.Doc(); - const map = doc.getMap('map'); - map.set('array', array); - - assert.deepEqual(doc.toJSON(), { - map: { - array: [1], - }, - }); - }); -}); - -describe('api limits', function() { - it('array limits', function() { - const doc = new Z.Doc(); - const array = doc.getArray('array'); - - { - let numThrows = 0; - try { - array.push([1, 2]); - } catch (err) { - numThrows++; - } - assert.equal(numThrows, 1); - } - { - let numThrows = 0; - try { - array.insert(0, [1, 2]); - } catch (err) { - numThrows++; - } - assert.equal(numThrows, 1); - } - { - let numThrows = 0; - try { - array.push([1, 2]); - } catch (err) { - numThrows++; - } - assert.equal(numThrows, 1); - } - { - let numThrows = 0; - try { - array.unshift([1, 2]); - } catch (err) { - numThrows++; - } - assert.equal(numThrows, 1); - } - }); -}); - -describe('complex data', function() { - it('mixed map array', function() { - const doc = new Z.Doc(); - const array = doc.getArray('array'); - const map = doc.getMap('map'); - - array.push([1]); - map.set('key', 'value'); - assert.deepEqual(doc.toJSON(), {array: [1], map: {key: 'value'}}); - }); - it('array of maps', function() { - const doc = new Z.Doc(); - const array = doc.getArray('array'); - - const map1 = new Z.Map(); - const map2 = new Z.Map(); - const map3 = new Z.Map(); - array.push([map1]); - array.push([map2]); - array.push([map3]); - - map2.set('lol2', 'zol2'); - map1.set('lol1', 32.5); - const float32Array = Float32Array.from([1, 2, 3]); - map3.set('lol3', float32Array); - - assert.deepEqual(doc.toJSON(), { - array: [ - { - lol1: 32.5, - }, - { - lol2: 'zol2', - }, - { - lol3: float32Array, - }, - ], - }); - }); -}); - -describe('observers', function() { - describe('basic', function() { - it('array observers', function() { - { - const doc = new Z.Doc(); - const array = doc.getArray('array'); - let numObserves = 0; - const observe = e => { - const rawValue = 1; - const value = { - content: { - type: rawValue, - } - } - assert.deepEqual(e.changes, { - added: new Set([value]), - deleted: new Set([]), - keys: new Map([[ - 0, - { - action: 'add', - value: rawValue, - }, - ]]), - }); - - numObserves++; - }; - array.observe(observe); - array.push([1]); - assert.equal(numObserves, 1); - } - { - const doc = new Z.Doc(); - const array = doc.getArray('array'); - let numObserves = 0; - const observe = e => { - numObserves++; - }; - array.observe(observe); - array.unobserve(observe); - array.push([1]); - assert.equal(numObserves, 0); - } - }); - it('map observers', function() { - { - const doc = new Z.Doc(); - const map = doc.getMap('map'); - let numObserves = 0; - const observe = e => { - const rawValue = 'value'; - const value = { - content: { - type: rawValue, - }, - }; - assert.deepEqual(e.changes, { - added: new Set([value]), - deleted: new Set([]), - keys: new Map([[ - 'key', - { - action: 'update', - value: rawValue, - }, - ]]), - }); - - numObserves++; - }; - map.observe(observe); - map.set('key', 'value'); - assert.equal(numObserves, 1); - } - { - const doc = new Z.Doc(); - const map = doc.getMap('map'); - let numObserves = 0; - const observe = e => { - numObserves++; - }; - map.observe(observe); - map.unobserve(observe); - map.set('key', 'value'); - assert.equal(numObserves, 0); - } - }); - }); -}); - -describe('sync', function() { - describe('state reset', function() { - it('basic state reset', function() { - const doc1 = new Z.Doc(); - const map1 = doc1.getMap('map'); - const array1 = doc1.getArray('array'); - - const doc2 = new Z.Doc(); - const map2 = doc2.getMap('map'); - const array2 = doc2.getArray('array'); - - const doc3 = new Z.Doc(); - const map3 = doc3.getMap('map'); - const array3 = doc3.getArray('array'); - - map1.set('key', 'value'); - array1.push([7]); - - { - const uint8Array = Z.encodeStateAsUpdate(doc1); - Z.applyUpdate(doc2, uint8Array); - - assert.deepEqual(map1.toJSON(), {key: 'value'}); - assert.deepEqual(map2.toJSON(), {key: 'value'}); - assert.deepEqual(array1.toJSON(), [7]); - assert.deepEqual(array2.toJSON(), [7]); - } - { - let numObserves = 0; - const observe1 = e => { - const rawValue = 'value'; - const value = { - content: { - type: rawValue, - }, - }; - assert.deepEqual(e.changes, { - added: new Set([value]), - deleted: new Set([]), - keys: new Map([[ - 'key', - { - action: 'add', - value: rawValue, - }, - ]]), - }); - - numObserves++ - }; - map3.observe(observe1); - - const observe2 = e => { - const rawValue = 7; - const value = { - content: { - type: rawValue, - }, - }; - assert.deepEqual(e.changes, { - added: new Set([value]), - deleted: new Set([]), - keys: new Map([[ - 0, - { - action: 'add', - value: rawValue, - }, - ]]), - }); - - numObserves++ - }; - array3.observe(observe2); - - const uint8Array = Z.encodeStateAsUpdate(doc2); - Z.applyUpdate(doc3, uint8Array); - - assert.equal(numObserves, 2); - assert.deepEqual(map3.toJSON(), {key: 'value'}); - assert.deepEqual(array3.toJSON(), [7]); - } - }); - }); - describe('basic transactions', function() { - it('array push', function() { - const doc1 = new Z.Doc(); - const array1 = doc1.getArray('array'); - - const doc2 = new Z.Doc(); - const array2 = doc2.getArray('array'); - - doc1.on('update', (uint8Array, origin, doc, transaction) => { - Z.applyUpdate(doc2, uint8Array, origin); - }); - doc1.transact(() => { - array1.push(['lol']); - }); - assert.deepEqual(array1.toJSON(), ['lol']); - assert.deepEqual(array2.toJSON(), ['lol']); - }); - it('array delete', function() { - const doc1 = new Z.Doc(); - const array1 = doc1.getArray('array'); - - const doc2 = new Z.Doc(); - const array2 = doc2.getArray('array'); - - doc1.on('update', (uint8Array, origin, doc, transaction) => { - Z.applyUpdate(doc2, uint8Array, origin); - }); - doc1.transact(() => { - array1.push(['lol']); - array1.delete(0); - }); - assert.deepEqual(array1.toJSON(), []); - assert.deepEqual(array2.toJSON(), []); - }); - it('map set', function() { - const doc1 = new Z.Doc(); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - const map2 = doc2.getMap('map'); - - doc1.on('update', (uint8Array, origin, doc, transaction) => { - Z.applyUpdate(doc2, uint8Array, origin); - }); - doc1.transact(() => { - map1.set('key', 'value'); - }); - assert.deepEqual(map1.toJSON(), {key: 'value'}); - assert.deepEqual(map2.toJSON(), {key: 'value'}); - }); - it('map delete', function() { - const doc1 = new Z.Doc(); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - const map2 = doc2.getMap('map'); - - doc1.on('update', (uint8Array, origin, doc, transaction) => { - Z.applyUpdate(doc2, uint8Array, origin); - }); - doc1.transact(() => { - map1.set('key', 'value'); - map1.delete('key'); - }); - assert.deepEqual(map1.toJSON(), {}); - assert.deepEqual(map2.toJSON(), {}); - }); - }); - describe('non-conflicting transactions', function() { - const run = forward => function() { - const doc1 = new Z.Doc(); - const array1 = doc1.getArray('array'); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - const array2 = doc2.getArray('array'); - const map2 = doc2.getMap('map'); - - const doc3 = new Z.Doc(); - doc3.setMirror(true); - const array3 = doc3.getArray('array'); - const map3 = doc3.getMap('map'); - - let doc1Update; - doc1.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - doc1Update = uint8Array; - } - }); - let doc2Update; - doc2.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc2') { - doc2Update = uint8Array; - } - }); - doc3.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - Z.applyUpdate(doc2, uint8Array, origin); - } else if (origin === 'doc2') { - Z.applyUpdate(doc1, uint8Array, origin); - } - }); - - doc1.transact(() => { - array1.push(['lol']); - }, 'doc1'); - doc2.transact(() => { - map2.set('lol', 'zol'); - }, 'doc2'); - - let fns = [ - () => { - Z.applyUpdate(doc3, doc1Update, 'doc1'); - }, - () => { - Z.applyUpdate(doc3, doc2Update, 'doc2'); - }, - ]; - if (!forward) { - fns = fns.reverse(); - } - for (const fn of fns) { - fn(); - } - - assert.deepEqual(array3.toJSON(), ['lol']); - assert.deepEqual(map3.toJSON(), {lol: 'zol'}); - assert.deepEqual(array1.toJSON(), ['lol']); - assert.deepEqual(map1.toJSON(), {lol: 'zol'}); - assert.deepEqual(array2.toJSON(), ['lol']); - assert.deepEqual(map2.toJSON(), {lol: 'zol'}); - - assert.equal(doc1.clock, 2); - assert.equal(doc2.clock, 2); - assert.equal(doc3.clock, 2); - } - it('array + map', run(true)); - it('array + map reverse', run(false)); - }); - describe('conflicting transactions', function() { - { - const run = forward => function() { - const doc1 = new Z.Doc(); - doc1.setResolvePriority(1); - const array1 = doc1.getArray('array'); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - doc2.setResolvePriority(1); - const array2 = doc2.getArray('array'); - const map2 = doc2.getMap('map'); - - const doc3 = new Z.Doc(); - doc3.setResolvePriority(0); - const array3 = doc3.getArray('array'); - const map3 = doc3.getMap('map'); - - // initialize - { - array1.push([1]); - const uint8Array = Z.encodeStateAsUpdate(doc1); - Z.applyUpdate(doc2, uint8Array); - Z.applyUpdate(doc3, uint8Array); - } - - let doc1Update; - doc1.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - doc1Update = uint8Array; - } - }); - let doc2Update; - doc2.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc2') { - doc2Update = uint8Array; - } - }); - - doc1.transact(() => { - array1.push([2]); - }, 'doc1'); - doc2.transact(() => { - array2.delete(0); - }, 'doc2'); - - if (forward) { - Z.applyUpdate(doc3, doc1Update, 'doc1'); - Z.applyUpdate(doc3, doc2Update, 'doc2'); - } else { - Z.applyUpdate(doc3, doc2Update, 'doc2'); - Z.applyUpdate(doc3, doc1Update, 'doc1'); - } - - assert.deepEqual(array3.toJSON(), [2]); - }; - it('conflicting array push delete', run(true)); - it('conflicting array push delete', run(false)); - } - { - const run = forward => function() { - const doc1 = new Z.Doc(); - doc1.setResolvePriority(1); - const array1 = doc1.getArray('array'); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - doc2.setResolvePriority(1); - const array2 = doc2.getArray('array'); - const map2 = doc2.getMap('map'); - - const doc3 = new Z.Doc(); - doc3.setResolvePriority(0); - const array3 = doc3.getArray('array'); - const map3 = doc3.getMap('map'); - - // initialize - { - array1.push([1]); - array1.push([2]); - const uint8Array = Z.encodeStateAsUpdate(doc1); - Z.applyUpdate(doc2, uint8Array); - Z.applyUpdate(doc3, uint8Array); - } - - let doc1Update; - doc1.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - doc1Update = uint8Array; - } - }); - let doc2Update; - doc2.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc2') { - doc2Update = uint8Array; - } - }); - - doc1.transact(() => { - array1.delete(0); - }, 'doc1'); - doc2.transact(() => { - array2.delete(0); - }, 'doc2'); - - if (forward) { - Z.applyUpdate(doc3, doc1Update, 'doc1'); - Z.applyUpdate(doc3, doc2Update, 'doc2'); - } else { - Z.applyUpdate(doc3, doc2Update, 'doc2'); - Z.applyUpdate(doc3, doc1Update, 'doc1'); - } - - assert.deepEqual(array3.toJSON(), [2]); - }; - it('conflicting array delete same', run(true)); - it('conflicting array delete same reverse', run(true)); - } - { - const run = forward => function() { - const doc1 = new Z.Doc(); - doc1.setResolvePriority(1); - const array1 = doc1.getArray('array'); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - doc2.setResolvePriority(1); - const array2 = doc2.getArray('array'); - const map2 = doc2.getMap('map'); - - const doc3 = new Z.Doc(); - doc3.setResolvePriority(0); - const array3 = doc3.getArray('array'); - const map3 = doc3.getMap('map'); - - // initialize - { - array1.push([1]); - array1.push([2]); - array1.push([3]); - const uint8Array = Z.encodeStateAsUpdate(doc1); - Z.applyUpdate(doc2, uint8Array); - Z.applyUpdate(doc3, uint8Array); - } - - let doc1Update; - doc1.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - doc1Update = uint8Array; - } - }); - let doc2Update; - doc2.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc2') { - doc2Update = uint8Array; - } - }); - - doc1.transact(() => { - array1.delete(0); - }, 'doc1'); - doc2.transact(() => { - array2.delete(2); - }, 'doc2'); - - if (forward) { - Z.applyUpdate(doc3, doc1Update, 'doc1'); - Z.applyUpdate(doc3, doc2Update, 'doc2'); - } else { - Z.applyUpdate(doc3, doc2Update, 'doc2'); - Z.applyUpdate(doc3, doc1Update, 'doc1'); - } - - assert.deepEqual(array3.toJSON(), [2]); - }; - it('conflicting array delete different', run(true)); - it('conflicting array delete different reverse', run(false)); - } - { - const run = forward => function() { - const doc1 = new Z.Doc(); - doc1.setResolvePriority(1); - const array1 = doc1.getArray('array'); - - const doc2 = new Z.Doc(); - doc2.setResolvePriority(1); - const array2 = doc2.getArray('array'); - - const doc3 = new Z.Doc(); - doc3.setResolvePriority(0); - const array3 = doc3.getArray('array'); - - const map1 = new Z.Map(); - const map2 = new Z.Map(); - const map3 = new Z.Map(); - - // initialize - { - array1.push([map1]); - array1.push([map2]); - array1.push([map3]); - - map2.set('lol2', 'zol2'); - map3.set('lol3', 'zol3'); - - const uint8Array = Z.encodeStateAsUpdate(doc1); - Z.applyUpdate(doc2, uint8Array); - Z.applyUpdate(doc3, uint8Array); - } - - let doc1Update; - doc1.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - doc1Update = uint8Array; - } - }); - let doc2Update; - doc2.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc2') { - doc2Update = uint8Array; - } - }); - - doc1.transact(() => { - map1.set('lol1', 'zol1'); - }, 'doc1'); - doc2.transact(() => { - array2.delete(0); - }, 'doc2'); - - if (forward){ - Z.applyUpdate(doc3, doc1Update, 'doc1'); - Z.applyUpdate(doc3, doc2Update, 'doc2'); - } else { - Z.applyUpdate(doc3, doc2Update, 'doc2'); - Z.applyUpdate(doc3, doc1Update, 'doc1'); - } - - assert.deepEqual(array3.toJSON(), [ - { - lol2: 'zol2', - }, - { - lol3: 'zol3', - } - ]); - }; - it('conflicting deep array > map', run(true)); - it('conflicting deep array > map reverse', run(false)); - } - { - const run = forward => function() { - const doc1 = new Z.Doc(); - doc1.setResolvePriority(1); - const map1 = doc1.getMap('map'); - - const doc2 = new Z.Doc(); - doc2.setResolvePriority(1); - const map2 = doc2.getMap('map'); - - const doc3 = new Z.Doc(); - doc3.setResolvePriority(0); - const map3 = doc3.getMap('map'); - - const array11 = new Z.Array(); - const array12 = new Z.Array(); - const array13 = new Z.Array(); - - const array21 = new Z.Array(); - const array22 = new Z.Array(); - const array23 = new Z.Array(); - - // initialize - { - map1.set('array1', array11); - map1.set('array2', array12); - map1.set('array3', array13); - - map2.set('array1', array21); - map2.set('array2', array22); - map2.set('array3', array23); - - array11.push([1]); - array11.push([2]); - array11.push([3]); - - array12.push([4]); - array12.push([5]); - array12.push([6]); - - array13.push([7]); - array13.push([8]); - array13.push([9]); - - const uint8Array = Z.encodeStateAsUpdate(doc1); - Z.applyUpdate(doc2, uint8Array); - Z.applyUpdate(doc3, uint8Array); - } - - let doc1Update; - doc1.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc1') { - doc1Update = uint8Array; - } - }); - let doc2Update; - doc2.on('update', (uint8Array, origin, doc, transaction) => { - if (origin === 'doc2') { - doc2Update = uint8Array; - } - }); - - doc1.transact(() => { - map1.set('array1', 42); - map1.set('array1', 20); - map1.delete('array1'); - map1.set('array1', null); - }, 'doc1'); - doc2.transact(() => { - array21.delete(0); - array21.push([100]); - array21.delete(2); - array21.push([100]); - array21.push([101]); - array21.delete(0); - }, 'doc2'); - - if (forward) { - Z.applyUpdate(doc3, doc1Update, 'doc1'); - Z.applyUpdate(doc3, doc2Update, 'doc2'); - } else { - Z.applyUpdate(doc3, doc2Update, 'doc2'); - Z.applyUpdate(doc3, doc1Update, 'doc1'); - } - - { - const map3 = doc3.getMap('map'); - const array31 = map3.get('array1'); - const array32 = map3.get('array2', Z.Array); - const array33 = map3.get('array3', Z.Array); - } - - assert.deepEqual(doc3.toJSON(), { - map: { - array1: null, - array2: [4, 5, 6], - array3: [7, 8, 9], - }, - }); - }; - it('conflicting deep map > array', run(true)); - it('conflicting deep map > array reverse', run(false)); - } - }); -}); -describe('stress test', function() { - const _makeId = () => rng().toString(36).substr(2, 5); - const _makeDataView = uint8Array => new DataView(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength); - const MESSAGES = (() => { - let iota = 0; - return { - STATE_RESET: ++iota, - TRANSACTION: ++iota, - }; - })(); - const _parsePacketData = uint8Array =>{ - const dataView = _makeDataView(uint8Array); - - let index = 0; - const method = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const _handleStateMessage = () => { - const clock = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const encodedData = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index); - const state = Z.zbdecode(encodedData); - return { - clock, - state, - }; - }; - const _handleTransactionMessage = () => { - let transactionCache = Z.TransactionCache.deserializeUpdate(uint8Array); - const events = transactionCache.events.map(event => { - return { - name: event.constructor.name, - keyPath: JSON.stringify(event.keyPath), - keyTypes: event.keyTypes, - arr: event.arr, - startClock: transactionCache.startClock, - }; - }); - return events; - }; - switch (method) { - case MESSAGES.STATE_RESET: { - return _handleStateMessage(); - } - case MESSAGES.TRANSACTION: { - return _handleTransactionMessage(); - } - default: { - console.warn('unknown method:', method); - return null; - } - } - }; - const _parsePacket = packet => { - const uint8Array = packet.data; - return _parsePacketData(uint8Array); - }; - - const appId = _makeId(); - - class Simulation { - constructor(server, clients = []) { - if (server === undefined) { - server = new ServerWorldView(); - server.bind(); - } - - this.server = server; - this.clients = clients; - } - update() { - // add client - { - const r = rng(); - if (r < 0.25) { - const client = new ClientWorldView(); - - const _packet = packet => { - client.removeEventListener('packet', _packet); - client.bind(); - }; - client.addEventListener('packet', _packet); - - const pipe = this.server.pipe(client); - client.pipe(this.server); - - this.server.emitInitialPacket(pipe); - - this.clients.push(client); - } - } - // remove client - { - const r = rng(); - if (r < 0.2) { - if (this.clients.length > 0) { - const index = Math.floor(rng() * this.clients.length); - const client = this.clients[index]; - - this.server.unpipe(client); - client.unpipe(this.server); - this.clients.splice(index, 1); - - this.server.clearPlayer(client.playerId); - } - } - } - // tick all clients - { - for (const client of this.clients) { - client.update(); - } - } - // tick server - { - this.server.update(); - } - } - clone() { - const server = this.server.clone(); - const clients = this.clients.map(client => client.clone()); - for (let i = 0; i < clients.length; i++) { - const serverToOldClientPipe = server.pipes.find(pipe => pipe.destination === this.clients[i]); - serverToOldClientPipe.destination = clients[i]; - - const clientToOldServerPipe = clients[i].pipes.find(pipe => pipe.destination === this.server); - clientToOldServerPipe.destination = server; - } - - return new Simulation( - server, - clients - ); - } - flush() { - const _flushClients = () => { - for (const client of this.clients) { - client.flush(); - } - }; - const _flushServer = () => { - this.server.flush(); - }; - - _flushClients(); - _flushServer(); - _flushClients(); - } - verify() { - const serverWorldAppManagerAppArray = this.server.doc.getArray('world.apps'); - const serverPlayersArray = this.server.doc.getArray('players'); - const serverPlayersArray2 = Array(serverPlayersArray.length); - for (let i = 0; i < serverPlayersArray.length; i++) { - serverPlayersArray2[i] = serverPlayersArray.get(i, Z.Map); - } - const serverPlayersMap = new Map(serverPlayersArray2.map(player => { - return [ - player.get('playerId'), - player.toJSON(), - ]; - })); - - for (const client of this.clients) { - const clientWorldAppManagerAppArray = client.doc.getArray('world.apps'); - const clientPlayersArray = client.doc.getArray('players'); - const clientPlayersArray2 = Array(clientPlayersArray.length); - for (let i = 0; i < clientPlayersArray.length; i++) { - clientPlayersArray2[i] = clientPlayersArray.get(i, Z.Map); - } - const clientPlayersMap = new Map(clientPlayersArray2.map(player => { - return [ - player.get('playerId'), - player.toJSON(), - ]; - })); - - assert.deepEqual(clientWorldAppManagerAppArray.toJSON(), serverWorldAppManagerAppArray.toJSON()); - assert.deepEqual(serverPlayersMap, clientPlayersMap); - } - } - } - class AppManager { - constructor(appId, appsArray) { - this.appId = appId; - this.appsArray = appsArray; - } - update() { - const r = rng(); - if (r < 0.25) { // perform app action - // find existing app - let appMap = (() => { - for (let i = 0; i < this.appsArray.length; i++) { - const appMap = this.appsArray.get(i, Z.Map); - if (appMap.get('appId') === this.appId) { - return appMap; - } - } - return null; - })(); - // ensure app is added - if (!appMap) { - appMap = new Z.Map(); - appMap.set('appId', this.appId); - this.appsArray.push([appMap]); - } - } - } - } - class PacketQueueEntry { - constructor(data, delay, origin) { - this.data = data; - this.delay = delay; - this.origin = origin; - } - clone() { - return new PacketQueueEntry(this.data, this.delay, this.origin); - } - } - class Pipe { - constructor(destination, outPacketQueue = []) { - this.destination = destination; - this.outPacketQueue = outPacketQueue; - } - pushPacket(data, origin) { - const delay = Math.round(rng() * 2); - const packet = new PacketQueueEntry(data, delay, origin); - this.outPacketQueue.push(packet); - } - clone() { - const pipe = new Pipe( - this.destination, - this.outPacketQueue.map(e => e.clone()) - ); - return pipe; - } - } - class WorldView extends EventTarget { - constructor(doc = new Z.Doc()) { - super(); - - this.doc = doc; - this.appManager = null; - this.remotePlayers = []; - this.isBound = false; - - // packet buffer - this.pipes = []; - this.outPacketQueue = []; - - // listen for players - const playersArray = this.getPlayersArray(); - playersArray.observe(e => { - // remove old players - for (const d of e.changes.deleted.values()) { - const { - content: { - type: oldPlayerMap, - }, - } = d; - const playerId = oldPlayerMap.get('playerId'); - const oldPlayerIndex = this.remotePlayers.findIndex(player => player.playerId === playerId); - if (oldPlayerIndex !== -1) { - const oldPlayer = this.remotePlayers[oldPlayerIndex]; - oldPlayer.destroy(); - this.remotePlayers.splice(oldPlayerIndex, 1); - } else { - throw new Error('delete nonexistent player: ' + playerId); - } - } - - // add new players - for (const a of e.changes.added.values()) { - let { - content: { - type: newPlayerMap, - }, - } = a; - // players in the new state will not be typed if they are not in the old state - // therefore, perform the type binding here - if (!newPlayerMap.isZMap) { - for (let i = 0; i < playersArray.length; i++) { - const playerMap = playersArray.get(i, Z.Map); - if (playerMap.get('playerId') === newPlayerMap.playerId) { - newPlayerMap = playerMap; - break; - } - } - } - const newPlayer = new Player(newPlayerMap); - this.remotePlayers.push(newPlayer); - } - }); - } - getPlayersArray() { - return this.doc.getArray('players'); - } - pipe(packetDestination) { - if (!packetDestination) { - throw new Error('packet destination is null'); - } - const pipe = new Pipe(packetDestination); - this.pipes.push(pipe); - return pipe; - } - unpipe(packetDestination) { - const index = this.pipes.findIndex(pipe => pipe.destination === packetDestination); - if (index !== -1) { - this.pipes.splice(index, 1); - } else { - throw new Error('unpipe nonexistent packet destination'); - } - } - bind(opts) { - this.isBound = true; - } - update() { - if (this.isBound) { - const _tickPackets = () => { - let maxNumDelays = 0; - for (const pipe of this.pipes) { - let numDelays = 0; - for (const packet of pipe.outPacketQueue) { - numDelays += packet.delay; - } - maxNumDelays = Math.max(maxNumDelays, numDelays); - } - - const numTicks = Math.max(Math.floor(rng() * maxNumDelays), 1); - for (let i = 0; i < numTicks; i++) { - for (const pipe of this.pipes) { - // globalThis.maxQueueLength = Math.max(globalThis.maxQueueLength, pipe.outPacketQueue.length); - while (pipe.outPacketQueue.length > 0) { - const packet = pipe.outPacketQueue[0]; - if (packet.delay > 0) { - packet.delay--; - break; - } else { - const packetDestination = pipe.destination; - packetDestination.handlePacket(packet); - pipe.outPacketQueue.shift(); - } - } - } - } - }; - _tickPackets(); - } - } - flush() { - for (const pipe of this.pipes) { - if (pipe.outPacketQueue.length > 0) { - for (const packet of pipe.outPacketQueue) { - const packetDestination = pipe.destination; - packetDestination.handlePacket(packet); - } - pipe.outPacketQueue.length = 0; - } - } - } - handlePacket(packet) { - Z.applyUpdate(this.doc, packet.data, packet.origin, this.playerId); - - this.dispatchEvent(new MessageEvent('packet', { - data: packet, - })); - } - clone() { - const newDoc = this.doc.clone(); - const result = (() => { - if (this instanceof ServerWorldView) { - return new ServerWorldView(newDoc, { - initialize: false, - }); - } else if (this instanceof ClientWorldView) { - return new ClientWorldView(newDoc, { - initialize: false, - }); - } else { - throw new Error('unknown world view type'); - } - })(); - result.playerId = this.playerId; - result.pipes = this.pipes.map(pipe => pipe.clone()); - - const playersArray = newDoc.getArray('players'); - for (let i = 0; i < playersArray.length; i++) { - const playerMap = playersArray.get(i, Z.Map); - const player = new Player(playerMap); - result.remotePlayers.push(player); - } - - if (this.isBound) { - result.bind({ - initialize: false, - }); - } - - return result; - } - } - // let numEmits = 0; - class ServerWorldView extends WorldView { - constructor(doc = new Z.Doc(), {initialize = true} = {}) { - super(doc); - - this.doc.setResolvePriority(0); - this.doc.setMirror(true); - - // listen for server document updates/mirrors - this.doc.on('update', (uint8Array, origin, doc, transaction) => { - for (const pipe of this.pipes) { - if (pipe.destination.playerId !== origin) { // do not mirror recursively - pipe.pushPacket(uint8Array, origin); - } - } - }); - - if (initialize) { - this.playerId = 'server'; - } else { - this.playerId = null; - } - this.appManager = null; - } - bind(opts = {}) { - super.bind(opts); - - const appsArray = this.doc.getArray('world.apps'); - this.appManager = new AppManager(appId, appsArray); - } - emitInitialPacket(pipe) { - const uint8Array = Z.encodeStateAsUpdate(this.doc); - pipe.pushPacket(uint8Array); - } - update() { - super.update(); - } - clearPlayer(playerId) { - const playerIndex = this.remotePlayers.findIndex(player => player.playerId === playerId); - if (playerIndex !== -1) { - const playersArray = this.getPlayersArray(); - /* const playerMap = playersArray.get(playerIndex, Z.Map); - if (playerMap.get('playerId') !== playerId) { - console.warn('deleting the wrong player id', playerId, playerMap.get('playerId')); - throw new Error('fail'); - } */ - playersArray.delete(playerIndex); - } /* else { - throw new Error('failed to clear player: ' + playerId); - } */ - } - } - class ClientWorldView extends WorldView { - constructor(doc = new Z.Doc(), {initialize = true} = {}) { - super(doc); - - this.doc.setResolvePriority(1); - - // listen for client document updates - this.doc.on('update', (uint8Array, origin, doc, transaction) => { - for (const pipe of this.pipes) { - pipe.pushPacket(uint8Array, this.playerId); - } - }); - - if (initialize) { - this.playerId = 'player.' + _makeId(); - } else { - this.playerId = null; - } - this.localPlayer = null; - this.appManager = null; - this.worldAppManager = null; - } - bind(opts = {}) { - super.bind(opts); - - const {initialize = true} = opts; - - const playersArray = this.getPlayersArray(); - if (initialize) { - this.doc.transact(() => { - const localPlayerMap = new Z.Map(); - localPlayerMap.set('playerId', this.playerId); - const position = Float32Array.from([rngndc(), rngndc(), rngndc()]); - localPlayerMap.set('position', position); - const appsArray = new Z.Array(); - - localPlayerMap.set('apps', appsArray); - - playersArray.push([localPlayerMap]); - - this.localPlayer = new Player(localPlayerMap); - this.appManager = new AppManager(appId, appsArray); - }); - } else { - let localPlayerMap = (() => { - for (let i = 0; i < playersArray.length; i++) { - const playerMap = playersArray.get(i, Z.Map); - if (playerMap.get('playerId') === this.playerId) { - return playerMap; - } - } - return null; - })(); - if (localPlayerMap) { - const appsArray = localPlayerMap.get('apps', Z.Array); - this.localPlayer = new Player(localPlayerMap); - this.appManager = new AppManager(appId, appsArray); - } else { - throw new Error('could not bind world client'); - } - } - - const worldAppsArray = this.doc.getArray('world.apps'); - this.worldAppManager = new AppManager(appId, worldAppsArray); - } - update() { - const r = rng(); - if (this.isBound) { - if (r < 1/3) { - const newPosition = Float32Array.from([rngndc(), rngndc(), rngndc()]); - this.localPlayer.playerMap.set('position', newPosition); - } - - if (this.appManager.appsArray.doc !== this.doc) { - console.warn('app manager doc mismatch 3'); - process.exit(1); - throw new Error('app manager doc mismatch 3'); - } - this.appManager.update(); - } - - super.update(); - } - } - class Player { - constructor(playerMap) { - this.playerMap = playerMap; - const appsArray = playerMap.get('apps', Z.Array); - this.appManager = new AppManager(appId, appsArray); - } - get playerId() { - return this.playerMap.get('playerId'); - } - set playerId(playerId) { - this.playerMap.set('playerId', playerId); - } - destroy() { - // XXX - } - } - const _check = simulation => { - const simulation2 = simulation.clone(); - simulation2.flush(); - simulation2.verify(); - }; - const _stressTest = (numIterations = 1) => { - const simulation = new Simulation(); - for (let i = 0; i < numIterations; i++) { - // console.log('iteration', i); - simulation.update(); - // console.log('verify', i, simulation.clients.length, globalThis.maxHistoryLength, globalThis.maxHistoryTailLength); - // _check(simulation); - } - _check(simulation); - }; - it('should survive 1000 iterations', /* async */function() { - // await keypress(); - _stressTest(1000); - // await keypress(); - }); -}); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/util.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/util.mjs deleted file mode 100644 index 086663ba4..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/util.mjs +++ /dev/null @@ -1,10 +0,0 @@ -const alignN = n => index => { - const r = index % n; - return r === 0 ? index : (index + n - r); -}; -const align4 = alignN(4); - -export { - alignN, - align4, -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/z.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/z.mjs deleted file mode 100644 index 36ec6f872..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs/z.mjs +++ /dev/null @@ -1,2066 +0,0 @@ -import { - zbencode, - zbdecode, - zbclone, -} from './encoding.mjs'; -import {align4} from './util.mjs'; - -const MESSAGES = (() => { - let iota = 0; - return { - STATE_RESET: ++iota, - TRANSACTION: ++iota, - }; -})(); - -// XXX can use a power-of-two buffer cache for memory - -let rng = Math.random; -function setRng(r) { - rng = r; -} -const _makeId = () => Math.floor(rng() * 0xFFFFFF); -const _jsonify = o => { - const impl = bindingsMap.get(o); - if (impl?.isZArray) { - return o.e.map(_jsonify); - } else if (Array.isArray(o)) { - return o.map(_jsonify); - } else if ( - o instanceof Uint8Array || - o instanceof Uint16Array || - o instanceof Uint32Array || - o instanceof Int8Array || - o instanceof Int16Array || - o instanceof Int32Array || - o instanceof Float32Array || - o instanceof Float64Array - ) { - return o; - } else if (o !== null && typeof o === 'object') { - const result = {}; - for (const k in o) { - result[k] = _jsonify(o[k]); - } - return result; - } else { - return o; - } -}; -const _getBindingForValue = e => { - if (e?.isZMap || e?.isZArray) { - return e.binding; - } else { - return e; - } -}; -const _getBindingForArray = arr => arr.map(_getBindingForValue); - -const _makeDataView = uint8Array => new DataView(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength); -const _parseBoundEvent = encodedEventData => { - const dataView = _makeDataView(encodedEventData); - - let index = 0; - const method = dataView.getUint32(index, true); - const Cons = ZEVENT_CONSTRUCTORS[method]; - if (Cons) { - return Cons.deserializeUpdate(encodedEventData); - } else { - console.warn('could not parse bound event due to incorrect method', method, ZEVENT_CONSTRUCTORS); - return null; - } -}; - -const textEncoder = new TextEncoder(); -const textDecoder = new TextDecoder(); -const observersMap = new WeakMap(); -const bindingsMap = new WeakMap(); -const bindingParentsMap = new WeakMap(); - -class ZEventEmitter { - constructor() { - this.listeners = {}; - } - on(k, fn) { - let ls = this.listeners[k]; - if (!ls) { - ls = []; - this.listeners[k] = ls; - } - ls.push(fn); - } - once(k, fn) { - this.on(k, fn); - - const fn2 = () => { - this.off(k, fn); - this.off(k, fn2); - }; - this.on(k, fn2); - } - off(k, fn) { - const ls = this.listeners[k]; - if (ls) { - for (;;) { - const index = ls.indexOf(fn); - if (index !== -1) { - ls.splice(index, 1); - } else { - break; - } - } - } - } - dispatchEvent(k, a, b, c, d) { - const listeners = this.listeners[k]; - if (listeners) { - for (const fn of listeners) { - fn(a, b, c, d); - } - } - } -} - -const conflictSpec = { - weAreHighestPriority: false, -}; -const _uint8ArrayEquals = (a, b) => { - if (a === b) { - return true; - } else if (a.length === b.length) { - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - } else { - return false; - } -}; -const _keyPathEquals = _uint8ArrayEquals; -const _uint8ArrayPrefixEquals = (a, b) => { - if (a === b) { - return true; - } else if (a.length < b.length) { - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - } else { - return false; - } -}; -const _isKeyPathPrefix = _uint8ArrayPrefixEquals; -const _getHistoryDataView = (historyData, historyOffsets, historyIndex) => { - return new DataView( - historyData.buffer, - historyData.byteOffset + historyOffsets[historyIndex], - ); -}; -const _getHistoryMethod = (historyData, historyOffsets, historyIndex) => { - const dataView = _getHistoryDataView(historyData, historyOffsets, historyIndex); - - let index = 0; - const eventType = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - return eventType; -}; -const _getHistoryResolvePriority = (historyData, historyOffsets, historyIndex) => { - const dataView = _getHistoryDataView(historyData, historyOffsets, historyIndex); - - let index = 0; - // const eventType = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const resolvePriority = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - return resolvePriority; -}; -const _getHistoryKeyPathBuffer = (historyData, historyOffsets, historyIndex) => { - const dataView = _getHistoryDataView(historyData, historyOffsets, historyIndex); - - let index = 0; - // const eventType = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - // const resolvePriority = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const kpjb = new Uint8Array(dataView.buffer, dataView.byteOffset + index, kpjbLength); - - return kpjb; -}; -const _parentWasSet = (event, historyStartIndex, historyEndIndex, historyData, historyOffsets) => { - for (let i = historyStartIndex; i < historyEndIndex; i++) { - // const e = _parseHistoryBuffer(historyData, historyOffsets, i); - - const historyMethod = _getHistoryMethod(historyData, historyOffsets, i); - if (historyMethod !== ZNullEvent.METHOD) { - const historyKeyPathBuffer = _getHistoryKeyPathBuffer(historyData, historyOffsets, i); - // console.log('check key path', [textDecoder.decode(historyKeyPathBuffer), textDecoder.decode(event.getKeyPathBuffer())]); - if ( // if this is a parent - _isKeyPathPrefix(historyKeyPathBuffer, event.getKeyPathBuffer()) - ) { - // console.log('check prefix yes', historyMethod, [textDecoder.decode(historyKeyPathBuffer), textDecoder.decode(event.getKeyPathBuffer())]); - if ( // if this is an overwrite type - historyMethod === ZMapSetEvent.METHOD || - historyMethod === ZMapDeleteEvent.METHOD || - historyMethod === ZArrayDeleteEvent.METHOD - ) { - return true; - } - } - } - } - return false; -}; -const _getConflicts = (event, historyStartIndex, historyEndIndex, historyData, historyOffsets, resolvePriority, conflictSpec) => { - let conflictFound = false; - conflictSpec.weAreHighestPriority = true; - - for (let i = historyStartIndex; i < historyEndIndex; i++) { - // const e = _parseHistoryBuffer(historyData, historyOffsets, i); - const historyMethod = _getHistoryMethod(historyData, historyOffsets, i); - if ( // if this is an overwrite type - historyMethod === ZMapSetEvent.METHOD || - historyMethod === ZMapDeleteEvent.METHOD - ) { - const historyKeyPathBuffer = _getHistoryKeyPathBuffer(historyData, historyOffsets, i); - if (_keyPathEquals(historyKeyPathBuffer, event.getKeyPathBuffer())) { // if it is the same keypath - conflictFound = true; - - const historyResolvePriority = _getHistoryResolvePriority(historyData, historyOffsets, i); - if (historyResolvePriority > resolvePriority) { - conflictSpec.weAreHighestPriority = false; - break; - } - } - } - } - - return conflictFound; -}; -const _alreadyDeleted = (event, historyStartIndex, historyEndIndex, historyData, historyOffsets) => { - for (let i = historyStartIndex; i < historyEndIndex; i++) { - const historyMethod = _getHistoryMethod(historyData, historyOffsets, i); - if (historyMethod === ZArrayDeleteEvent.METHOD) { - const historyKeyPathBuffer = _getHistoryKeyPathBuffer(historyData, historyOffsets, i); - if (_keyPathEquals(historyKeyPathBuffer, event.getKeyPathBuffer())) { - return true; - } - } - } - return false; -}; - -class TransactionCache { - constructor(doc = null, origin = undefined, startClock = doc.clock, resolvePriority = doc.resolvePriority, events = [], observerEvents = []) { - this.doc = doc; - this.origin = origin; - this.startClock = startClock; - this.resolvePriority = resolvePriority; - this.events = events; - this.observerEvents = observerEvents; - } - pushEvent(event) { - this.events.push(event); - } - pushObserverEvent(impl, e) { - this.observerEvents.push(impl.triggerObservers.bind(impl, e)); - } - triggerObserverEvents() { - for (let i = 0; i < this.observerEvents.length; i++) { - this.observerEvents[i](); - } - } - rebase() { - const historyTailLength = this.doc.clock - this.startClock; - // globalThis.maxHistoryTailLength = Math.max(globalThis.maxHistoryTailLength, historyTailLength); - const historyStartIndex = this.startClock; - const historyEndIndex = this.doc.clock; - const {historyData, historyOffsets} = this.doc; - - for (let i = 0; i < this.events.length; i++) { - const event = this.events[i]; - if (event.isZMapSetEvent || event.isZMapDeleteEvent) { - if (_parentWasSet(event, historyStartIndex, historyEndIndex, historyData, historyOffsets)) { - // console.log('torpedo self due to parent conflict'); - this.events[i] = nullEvent; - } else if (_getConflicts(event, historyStartIndex, historyEndIndex, historyData, historyOffsets, this.resolvePriority, conflictSpec)) { - /* const _isHighestPriority = () => { - return conflicts.every(([p, e]) => { - return this.resolvePriority <= p; - }); - }; */ - - if (conflictSpec.weAreHighestPriority) { - // console.log('survive due to high prio'); - } else { - // console.log('torpedo self due to low prio'); - this.events[i] = nullEvent; - } - } else { - // console.log('no conflicts'); - } - } else if (event.isZArrayPushEvent) { - if (_parentWasSet(event, historyStartIndex, historyEndIndex, historyData, historyOffsets)) { - this.events[i] = nullEvent; - } else { - // console.log('no conflicts'); - } - } else if (event.isZArrayDeleteEvent) { - if ( - _parentWasSet(event, historyStartIndex, historyEndIndex, historyData, historyOffsets) || - _alreadyDeleted(event, historyStartIndex, historyEndIndex, historyData, historyOffsets) - ) { - // console.log('torpedo self due to parent conflict'); - this.events[i] = nullEvent; - } else { - // console.log('no conflicts'); - } - } else if (event.isZNullEvent) { - // console.log('skip null event'); - } else { - console.warn('unknown event type', event); - } - } - this.startClock += historyTailLength; - } - serializeUpdate() { - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // method - totalSize += Uint32Array.BYTES_PER_ELEMENT; // clock - totalSize += Uint32Array.BYTES_PER_ELEMENT; // resolve priority - totalSize += Uint32Array.BYTES_PER_ELEMENT; // num events - const updateByteLengths = this.events.map(event => { - totalSize += Uint32Array.BYTES_PER_ELEMENT; // length - const updateByteLength = event.computeUpdateByteLength(); - totalSize += updateByteLength; - return updateByteLength; - }); - - const ab = new ArrayBuffer(totalSize); - const uint8Array = new Uint8Array(ab); - const dataView = new DataView(ab); - let index = 0; - - dataView.setUint32(index, MESSAGES.TRANSACTION, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - // XXX setBigUint64 - dataView.setUint32(index, this.startClock, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - dataView.setUint32(index, this.resolvePriority, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - dataView.setUint32(index, this.events.length, true); - index += Uint32Array.BYTES_PER_ELEMENT; - for (let i = 0; i < this.events.length; i++) { - const event = this.events[i]; - const updateByteLength = updateByteLengths[i]; - - dataView.setUint32(index, updateByteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; // length - - event.serializeUpdate(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, updateByteLength)); - index += updateByteLength; - } - return uint8Array; - } - static deserializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - // skip method - index += Uint32Array.BYTES_PER_ELEMENT; - - const startClock = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const resolvePriority = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const numEvents = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const events = Array(numEvents); - for (let i = 0; i < numEvents; i++) { - const eventLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const encodedEventData = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, eventLength); - const event = _parseBoundEvent(encodedEventData); - events[i] = event; - index += eventLength; - index = align4(index); - } - - const transactionCache = new TransactionCache(undefined, undefined, startClock, resolvePriority, events); - return transactionCache; - } -} - -const HISTORY_DATA_SIZE = 1024 * 1024; // 1 MB -const HISTORY_LENGTH = 1024; -class ZDoc extends ZEventEmitter { - constructor( - state = {}, - clock = 0, - historyData = new Uint8Array(HISTORY_DATA_SIZE), - historyOffsets = new Uint32Array(HISTORY_LENGTH), - ) { - super(); - - this.state = state; - this.clock = clock; - - this.historyData = historyData; - this.historyOffsets = historyOffsets; - - this.transactionDepth = 0; - this.transactionCache = null; - this.resolvePriority = _makeId(); - this.mirror = false; - - this.isZDoc = true; - - bindingsMap.set(this.state, this); - } - get(k, Type) { - let binding = this.state[k]; - if (binding === undefined) { - binding = Type.nativeConstructor(); - this.state[k] = binding; - } - let impl = bindingsMap.get(binding); - if (!impl) { - impl = new Type(binding, this); - bindingsMap.set(binding, impl); - bindingParentsMap.set(binding, this.state); - } - return impl; - } - getArray(k) { - return this.get(k, ZArray); - } - getMap(k) { - return this.get(k, ZMap); - } - transact(fn, origin) { - this.pushTransaction(origin); - fn(); - this.popTransaction(); - } - setResolvePriority(resolvePriority) { - this.resolvePriority = resolvePriority; - } - setMirror(mirror) { - this.mirror = mirror; - } - toJSON() { - return _jsonify(this.state); - } - pushHistory(resolvePriority, event) { - let byteOffset = this.historyOffsets[this.clock % this.historyOffsets.length]; - if (byteOffset >= this.historyData.byteLength / 2) { - // console.log('truncate history'); - byteOffset = 0; - } - const eventTargetBuffer = new Uint8Array( - this.historyData.buffer, - this.historyData.byteOffset + byteOffset, - ); - const eventByteLength = event.serializeHistory(resolvePriority, eventTargetBuffer); - - this.clock++; - this.historyOffsets[this.clock % this.historyOffsets.length] = byteOffset + eventByteLength; - - // globalThis.maxHistoryLength = Math.max(globalThis.maxHistoryLength, this.clock); // XXX temp - } - pushTransaction(origin) { - if (++this.transactionDepth === 1) { - this.transactionCache = new TransactionCache(this, origin); - } - } - popTransaction() { - if (--this.transactionDepth === 0) { - // trigger observers - this.transactionCache.triggerObserverEvents(); - - // emit update - const uint8Array = this.transactionCache.serializeUpdate(); - if (uint8Array) { - this.dispatchEvent('update', uint8Array, this.transactionCache.origin, this, null); - } - - // push history - for (const event of this.transactionCache.events) { - this.pushHistory(this.transactionCache.resolvePriority, event); - } - - // clear transaction cache - this.transactionCache = null; - } - } - setClockState(clock, state) { - const observerEvents = []; - - const _emitDeleteEvents = state => { - const _recurse = binding => { - const impl = bindingsMap.get(binding); - - if (impl.isZDoc) { - for (const k in impl.state) { - _recurse(impl.state[k]); - } - } else if (impl.isZArray) { - if (impl.length > 0) { - const indexes = []; - for (let i = 0; i < impl.length; i++) { - indexes.push(i); - } - - const e = { - changes: { - added: new Set([]), - deleted: new Set(indexes), - keys: new Map(indexes.map(index => { - let value = impl.binding.e[index]; - value = bindingsMap.get(value) ?? value; - return [ - index, - { - action: 'delete', - value, - }, - ]; - })), - }, - }; - observerEvents.push([impl, e]); - } - - for (let i = 0; i < impl.binding.length; i++) { - _recurse(impl.binding[i]); - } - } else if (impl.isZMap) { - const keys = Array.from(impl.keys()); - if (keys.length > 0) { - const values = Array.from(impl.values()); - const e = { - changes: { - added: new Set([]), - deleted: new Set(values), - keys: new Map(keys.map((key, index) => { - const value = values[index]; - return [ - key, - { - action: 'delete', - value: value.content.type, - }, - ]; - })), - }, - }; - observerEvents.push([impl, e]); - } - - for (const k in impl.binding) { - _recurse(impl.binding[k]); - } - } else { - // nothing - } - }; - _recurse(state); - }; - const _emitAddEvents = state => { - const _recurse = binding => { - const impl = bindingsMap.get(binding); - - if (impl?.isZDoc) { - for (const k in impl.state) { - _recurse(impl.state[k]); - } - } else if (impl?.isZArray) { - if (impl.length > 0) { - const rawValues = impl.binding.e.map(value => bindingsMap.get(value) ?? value); - const values = rawValues.map(rawValue => { - return { - content: { - type: rawValue, - }, - }; - }); - - const e = { - changes: { - added: new Set(values), - deleted: new Set([]), - keys: new Map(values.map((value, index) => { - const rawValue = rawValues[index]; - return [ - index, - { - action: 'add', - value: rawValue, - }, - ]; - })), - }, - }; - observerEvents.push([impl, e]); - } - - for (let i = 0; i < impl.binding.length; i++) { - _recurse(impl.binding[i]); - } - } else if (impl?.isZMap) { - const keys = Array.from(impl.keys()); - if (keys.length > 0) { - const rawValues = Array.from(impl.values())//.map(value => bindingsMap.get(value) ?? value); - const values = rawValues/*.map(rawValue => { - return { - content: { - type: rawValue, - }, - }; - }); */ - - const e = { - changes: { - added: new Set(values), - deleted: new Set([]), - keys: new Map(keys.map((key, index) => { - const value = values[index]; - return [ - key, - { - action: 'add', - value: value.content.type, - }, - ]; - })), - }, - }; - observerEvents.push([impl, e]); - } - - for (const k in impl.binding) { - _recurse(impl.binding[k]); - } - } else { - // nothing - } - }; - _recurse(state); - }; - const _remapState = (oldState, newState) => { - // remap old impls onto new bindings - const _lookupKeyPath = (binding, keyPath) => { - for (let i = 0; i < keyPath.length; i++) { - const key = keyPath[i]; - if (key in binding) { - binding = binding[key]; - } else { - return undefined; - } - } - return binding; - }; - const _lookupKeyPathParent = (binding, keyPath) => { - for (let i = 0; i < keyPath.length - 1; i++) { - const key = keyPath[i]; - if (key in binding) { - binding = binding[key]; - } else { - return undefined; - } - } - return binding; - }; - const _recurseRemapState = (newBinding, keyPath) => { - const oldBinding = _lookupKeyPath(oldState, keyPath); - const newParent = keyPath.length > 0 ? _lookupKeyPathParent(newState, keyPath) : null; - let oldImpl; - if (oldBinding !== undefined) { - oldImpl = bindingsMap.get(oldBinding); - oldImpl.binding = newBinding; - bindingsMap.set(newBinding, oldImpl); - if (newParent) { - bindingParentsMap.set(newBinding, newParent); - } - } - - if (oldImpl?.isZArray) { - for (let i = 0; i < newBinding.e.length; i++) { - const zid = newBinding.i[i]; - const index = oldBinding.i.indexOf(zid); - _recurseRemapState(newBinding.e[i], keyPath.concat(['e', index])); - } - } else if (Array.isArray(newBinding)) { - for (let i = 0; i < newBinding.length; i++) { - _recurseRemapState(newBinding[i], keyPath.concat([i])); - } - } else if (newBinding !== null && typeof newBinding === 'object') { - for (const k in newBinding) { - _recurseRemapState(newBinding[k], keyPath.concat([k])); - } - } else { - // nothing - } - }; - _recurseRemapState(newState, []); - }; - - _emitDeleteEvents(this.state); - _remapState(this.state, state); - _emitAddEvents(state); - - this.clock = clock; - this.state = state; - // this.historyData = new Uint8Array(HISTORY_DATA_SIZE); - // this.historyOffsets = new Uint32Array(HISTORY_LENGTH); - - for (const [impl, e] of observerEvents) { - impl.triggerObservers(e); - } - } - getImplByKeyPathParent(keyPath, keyTypes) { - let binding = this.state; - let impl = bindingsMap.get(binding); - for (let i = 0; i < keyPath.length - 1; i++) { - const key = keyPath[i]; - const keyType = keyTypes[i]; - - const child = (() => { - switch (keyType) { - case KEY_TYPES.ARRAY: return impl.get(key, ZArray); - case KEY_TYPES.MAP: return impl.get(key, ZMap); - case KEY_TYPES.VALUE: return impl.get(key); - case (KEY_TYPES.ELEMENT|KEY_TYPES.ARRAY): return impl.getId(key, ZArray); - case (KEY_TYPES.ELEMENT|KEY_TYPES.MAP): return impl.getId(key, ZMap); - case (KEY_TYPES.ELEMENT|KEY_TYPES.VALUE): return impl.getId(key); - default: return 'lol'; - } - })(); -`` - /* if (child === 'lol') { - console.warn(`Key path does not exist`, JSON.stringify([keyType, KEY_TYPES.ARRAY]), keyPath, binding.array); - throw new Error(`Key path ${keyPath} ${keyType} ${binding.array} does not exist`); - } */ - - if (child) { - impl = child; - binding = child.binding; - } else { - // console.warn('could not look up key path', [key, type], impl); - return undefined; - } - } - return impl; - } - clone() { - const oldState = this.state; - const newState = zbclone(this.state); - // console.log('old history', this.state, this.history.length, this.history[0]); - const newDoc = new ZDoc( - newState, - this.clock, - this.historyData, - this.historyOffsets, - ); - - // remap old impls onto new bindings - const _recurseDocClone = (oldBinding, newBinding) => { - const oldImpl = bindingsMap.get(oldBinding); - if (oldImpl?.isZDoc) { - for (const k in oldBinding) { - _recurseDocClone(oldBinding[k], newBinding[k]); - bindingParentsMap.set(newBinding[k], newBinding); - } - } else if (oldImpl?.isZArray) { - const newImpl = new ZArray(newBinding, newDoc); - bindingsMap.set(newBinding, newImpl); - - for (let i = 0; i < oldBinding.e.length; i++) { - _recurseDocClone(oldBinding.e[i], newBinding.e[i]); - - const childImpl = bindingsMap.get(newBinding.e[i]); - if (childImpl) { - bindingParentsMap.set(newBinding.e[i], newBinding); - } - } - } else if (oldImpl?.isZMap) { - const newImpl = new ZMap(newBinding, newDoc); - bindingsMap.set(newBinding, newImpl); - - for (const k in oldBinding) { - _recurseDocClone(oldBinding[k], newBinding[k]); - - const childImpl = bindingsMap.get(newBinding[k]); - if (childImpl) { - bindingParentsMap.set(newBinding[k], newBinding); - } - } - } else if (Array.isArray(oldBinding)) { - for (let i = 0; i < oldBinding.length; i++) { - _recurseDocClone(oldBinding[i], newBinding[i]); - } - } else if (oldBinding !== null && typeof oldBinding === 'object') { - for (const k in oldBinding) { - _recurseDocClone(oldBinding[k], newBinding[k]); - } - } else { - // nothing - } - }; - _recurseDocClone(oldState, newState); - - return newDoc; - } -} - -const KEY_TYPES = { - NONE: 0, - ARRAY: 1, - MAP: 2, - VALUE: 4, - ELEMENT: 8, -}; -const _getImplKeyType = impl => { - if (impl?.isZArray) { - return KEY_TYPES.ARRAY; - } else if (impl?.isZMap) { - return KEY_TYPES.MAP; - } else { - return KEY_TYPES.NONE; - } -}; -const _getImplConstructorForKeyType = type => { - if (type & KEY_TYPES.ARRAY) { - return ZArray; - } else if (type & KEY_TYPES.MAP) { - return ZMap; - } else { - return null; - } -}; -class ZObservable { - constructor(binding, doc) { - this.binding = binding; - this.doc = doc; - } - observe(fn) { - let observers = observersMap.get(this); - if (!observers) { - observers = []; - observersMap.set(this, observers); - } - observers.push(fn); - } - unobserve(fn) { - const observers = observersMap.get(this); - if (observers) { - const index = observers.indexOf(fn); - if (index !== -1) { - observers.splice(index, 1); - } - } - } - triggerObservers(e) { - const observers = observersMap.get(this); - if (observers) { - for (const fn of observers) { - fn(e); - } - } - } - getKeyPathSpec() { - const keyPath = []; - const keyTypes = []; - for (let binding = this.binding;;) { - const parentBinding = bindingParentsMap.get(binding); - - if (parentBinding) { - const parentImpl = bindingsMap.get(parentBinding); - if (parentImpl) { - if (parentImpl.isZDoc) { - let key; - for (const k in parentBinding) { - if (parentBinding[k] === binding) { - key = k; - break; - } - } - - const impl = bindingsMap.get(binding); - const keyType = _getImplKeyType(impl); - - keyPath.push(key); - keyTypes.push(keyType); - } else if (parentImpl.isZArray) { - const index = parentImpl.binding.e.indexOf(binding); - const zid = parentImpl.binding.i[index]; - const impl = bindingsMap.get(binding); - const type = (_getImplKeyType(impl) || KEY_TYPES.VALUE) | KEY_TYPES.ELEMENT; - keyPath.push(zid); - keyTypes.push(type); - } else if (parentImpl.isZMap) { - let key; - for (const k in parentBinding) { - if (parentBinding[k] === binding) { - key = k; - break; - } - } - - const impl = bindingsMap.get(binding); - const keyType = _getImplKeyType(impl) || KEY_TYPES.VALUE; - - keyPath.push(key); - keyTypes.push(keyType); - } else { - console.log('failed to find binding getting key path', binding); - } - } - binding = parentBinding; - } else { - break; - } - } - return { - keyPath: keyPath.reverse(), - keyTypes: keyTypes.reverse(), - }; - } - toJSON() { - return this.binding; - } -} - -const _ensureImplBound = (v, parent) => { - const isZArray = v?.isZArray; - const isZMap = v?.isZMap; - if (isZArray || isZMap) { - bindingsMap.set(v.binding, v); - bindingParentsMap.set(v.binding, parent.binding); - v.doc = parent.doc; - - const _recurseChildren = o => { - if (o?.isZMap) { - o.doc = parent.doc; - for (const k in o.binding) { - const impl = bindingsMap.get(o.binding[k]); - if (impl) { - _recurseChildren(impl); - } - } - } - if (o?.isZArray) { - o.doc = parent.doc; - for (const e of o.binding.e) { - const impl = bindingsMap.get(e); - if (impl) { - _recurseChildren(impl); - } - } - } - }; - _recurseChildren(v); - } -}; -class ZMap extends ZObservable { - constructor(binding = ZMap.nativeConstructor(), doc = null) { - super(binding, doc); - - this.isZMap = true; - } - static nativeConstructor = () => ({}); - has(k) { - return k in this.binding; - } - get(k, Type) { - if (Type) { - let binding = this.binding[k]; - if (binding === undefined) { - binding = Type.nativeConstructor(); - this.binding[k] = binding; - // throw new Error('map lookup nonexistent typed element'); - // return undefined; - } - let impl = bindingsMap.get(binding); - if (!impl) { - impl = new Type(binding, this.doc); - bindingsMap.set(binding, impl); - bindingParentsMap.set(binding, this.binding); - } - return impl; - } else { - const v = this.binding[k]; - return bindingsMap.get(v) ?? v; - } - } - set(k, v) { - _ensureImplBound(v, this); - - const {keyPath, keyTypes} = this.getKeyPathSpec(); - const keyType = _getImplKeyType(v) || KEY_TYPES.VALUE; - keyPath.push(k); - keyTypes.push(keyType); - const event = new ZMapSetEvent( - keyPath, - keyTypes, - v - ); - event.bindToImpl(this); - if (this.doc) { - this.doc.pushTransaction(); - this.doc.transactionCache.pushEvent(event); - } - event.apply(); - const e = event.getObserverEvent(); - if (this.doc) { - this.doc.transactionCache.pushObserverEvent(event.impl, e); - this.doc.popTransaction(); - } else { - this.triggerObservers(e); - } - } - delete(k) { - delete this.binding[k]; - const {keyPath, keyTypes} = this.getKeyPathSpec(); - keyPath.push(k); - keyTypes.push(KEY_TYPES.MAP); - const event = new ZMapDeleteEvent( - keyPath, - keyTypes - ); - event.bindToImpl(this); - if (this.doc) { - this.doc.pushTransaction(); - this.doc.transactionCache.pushEvent(event); - } - event.apply(); - const e = event.getObserverEvent(); - if (this.doc) { - this.doc.transactionCache.pushObserverEvent(event.impl, e); - this.doc.popTransaction(); - } else { - this.triggerObservers(e); - } - } - get _map() { // match yjs api - const result = new Map(); - for (const k in this.binding) { - const rawValue = this.binding[k]; - const value = bindingsMap.get(rawValue) ?? rawValue; - result.set(k, { - content: { - arr: [ - value, - ], - }, - }); - } - return result; - } - keys() { - const keys = Object.keys(this.binding); - let i = 0; - const next = () => { - if (i < keys.length) { - const key = keys[i++]; - return { - done: false, - value: key, - }; - } else { - return { - done: true, - value: null, - }; - } - }; - return { - next, - [Symbol.iterator]: () => ({next}), - }; - } - values() { - const keys = Object.keys(this.binding); - let i = 0; - const next = () => { - if (i < keys.length) { - const key = keys[i++]; - const rawValue = this.get(key); - const type = bindingsMap.get(rawValue) ?? rawValue; - const value = { - content: { - type, - }, - }; - return { - done: false, - value, - }; - } else { - return { - done: true, - value: null, - }; - } - }; - return { - next, - [Symbol.iterator]: () => ({next}), - }; - } - entries() { - const keys = Object.keys(this.binding); - let i = 0; - const next = () => { - if (i < keys.length) { - const key = keys[i++]; - const rawValue = this.get(key); - const type = bindingsMap.get(rawValue) ?? rawValue; - const value = { - content: { - type, - }, - }; - return { - done: false, - value: [key, value], - }; - } else { - return { - done: true, - value: null, - }; - } - }; - return { - next, - [Symbol.iterator]: () => ({next}), - }; - } -} - -class ZArray extends ZObservable { - constructor(binding = ZArray.nativeConstructor(), doc = null) { - super(binding, doc); - - this.isZArray = true; - } - static nativeConstructor = () => ({ - e: [], - i: [], - }); - get length() { - return this.binding.e.length; - } - set length(length) { - throw new Error('ZArray.length is read-only'); - /* this.binding.e.length = length; - this.binding.i.length = length; */ - } - get(index, Type) { - if (Type) { - let binding = this.binding.e[index]; - if (binding === undefined) { - // binding = Type.nativeConstructor(); - // this.state[k] = binding; - // throw new Error('array lookup nonexistent typed element'); - return undefined; - } - let impl = bindingsMap.get(binding); - if (!impl) { - impl = new Type(binding, this.doc); - bindingsMap.set(binding, impl); - bindingParentsMap.set(binding, this.binding); - } - return impl; - } else { - const value = this.binding.e[index]; - return bindingsMap.get(value) ?? value; - } - } - getId(zid, Type) { - const index = this.binding.i.indexOf(zid); - if (index !== -1) { - return this.get(index, Type); - } else { - return undefined; - } - } - push(arr) { - if (arr.length !== 1) { - throw new Error('only length 1 is supported'); - } - - for (const e of arr) { - _ensureImplBound(e, this); - } - - const zid = _makeId().toString(16); - - const {keyPath, keyTypes} = this.getKeyPathSpec(); - const impl = bindingsMap.get(arr[0]) ?? arr[0]; - const keyType = (_getImplKeyType(impl) || KEY_TYPES.VALUE) | KEY_TYPES.ELEMENT; - keyPath.push(zid); - keyTypes.push(keyType); - const event = new ZArrayPushEvent( - keyPath, - keyTypes, - arr - ); - event.bindToImpl(this); - if (this.doc) { - this.doc.pushTransaction(); - this.doc.transactionCache.pushEvent(event); - } - event.apply(); - const e = event.getObserverEvent(); - if (this.doc) { - this.doc.transactionCache.pushObserverEvent(event.impl, e); - this.doc.popTransaction(); - } else { - this.triggerObservers(e); - } - } - delete(index, length = 1) { - if (length !== 1) { - throw new Error('only length 1 is supported'); - } - - const zid = this.binding.i[index]; - - const {keyPath, keyTypes} = this.getKeyPathSpec(); - keyPath.push(zid); - keyTypes.push(KEY_TYPES.ELEMENT|KEY_TYPES.VALUE); - const event = new ZArrayDeleteEvent( - keyPath, - keyTypes, - ); - event.bindToImpl(this); - if (this.doc) { - this.doc.pushTransaction(); - this.doc.transactionCache.pushEvent(event); - } - event.apply(); - const e = event.getObserverEvent(); - if (this.doc) { - this.doc.transactionCache.pushObserverEvent(event.impl, e); - this.doc.popTransaction(); - } else { - this.triggerObservers(e); - } - } - forEach(callback, thisArg) { - for (let i = 0; i < this.binding.e.length; i++) { - callback.call(thisArg, this.get(i), i, this); - } - } - toJSON() { - return this.binding.e.map(_jsonify); - } - [Symbol.iterator] = () => { - let i = 0; - return { - next: () => { - if (i < this.length) { - const rawValue = this.get(i++); - const value = bindingsMap.get(rawValue) ?? rawValue; - return { - done: false, - value, - }; - } else { - return { - done: true, - value: null, - }; - } - }, - }; - } -} - -const uint8ArrayBuffer = new Uint8Array(1024); // 1 kb -const _parseKeyPathBuffer = uint8Array => { - const keyPath = []; - let index = 0; - while (index < uint8Array.length) { - const nextNullIndex = uint8Array.indexOf(0, index); - const key = textDecoder.decode(uint8Array.subarray(index, nextNullIndex)); - keyPath.push(key); - index = nextNullIndex + 1; - } - return keyPath; -}; - -let zEventsIota = 0; -class ZEvent { - constructor(keyPath, keyTypes) { - this.keyPath = keyPath; - this.keyTypes = keyTypes; - - this.impl = null; - this.keyPathBuffer = null; - this.keyTypesBuffer = null; - } - bindToDoc(doc) { - if (doc) { - this.impl = doc.getImplByKeyPathParent(this.keyPath, this.keyTypes); - if (!this.impl) { - console.warn('cannot bind impl to key path', doc.state, this.keyPath, this.keyTypes); - throw new Error('cannot bind impl to key path'); - } - } else { - this.impl = null; - } - } - bindToImpl(impl) { - this.impl = impl; - } - getObserverEvent() { - const actionSpec = this.getAction(); - if (actionSpec) { - const value = bindingsMap.get(actionSpec.value) ?? actionSpec.value; - const added = new Set(/add|update/.test(actionSpec.action) ? [{ - content: { - type: value, - }, - }] : []); - const deleted = new Set(actionSpec.action === 'delete' ? [{ - content: { - type: value, - }, - }] : []); - return { - changes: { - added, - deleted, - keys: new Map([[ - actionSpec.key, - { - action: actionSpec.action, - value, - }, - ]]), - }, - }; - } else { - return null; - } - } - getKey() { - return this.keyPath[this.keyPath.length - 1]; - } - getKeyPathBuffer() { - if (this.keyPathBuffer === null) { - let index = 0; - for (let i = 0; i < this.keyPath.length; i++) { - const key = this.keyPath[i]; - const {written} = textEncoder.encodeInto(key, uint8ArrayBuffer.subarray(index)); - index += written; - - uint8ArrayBuffer[index++] = 0; // null separator - } - this.keyPathBuffer = uint8ArrayBuffer.slice(0, index); - } - return this.keyPathBuffer; - } - getKeyTypesBuffer() { - if (this.keyTypesBuffer === null) { - this.keyTypesBuffer = new Uint8Array(this.keyTypes.length); - for (let i = 0; i < this.keyTypes.length; i++) { - this.keyTypesBuffer[i] = this.keyTypes[i]; - } - } - return this.keyTypesBuffer; - } - computeUpdateByteLength() { - throw new Error('not implemented'); - } - serializeUpdate(uint8Array) { - throw new Error('not implemented'); - } - static deserializeUpdate(uint8Array) { - throw new Error('not implemented'); - } - serializeHistory(resolvePriority, uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - dataView.setUint32(index, this.constructor.METHOD, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - dataView.setUint32(index, resolvePriority, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjb = this.getKeyPathBuffer(); - dataView.setUint32(index, kpjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(kpjb, index); - index += kpjb.byteLength; - index = align4(index); - - return index; - } - clone() { - const event = new this.constructor(...this.getConstructorArgs()); - event.impl = this.impl; - return event; - } -} -class ZNullEvent extends ZEvent { - constructor() { - super([], []); - - this.isZNullEvent = true; - } - static METHOD = ++zEventsIota; - apply() { - // nothing - } - getConstructorArgs() { - return []; - } - getAction() { - return null; - } - computeUpdateByteLength() { - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // method - - return totalSize; - } - serializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - dataView.setUint32(index, this.constructor.METHOD, true); - index += Uint32Array.BYTES_PER_ELEMENT; - } - static deserializeUpdate(uint8Array) { - return nullEvent; - } -} -class ZMapEvent extends ZEvent { - constructor(keyPath, keyTypes) { - super(keyPath, keyTypes); - - this.key = null; - this.value = null; - this.keyBuffer = null; - this.valueBuffer = null; - - this.isZMapEvent = true; - } - getKeyBuffer() { - if (this.keyBuffer === null) { - this.keyBuffer = textEncoder.encode(this.key); - } - return this.keyBuffer; - } - getValueBuffer() { - if (this.valueBuffer === null) { - this.valueBuffer = zbencode(this.value); - } - return this.valueBuffer; - } -} -class ZArrayEvent extends ZEvent { - constructor(keyPath, keyTypes) { - super(keyPath, keyTypes); - - this.arr = null; - this.arrBuffer = null; - - this.isZArrayEvent = true; - } - getArrBuffer() { - if (this.arrBuffer === null) { - this.arrBuffer = zbencode(this.arr); - } - return this.arrBuffer; - } -} -class ZMapSetEvent extends ZMapEvent { - constructor(keyPath, keyTypes, value) { - super(keyPath, keyTypes); - - this.value = _getBindingForValue(value); - - this.isZMapSetEvent = true; - } - static METHOD = ++zEventsIota; - static Type = ZMap; - apply() { - const key = this.getKey(); - this.impl.binding[key] = this.value; - } - getConstructorArgs() { - return [this.keyPath, this.keyTypes, this.value]; - } - getAction() { - return { - action: 'update', - key: this.getKey(), - value: this.value, - }; - } - computeUpdateByteLength() { - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // method - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key path length - totalSize += this.getKeyPathBuffer().byteLength; // key path data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key types length - totalSize += this.getKeyTypesBuffer().byteLength; // key types data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // value length - totalSize += this.getValueBuffer().byteLength; // value data - totalSize = align4(totalSize); - - return totalSize; - } - serializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - dataView.setUint32(index, this.constructor.METHOD, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjb = this.getKeyPathBuffer(); - dataView.setUint32(index, kpjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(kpjb, index); - index += kpjb.byteLength; - index = align4(index); - - const ktjb = this.getKeyTypesBuffer(); - dataView.setUint32(index, ktjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(ktjb, index); - index += ktjb.byteLength; - index = align4(index); - - const vb = this.getValueBuffer(); - dataView.setUint32(index, vb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(vb, index); - index += vb.byteLength; - index = align4(index); - } - static deserializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - // skip method - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyPath = _parseKeyPathBuffer(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, kpjbLength)); - index += kpjbLength; - index = align4(index); - - const ktjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyTypes = Array.from(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, ktjbLength)); - index += ktjbLength; - index = align4(index); - - const vbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const vb = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, vbLength); - const value = zbdecode(vb); - index += vbLength; - index = align4(index); - - return new this( - keyPath, - keyTypes, - value - ); - } -} -class ZMapDeleteEvent extends ZMapEvent { - constructor(keyPath, keyTypes, oldValue = null) { - super(keyPath, keyTypes); - - this.oldValue = oldValue; - - this.isZMapDeleteEvent = true; - } - static METHOD = ++zEventsIota; - static Type = ZMap; - apply() { - const key = this.getKey(); - this.oldValue = this.impl.binding[key]; - delete this.impl.binding[key]; - } - getConstructorArgs() { - return [this.keyPath, this.keyTypes, this.oldValue]; - } - getAction() { - return { - action: 'delete', - key: this.getKey(), - value: this.oldValue, - }; - } - computeUpdateByteLength() { - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // method - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key path length - totalSize += this.getKeyPathBuffer().byteLength; // key path data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key types length - totalSize += this.getKeyTypesBuffer().byteLength; // key types data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key length - totalSize += this.getKeyBuffer().byteLength; // key data - totalSize = align4(totalSize); - - return totalSize; - } - serializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - dataView.setUint32(index, this.constructor.METHOD, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjb = this.getKeyPathBuffer(); - dataView.setUint32(index, kpjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(kpjb, index); - index += kpjb.byteLength; - index = align4(index); - - const ktjb = this.getKeyTypesBuffer(); - dataView.setUint32(index, ktjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(ktjb, index); - index += ktjb.byteLength; - index = align4(index); - - const kb = this.getKeyBuffer(); - dataView.setUint32(index, kb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(kb, index); - index += kb.byteLength; - index = align4(index); - } - static deserializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - // skip method - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyPath = _parseKeyPathBuffer(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, kpjbLength)); - index += kpjbLength; - index = align4(index); - - const ktjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyTypes = Array.from(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, ktjbLength)); - index += ktjbLength; - index = align4(index); - - const kbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const kb = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, kbLength); - const key = textDecoder.decode(kb); - index += kbLength; - index = align4(index); - - return new this( - keyPath, - keyTypes, - key - ); - } -} -class ZArrayPushEvent extends ZArrayEvent { - constructor(keyPath, keyTypes, arr) { - super(keyPath, keyTypes); - - this.arr = _getBindingForArray(arr); - this.index = -1; - - this.isZArrayPushEvent = true; - } - static METHOD = ++zEventsIota; - static Type = ZArray; - apply() { - const arrBinding = this.arr; - this.index = this.impl.binding.e.length; - this.impl.binding.e.push.apply(this.impl.binding.e, arrBinding); - const zid = this.keyPath[this.keyPath.length - 1]; - this.impl.binding.i.push(zid); - - const keyType = this.keyTypes[this.keyTypes.length - 1]; - const Type = _getImplConstructorForKeyType(keyType); - const value = this.arr[0]; - let impl = bindingsMap.get(value); - if (Type && !(impl instanceof Type)) { - const binding = value; - impl = new Type(binding, this.impl.doc); - bindingsMap.set(binding, impl); - bindingParentsMap.set(binding, this.impl.binding); - // console.log('forge array value during apply', binding, impl); - } - } - getConstructorArgs() { - return [this.keyPath, this.keyTypes, this.arr]; - } - getAction() { - const keyType = this.keyTypes[this.keyTypes.length - 1]; - const Type = _getImplConstructorForKeyType(keyType); - const value = this.arr[0]; - let impl = bindingsMap.get(value); - if (Type && !(impl instanceof Type)) { - const binding = value; - impl = new Type(binding, this.impl.doc); - bindingsMap.set(binding, impl); - bindingParentsMap.set(binding, this.impl.binding); - // console.log('forge array value during change event emit', binding, impl); - } - - return { - action: 'add', - key: this.index, - value: this.arr[0], - }; - } - computeUpdateByteLength() { - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // method - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key path length - totalSize += this.getKeyPathBuffer().byteLength; // key path data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key types length - totalSize += this.getKeyTypesBuffer().byteLength; // key types data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // arr length - totalSize += this.getArrBuffer().byteLength; // arr data - totalSize = align4(totalSize); - - return totalSize; - } - serializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - dataView.setUint32(index, this.constructor.METHOD, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjb = this.getKeyPathBuffer(); - dataView.setUint32(index, kpjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(kpjb, index); - index += kpjb.byteLength; - index = align4(index); - - const ktjb = this.getKeyTypesBuffer(); - dataView.setUint32(index, ktjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(ktjb, index); - index += ktjb.byteLength; - index = align4(index); - - const arrb = this.getArrBuffer(); - dataView.setUint32(index, arrb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - uint8Array.set(arrb, index); - index += arrb.byteLength; - index = align4(index); - } - static deserializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - // skip method - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyPath = _parseKeyPathBuffer(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, kpjbLength)); - index += kpjbLength; - index = align4(index); - - const ktjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyTypes = Array.from(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, ktjbLength)); - index += ktjbLength; - index = align4(index); - - const arrLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const arrb = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, arrLength); - const arr = zbdecode(arrb); - index += arrLength; - index = align4(index); - - return new this( - keyPath, - keyTypes, - arr - ); - } -} -class ZArrayDeleteEvent extends ZArrayEvent { - constructor(keyPath, keyTypes) { - super(keyPath, keyTypes); - - this.index = -1; - this.oldValue = null; - - this.isZArrayDeleteEvent = true; - } - static METHOD = ++zEventsIota; - static Type = ZArray; - apply() { - const zid = this.keyPath[this.keyPath.length - 1]; - this.index = this.impl.binding.i.indexOf(zid); - this.oldValue = this.impl.binding.e.splice(this.index, 1)[0]; - this.impl.binding.i.splice(this.index, 1); - } - getConstructorArgs() { - return [this.keyPath, this.keyTypes]; - } - getAction() { - return { - action: 'delete', - key: this.index, - value: this.oldValue, - }; - } - computeUpdateByteLength() { - let totalSize = 0; - totalSize += Uint32Array.BYTES_PER_ELEMENT; // method - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key path length - totalSize += this.getKeyPathBuffer().byteLength; // key path data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // key types length - totalSize += this.getKeyTypesBuffer().byteLength; // key types data - totalSize = align4(totalSize); - - totalSize += Uint32Array.BYTES_PER_ELEMENT; // op index - totalSize += Uint32Array.BYTES_PER_ELEMENT; // op length - - return totalSize; - } - serializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - dataView.setUint32(index, this.constructor.METHOD, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjb = this.getKeyPathBuffer(); - dataView.setUint32(index, kpjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(kpjb, index); - index += kpjb.byteLength; - index = align4(index); - - const ktjb = this.getKeyTypesBuffer(); - dataView.setUint32(index, ktjb.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - uint8Array.set(ktjb, index); - index += ktjb.byteLength; - index = align4(index); - } - static deserializeUpdate(uint8Array) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - // skip method - index += Uint32Array.BYTES_PER_ELEMENT; - - const kpjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyPath = _parseKeyPathBuffer(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, kpjbLength)); - index += kpjbLength; - index = align4(index); - - const ktjbLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - const keyTypes = Array.from(new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index, ktjbLength)); - index += ktjbLength; - index = align4(index); - - return new this( - keyPath, - keyTypes, - ); - } -} -const ZEVENT_CONSTRUCTORS = [ - null, // start at 1 - ZNullEvent, - ZMapSetEvent, - ZMapDeleteEvent, - ZArrayPushEvent, - ZArrayDeleteEvent, -]; -const nullEvent = new ZNullEvent(); - -// globalThis.maxHistoryLength = 0; -// globalThis.maxHistoryTailLength = 0; -function applyUpdate(doc, uint8Array, transactionOrigin, playerId) { - const dataView = _makeDataView(uint8Array); - - let index = 0; - const method = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const _handleStateMessage = () => { - const clock = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const encodedData = new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index); - const state = zbdecode(encodedData); - doc.setClockState(clock, state); - - if (doc.mirror) { - // console.log('mirror yes'); - doc.dispatchEvent('update', encodedData, transactionOrigin, this, null); - } /* else { - console.log('mirror no'); - } */ - }; - const _handleTransactionMessage = () => { - let transactionCache = TransactionCache.deserializeUpdate(uint8Array); - transactionCache.doc = doc; - transactionCache.origin = transactionOrigin; - - // rebase on top of local history as needed - if (transactionCache.startClock === doc.clock) { - // nothing - } else if (transactionCache.startClock < doc.clock) { - transactionCache.rebase(); - } else { - throw new Error('transaction skipped clock ticks; desynced'); - } - - for (const event of transactionCache.events) { - event.bindToDoc(transactionCache.doc); - event.apply(); - if (event.impl?.isZArray || event.impl?.isZMap) { - transactionCache.pushObserverEvent(event.impl, event.getObserverEvent()); - } - } - - for (const event of transactionCache.events) { - doc.pushHistory(transactionCache.resolvePriority, event); - } - - if (doc.mirror) { - // console.log('mirror yes'); - transactionCache.resolvePriority = doc.resolvePriority; - const uint8Array = transactionCache.serializeUpdate(); - doc.dispatchEvent('update', uint8Array, transactionOrigin, this, null); - } /* else { - console.log('mirror no'); - } */ - transactionCache.triggerObserverEvents(); - }; - switch (method) { - case MESSAGES.STATE_RESET: { - _handleStateMessage(); - break; - } - case MESSAGES.TRANSACTION: { - _handleTransactionMessage(); - break; - } - default: { - console.warn('unknown method:', method); - break; - } - } -} - -function encodeStateAsUpdate(doc) { - const encodedData = zbencode(doc.state); - - const totalSize = - Uint32Array.BYTES_PER_ELEMENT + - Uint32Array.BYTES_PER_ELEMENT + - encodedData.byteLength; - const ab = new ArrayBuffer(totalSize); - const uint8Array = new Uint8Array(ab); - const dataView = new DataView(ab); - - let index = 0; - dataView.setUint32(index, MESSAGES.STATE_RESET, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - dataView.setUint32(index, doc.clock, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - uint8Array.set(new Uint8Array(encodedData.buffer, encodedData.byteOffset, encodedData.byteLength), index); - index += encodedData.byteLength; - - return uint8Array; -} - -export { - ZDoc as Doc, - ZMap as Map, - ZArray as Array, - TransactionCache, - applyUpdate, - encodeStateAsUpdate, - setRng, - zbencode, - zbdecode, -}; - -const Z = { - Doc: ZDoc, - Map: ZMap, - Array: ZArray, - TransactionCache, - applyUpdate, - encodeStateAsUpdate, - setRng, - zbencode, - zbdecode, -}; -export default Z; -/* globalThis.Z = Z; // XXX testing only - -import * as Y from 'yjs'; // XXX testing only -globalThis.Y = Y; */ \ No newline at end of file From a95cd5cfe1b8e6a8149345d6f722289e7de92b7e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:48:55 -0800 Subject: [PATCH 02/31] Update package.jsons --- apps/chat/package.json | 4 ++-- packages/usdk/package.json | 4 ++-- packages/usdk/packages/upstreet-agent/package.json | 4 ++-- .../usdk/packages/upstreet-agent/packages/codecs/package.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 4d74c6841..53193cc48 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -79,7 +79,7 @@ "next-auth": "5.0.0-beta.4", "next-themes": "0.3.0", "openai": "^4.55.4", - "queue-manager": "file:../../packages/usdk/packages/upstreet-agent/packages/queue-manager", + "queue-manager-async": "^0.0.1", "react": "^18.2.0", "react-agents": "file:../../packages/usdk/packages/upstreet-agent/packages/react-agents", "react-agents-browser": "file:../../packages/usdk/packages/upstreet-agent/packages/react-agents-browser", @@ -104,7 +104,7 @@ "ucom": "file:../../packages/ucom/src", "usehooks-ts": "2.16.0", "web-worker": "1.2.0", - "zjs": "file:../../packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs", + "u8-encoder": "^0.0.3", "zod": "^3.23.8" }, "devDependencies": { diff --git a/packages/usdk/package.json b/packages/usdk/package.json index f6671260c..11c6b74c3 100644 --- a/packages/usdk/package.json +++ b/packages/usdk/package.json @@ -104,7 +104,7 @@ "pnpm": "^9.12.3", "pretty-bytes": "^6.1.1", "react-agents": "file:./packages/upstreet-agent/packages/react-agents", - "queue-manager": "file:./packages/upstreet-agent/packages/queue-manager", + "queue-manager-async": "^0.0.1", "react-agents-electron": "file:./packages/upstreet-agent/packages/react-agents-electron", "react-agents-node": "file:./packages/upstreet-agent/packages/react-agents-node", "react-agents-wrangler": "file:./packages/upstreet-agent/packages/react-agents-wrangler", @@ -133,7 +133,7 @@ "wrangler": "^3.95.0", "ws": "^8.17.0", "yjs": "^13.6.18", - "zjs": "file:./packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs", + "u8-encoder": "^0.0.3", "zod": "^3.23.8", "zod-to-ts": "^1.2.0", "zod-to-json-schema": "^3.23.5" diff --git a/packages/usdk/packages/upstreet-agent/package.json b/packages/usdk/packages/upstreet-agent/package.json index 34ea84b3f..d1410f09b 100644 --- a/packages/usdk/packages/upstreet-agent/package.json +++ b/packages/usdk/packages/upstreet-agent/package.json @@ -23,7 +23,7 @@ "minimatch": "^9.0.4", "openai": "^4.56.0", "playwright-core-lite": "file:./packages/playwright-core-lite", - "queue-manager": "file:./packages/queue-manager", + "queue-manager-async": "^0.0.1", "react": "file:./packages/react", "react-agents": "file:./packages/react-agents", "react-agents-client": "file:./packages/react-agents-client", @@ -36,7 +36,7 @@ "typescript": "^5.6.2", "uuid-by-string": "^4.0.0", "yjs": "^13.6.18", - "zjs": "file:./packages/react-agents-client/packages/multiplayer/packages/zjs", + "u8-encoder": "^0.0.3", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5", "zod-to-ts": "^1.2.0" diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/package.json index e37b2492d..2a1bff33e 100644 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/codecs/package.json @@ -5,7 +5,7 @@ "lamejs": "file:./packages/lamejs", "libopusjs": "file:./packages/libopusjs", "mpg123-decoder": "file:./packages/mpg123-decoder", - "queue-manager": "file:../queue-manager", - "zjs": "file:../react-agents-client/packages/multiplayer/packages/zjs" + "queue-manager-async": "^0.0.1", + "u8-encoder": "^0.0.3" } } From 9d742f93e53be6c07febc9ad02ef821c6f0ceeb3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:50:01 -0800 Subject: [PATCH 03/31] Update pnpm lock --- pnpm-lock.yaml | 85 +++++++++++++++++++++----------------------------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eae781386..d8e0716ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -176,9 +176,9 @@ importers: openai: specifier: ^4.55.4 version: 4.76.1(zod@3.24.1) - queue-manager: - specifier: file:../../packages/usdk/packages/upstreet-agent/packages/queue-manager - version: link:../../packages/usdk/packages/upstreet-agent/packages/queue-manager + queue-manager-async: + specifier: ^0.0.1 + version: 0.0.1 react: specifier: ^18.2.0 version: 18.2.0 @@ -242,6 +242,9 @@ importers: three: specifier: ^0.167.1 version: 0.167.1 + u8-encoder: + specifier: ^0.0.3 + version: 0.0.3 ucom: specifier: file:../../packages/ucom/src version: file:packages/ucom/src @@ -251,9 +254,6 @@ importers: web-worker: specifier: 1.2.0 version: 1.2.0 - zjs: - specifier: file:../../packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs - version: '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs' zod: specifier: ^3.23.8 version: 3.24.1 @@ -789,9 +789,9 @@ importers: pupa: specifier: ^3.1.0 version: 3.1.0 - queue-manager: - specifier: file:./packages/upstreet-agent/packages/queue-manager - version: link:packages/upstreet-agent/packages/queue-manager + queue-manager-async: + specifier: ^0.0.1 + version: 0.0.1 react-agents: specifier: file:./packages/upstreet-agent/packages/react-agents version: link:packages/upstreet-agent/packages/react-agents @@ -822,6 +822,9 @@ importers: simple-yenc: specifier: ^1.0.4 version: 1.0.4 + u8-encoder: + specifier: ^0.0.3 + version: 0.0.3 unique-names-generator: specifier: ^4.7.1 version: 4.7.1 @@ -858,9 +861,6 @@ importers: yjs: specifier: ^13.6.18 version: 13.6.20 - zjs: - specifier: file:./packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs - version: '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs' zod: specifier: ^3.23.8 version: 3.24.1 @@ -993,15 +993,12 @@ importers: openai: specifier: ^4.56.0 version: 4.76.1(zod@3.24.1) - path-util: - specifier: file:./packages/path-util - version: link:packages/path-util playwright-core-lite: specifier: file:./packages/playwright-core-lite version: link:packages/playwright-core-lite - queue-manager: - specifier: file:./packages/queue-manager - version: link:packages/queue-manager + queue-manager-async: + specifier: ^0.0.1 + version: 0.0.1 react: specifier: file:./packages/react version: link:packages/react @@ -1032,15 +1029,15 @@ importers: typescript: specifier: ^5.6.2 version: 5.7.2 + u8-encoder: + specifier: ^0.0.3 + version: 0.0.3 uuid-by-string: specifier: ^4.0.0 version: 4.0.0 yjs: specifier: ^13.6.18 version: 13.6.20 - zjs: - specifier: file:./packages/react-agents-client/packages/multiplayer/packages/zjs - version: '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs' zod: specifier: ^3.23.8 version: 3.24.1 @@ -1072,21 +1069,17 @@ importers: mpg123-decoder: specifier: file:./packages/mpg123-decoder version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder - queue-manager: - specifier: file:../queue-manager - version: link:../queue-manager - zjs: - specifier: file:../react-agents-client/packages/multiplayer/packages/zjs - version: '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs' + queue-manager-async: + specifier: ^0.0.1 + version: 0.0.1 + u8-encoder: + specifier: ^0.0.3 + version: 0.0.3 packages/usdk/packages/upstreet-agent/packages/debouncer: {} - packages/usdk/packages/upstreet-agent/packages/path-util: {} - packages/usdk/packages/upstreet-agent/packages/playwright-core-lite: {} - packages/usdk/packages/upstreet-agent/packages/queue-manager: {} - packages/usdk/packages/upstreet-agent/packages/react: {} packages/usdk/packages/upstreet-agent/packages/react-agents: {} @@ -6045,9 +6038,6 @@ packages: '@upstash/redis@1.25.1': resolution: {integrity: sha512-ACj0GhJ4qrQyBshwFgPod6XufVEfKX2wcaihsEvSdLYnY+m+pa13kGt1RXm/yTHKf4TQi/Dy2A8z/y6WUEOmlg==} - '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs': - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs, type: directory} - '@use-gesture/core@10.3.1': resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} @@ -11549,9 +11539,6 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - path-util@file:packages/usdk/packages/upstreet-agent/packages/path-util: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/path-util, type: directory} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -12155,8 +12142,8 @@ packages: querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-manager@file:packages/usdk/packages/upstreet-agent/packages/queue-manager: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/queue-manager, type: directory} + queue-manager-async@0.0.1: + resolution: {integrity: sha512-vyc19znNJbJSWcomO7VG0G+AbSBgk3wmhBbKKSHC0X12L/ceIDkvyMPcW+sBemkXe6iTHXLIfRbnAuUYRnNStg==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -13739,6 +13726,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + u8-encoder@0.0.3: + resolution: {integrity: sha512-s/D0gcsrw2QhgK3vXbIOP10laR42GvhVnBGFBuApkN46IJ0uBCbK7sn6vUCHRukjLFHWgvcxy02wCUx5uTVJ1g==} + ucom@file:packages/ucom/src: resolution: {directory: packages/ucom/src, type: directory} @@ -20692,8 +20682,6 @@ snapshots: dependencies: crypto-js: 4.2.0 - '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs': {} - '@use-gesture/core@10.3.1': {} '@use-gesture/react@10.3.1(react@18.2.0)': @@ -22050,8 +22038,8 @@ snapshots: lamejs: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs libopusjs: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs mpg123-decoder: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder - queue-manager: file:packages/usdk/packages/upstreet-agent/packages/queue-manager - zjs: '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs' + queue-manager-async: 0.0.1 + u8-encoder: 0.0.3 collapse-white-space@2.1.0: {} @@ -27895,8 +27883,6 @@ snapshots: path-type@5.0.0: {} - path-util@file:packages/usdk/packages/upstreet-agent/packages/path-util: {} - pathe@1.1.2: {} peek-readable@4.1.0: {} @@ -28424,7 +28410,7 @@ snapshots: querystringify@2.2.0: {} - queue-manager@file:packages/usdk/packages/upstreet-agent/packages/queue-manager: {} + queue-manager-async@0.0.1: {} queue-microtask@1.2.3: {} @@ -30532,6 +30518,8 @@ snapshots: typescript@5.7.2: {} + u8-encoder@0.0.3: {} + ucom@file:packages/ucom/src: {} ufo@1.5.4: {} @@ -30721,9 +30709,8 @@ snapshots: memoize-one: 6.0.0 minimatch: 9.0.5 openai: 4.76.1(zod@3.24.1) - path-util: file:packages/usdk/packages/upstreet-agent/packages/path-util playwright-core-lite: file:packages/usdk/packages/upstreet-agent/packages/playwright-core-lite - queue-manager: file:packages/usdk/packages/upstreet-agent/packages/queue-manager + queue-manager-async: 0.0.1 react: file:packages/usdk/packages/upstreet-agent/packages/react react-agents: file:packages/usdk/packages/upstreet-agent/packages/react-agents react-agents-client: file:packages/usdk/packages/upstreet-agent/packages/react-agents-client @@ -30734,9 +30721,9 @@ snapshots: ts-jest: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.20.2)(jest@29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)))(typescript@5.7.2) twitter-api-sdk: 1.2.1 typescript: 5.7.2 + u8-encoder: 0.0.3 uuid-by-string: 4.0.0 yjs: 13.6.20 - zjs: '@upstreet/zjs@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/packages/zjs' zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) zod-to-ts: 1.2.0(typescript@5.7.2)(zod@3.24.1) From 31a0befc68995510faa73d8a65e08380b4982460 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:50:27 -0800 Subject: [PATCH 04/31] Update codecs deps --- .../upstreet-agent/packages/codecs/webp-codec.mjs | 8 ++++---- .../upstreet-agent/packages/codecs/webp-worker.mjs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs index 56d77886e..74869a1c6 100644 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs @@ -1,4 +1,4 @@ -import { zbencode, zbdecode } from 'zjs'; +import * as u8 from 'u8-encoder'; export class WebPEncoder { constructor() { @@ -10,7 +10,7 @@ export class WebPEncoder { const promise = this.promises.shift(); if (promise) { const b = e.data; - const o = zbdecode(b); + const o = u8.decode(b); const { error, result, @@ -34,7 +34,7 @@ export class WebPEncoder { quality = 75, lossless = false, } = {}) { - const b = zbencode({ + const b = u8.encode({ method: 'encode', args: { imageData, @@ -58,7 +58,7 @@ export class WebPEncoder { return await promise; } async decode(encodedData) { - const b = zbencode({ + const b = u8.encode({ method: 'decode', args: { encodedData, diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs index db710cdb1..fd8573a4b 100644 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs @@ -1,5 +1,5 @@ import webp from 'webp-wasm'; -import { zbdecode, zbencode } from 'zjs'; +import * as u8 from 'u8-encoder'; import { QueueManager } from 'queue-manager'; const encodeWebp = async (imageData, opts) => { @@ -19,7 +19,7 @@ globalThis.onmessage = async (e) => { let error, result; try { const b = e.data; - const o = zbdecode(b); + const o = u8.decode(b); const { method, args, @@ -51,9 +51,9 @@ globalThis.onmessage = async (e) => { let b; if (!error) { - b = zbencode({ error: null, result }); + b = u8.encode({ error: null, result }); } else { - b = zbencode({ error, result: null }); + b = u8.encode({ error, result: null }); } postMessage(b, [b.buffer]); }); From 088c59c7716a4cabf08e3e2105eac7deda5f235e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:53:36 -0800 Subject: [PATCH 05/31] Update queue-manager-async ref --- packages/usdk/cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/usdk/cli.js b/packages/usdk/cli.js index 35d879884..7ce00a08b 100644 --- a/packages/usdk/cli.js +++ b/packages/usdk/cli.js @@ -13,7 +13,7 @@ import { rimraf } from 'rimraf'; import Table from 'cli-table3'; -import { QueueManager } from './packages/upstreet-agent/packages/queue-manager/queue-manager.mjs'; +import { QueueManager } from 'queue-manager-async'; import { parseAgentSpecs } from './lib/agent-spec-utils.mjs'; import { getAgentPublicUrl, From 580a745c78609518796d5dfde24906cbb32112fc Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:54:04 -0800 Subject: [PATCH 06/31] Another queue-manager-async ref --- .../packages/react-agents/devices/video-input.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs index 37c849dc1..478f1ca07 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs @@ -4,7 +4,7 @@ import { Jimp } from 'jimp'; import { intToRGBA } from '@jimp/utils'; import chalk from 'chalk'; import ansiEscapeSequences from 'ansi-escape-sequences'; -import { QueueManager } from 'queue-manager'; +import { QueueManager } from 'queue-manager-async'; import { WebPEncoder } from 'codecs/webp-codec.mjs'; // From 209e517300b4fe05c4f1be6f3b0f3916920d94f2 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:54:23 -0800 Subject: [PATCH 07/31] More refs update --- .../packages/react-agents/util/audio-perception.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs index be879f390..1e182a4e7 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs @@ -4,7 +4,7 @@ import { // int16ToFloat32, } from 'codecs/convert.mjs'; import { AudioEncodeStream } from 'codecs/audio-encode.mjs'; -import { QueueManager } from 'queue-manager'; +import { QueueManager } from 'queue-manager-async'; import { aiHost, } from './endpoints.mjs'; From 1dd8e193a7991286518fbeb1707088072e50c9e3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 18:54:55 -0800 Subject: [PATCH 08/31] More refs update --- packages/usdk/lib/login.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/usdk/lib/login.mjs b/packages/usdk/lib/login.mjs index c2f16aa75..baa144bd9 100644 --- a/packages/usdk/lib/login.mjs +++ b/packages/usdk/lib/login.mjs @@ -5,15 +5,15 @@ import readline from 'readline'; import open from 'open'; // import { mkdirp } from 'mkdirp'; -import { rimraf } from 'rimraf'; -import { QueueManager } from '../packages/upstreet-agent/packages/queue-manager/queue-manager.mjs'; +// import { rimraf } from 'rimraf'; +import { QueueManager } from 'queue-manager-async'; import { localPort, callbackPort, } from '../util/ports.mjs'; import { getLoginJwt } from '../util/login-util.mjs'; import { makeCorsHeaders, getServerOpts } from '../util/server-utils.mjs'; -import { loginLocation } from './locations.mjs'; +// import { loginLocation } from './locations.mjs'; // From 52fae703cf7533db6ada0f851e5147cb637764e0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:17:23 -0800 Subject: [PATCH 09/31] Remove old mukltiplayer package --- .../packages/multiplayer/.eslintrc.json | 4 - .../packages/multiplayer/.gitignore | 4 - .../packages/multiplayer/README.md | 63 - .../packages/multiplayer/index.mjs | 155 -- .../packages/multiplayer/package.json | 25 - .../audio/networked-audio-client-utils.mjs | 9 - .../public/audio/networked-audio-client.mjs | 200 -- .../multiplayer/public/audio/ws-util.js | 198 -- .../packages/multiplayer/public/constants.mjs | 4 - .../multiplayer/public/crdt-client.mjs | 133 -- .../multiplayer/public/data-client.mjs | 1250 ---------- .../packages/multiplayer/public/favicon.ico | Bin 32038 -> 0 bytes .../packages/multiplayer/public/game.js | 768 ------ .../multiplayer/public/images/audio.svg | 1 - .../multiplayer/public/images/fire-mage.png | Bin 96885 -> 0 bytes .../multiplayer/public/images/rock.png | Bin 4601 -> 0 bytes .../multiplayer/public/irc-client.mjs | 169 -- .../multiplayer/public/lock-client.mjs | 204 -- .../multiplayer/public/network-realms.mjs | 2089 ----------------- .../public/renderers/html-renderer.js | 625 ----- .../multiplayer/public/update-types.mjs | 26 - .../packages/multiplayer/public/util.mjs | 408 ---- .../video/networked-video-client-utils.mjs | 9 - .../public/video/networked-video-client.mjs | 199 -- .../public/video/video-classes.mjs | 31 - .../multiplayer/public/video/video-client.mjs | 72 - .../packages/multiplayer/src/chat.mjs | 985 -------- .../packages/multiplayer/start.sh | 13 - .../packages/multiplayer/wrangler.toml | 25 - 29 files changed, 7669 deletions(-) delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.eslintrc.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.gitignore delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/README.md delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/index.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client-utils.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/ws-util.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/constants.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/crdt-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/data-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/favicon.ico delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/game.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/audio.svg delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/fire-mage.png delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/rock.png delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/irc-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/lock-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/network-realms.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/renderers/html-renderer.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/update-types.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/util.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client-utils.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-classes.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/src/chat.mjs delete mode 100755 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/start.sh delete mode 100644 packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/wrangler.toml diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.eslintrc.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.eslintrc.json deleted file mode 100644 index 9c238269d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.eslintrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["public/**/*", "node_modules/**/*", "node_modules"] -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.gitignore b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.gitignore deleted file mode 100644 index ac53dbb36..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -credentials.conf -metadata.json -node_modules -.wrangler diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/README.md b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/README.md deleted file mode 100644 index c5707651f..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# Cloudflare Edge Chat Demo - -This is a demo app written on [Cloudflare Workers](https://workers.cloudflare.com/) utilizing [Durable Objects](https://blog.cloudflare.com/introducing-workers-durable-objects) to implement real-time chat with stored history. This app runs 100% on Cloudflare's edge. - -Try it here: https://edge-chat-demo.cloudflareworkers.com - -The reason this demo is remarkable is because it deals with state. Before Durable Objects, Workers were stateless, and state had to be stored elsewhere. State can mean storage, but it also means the ability to coordinate. In a chat room, when one user sends a message, the app must somehow route that message to other users, via connections that those other users already had open. These connections are state, and coordinating them in a stateless framework is hard if not impossible. - -## How does it work? - -This chat app uses a Durable Object to control each chat room. Users connect to the object using WebSockets. Messages from one user are broadcast to all the other users. The chat history is also stored in durable storage, but this is only for history. Real-time messages are relayed directly from one user to others without going through the storage layer. - -Additionally, this demo uses Durable Objects for a second purpose: Applying a rate limit to messages from any particular IP. Each IP is assigned a Durable Object that tracks recent request frequency, so that users who send too many messages can be temporarily blocked -- even across multiple chat rooms. Interestingly, these objects don't actually store any durable state at all, because they only care about very recent history, and it's not a big deal if a rate limiter randomly resets on occasion. So, these rate limiter objects are an example of a pure coordination object with no storage. - -This chat app is only a few hundred lines of code. The deployment configuration is only a few lines. Yet, it will scale seamlessly to any number of chat rooms, limited only by Cloudflare's available resources. Of course, any individual chat room's scalability has a limit, since each object is single-threaded. But, that limit is far beyond what a human participant could keep up with anyway. - -For more details, take a look at the code! It is well-commented. - -## Learn More - -* [Durable Objects introductory blog post](https://blog.cloudflare.com/introducing-workers-durable-objects) -* [Durable Objects documentation](https://developers.cloudflare.com/workers/learning/using-durable-objects) - -## Deploy it yourself - -If you haven't already, join the Durable Objects beta by visiting the [Cloudflare dashboard](https://dash.cloudflare.com/) and navigating to "Workers" and then "Durable Objects". - -Then, make sure you have [Wrangler](https://developers.cloudflare.com/workers/cli-wrangler/install-update), the official Workers CLI, installed. Version 1.19.3 or newer is required to publish this example as written. - -After installing it, run `wrangler login` to [connect it to your Cloudflare account](https://developers.cloudflare.com/workers/cli-wrangler/authentication). - -Once you're in the Durable Objects beta and have Wrangler installed and authenticated, you can deploy the app for the first time by adding your Cloudflare account ID (which can be viewed by running `wrangler whoami`) to the wrangler.toml file and then running: - - wrangler publish - -If you get an error saying "Cannot create binding for class [...] because it is not currently configured to implement durable objects", you need to update your version of Wrangler. - -This command will deploy the app to your account under the name `edge-chat-demo`. - -## What are the dependencies? - -This demo code does not have any dependencies, aside from Cloudflare Workers (for the server side, `chat.mjs`) and a modern web browser (for the client side, `views/chat.html`). Deploying the code requires Wrangler. - -## How to uninstall - -Modify wrangler.toml to remove the durable_objects bindings and add a deleted_classes migration. The bottom of your wrangler.toml should look like: - -``` -[durable_objects] -bindings = [ -] - -# Indicate that you want the ChatRoom and RateLimiter classes to be callable as Durable Objects. -[[migrations]] -tag = "v1" # Should be unique for each entry -new_classes = ["ChatRoom", "RateLimiter"] - -[[migrations]] -tag = "v2" -deleted_classes = ["ChatRoom", "RateLimiter"] -``` - -Then run `wrangler publish`, which will delete the Durable Objects and all data stored in them. To remove the Worker, go to [dash.cloudflare.com](dash.cloudflare.com) and navigate to Workers -> Overview -> edge-chat-demo -> Manage Service -> Delete (bottom of page) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/index.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/index.mjs deleted file mode 100644 index 8d026390d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/index.mjs +++ /dev/null @@ -1,155 +0,0 @@ -import path from 'path'; -import child_process from 'child_process'; - -const MULTIPLAYER_PORT = 2222; - -// - -const dirname = path.dirname(import.meta.url.replace(/^file:\/\//, '')); -Error.stackTraceLimit = 300; - -// - -const _waitForRegex = (process, regex) => { - return new Promise((resolve, reject) => { - const onerror = err => { - reject(err); - cleanup(); - }; - process.on('error', onerror); - - process.stdout.setEncoding('utf8'); - const ondata = data => { - if (regex.test(data)) { - resolve(); - cleanup(); - } - }; - process.stdout.on('data', ondata); - - const cleanup = () => { - process.removeListener('error', onerror); - process.stdout.removeListener('data', ondata); - }; - }); -}; -const makeWaitForExit = cp => { - let exited = false; - cp.on('close', (code, signal) => { - exited = true; - }); - - return to => { - if (!exited) { - return new Promise((accept, reject) => { - const timeout = setTimeout(() => { - reject(new Error('timeout in process: ' + cp)); - }, to); - - const close = (code, signal) => { - accept(code); - cleanup(); - }; - cp.on('close', close); - cp.on('error', err => { - reject(err); - cleanup(); - }); - const cleanup = () => { - cp.removeListener('close', close); - cp.removeListener('error', reject); - clearTimeout(timeout); - }; - }); - } else { - return Promise.resolve(); - } - }; -}; - -// let httpServer = null; -let logging = false; -let quitted = false; -const loggedProcesses = []; -const _logProcess = childProcess => { - const tombstoneLogs = { - stdout: [], - stderr: [], - }; - childProcess.stdout.on('data', data => { - if (logging && !quitted) { - process.stdout.write(data); - } - tombstoneLogs.stderr.push(data); - while (tombstoneLogs.stderr.length > 1000) { - tombstoneLogs.stderr.shift(); - } - }); - childProcess.stderr.on('data', data => { - if (logging && !quitted) { - process.stderr.write(data); - } - tombstoneLogs.stderr.push(data); - while (tombstoneLogs.stderr.length > 1000) { - tombstoneLogs.stderr.shift(); - } - }); - loggedProcesses.push(childProcess); - - childProcess.on('close', (exitCode, signal) => { - if (!quitted) { - console.log(`${childProcess.name} process exited with code ${exitCode} and signal ${signal}`); - if (exitCode !== 0) { - console.log('stdout:\n', tombstoneLogs.stdout.join('')); - console.log('stderr:\n', tombstoneLogs.stderr.join('')); - } - } - }); -}; -{ - if(process.stdin.setRawMode) - process.stdin.setRawMode(true); - process.stdin.resume(); - process.stdin.setEncoding('utf8'); - const killall = async () => { - quitted = true; - // console.log('quit 2'); - for (const cp of loggedProcesses) { - console.log('kill pid', cp.name, cp.pid); - // treeKill(cp.pid, 9); - try { - process.kill(cp.pid, 'SIGTERM'); - } catch(err) { - if (err.code !== 'ESRCH') { - console.warn(err.stack); - } - } - } - await Promise.all(loggedProcesses.map(cp => cp.waitForExit(10 * 1000))); - }; -} - - - -const _startMultiplayer = async () => { - const multiplayerPath = path.join(dirname); - const wranglerPath = path.join(dirname, 'node_modules', 'wrangler'); - const multiplayerProcess = child_process.spawn(process.argv[0], [wranglerPath, 'dev', '-l', '--port', MULTIPLAYER_PORT + ''], { - cwd: multiplayerPath, - env: { - ...process.env, - PORT: MULTIPLAYER_PORT, - }, - // uid: oldUid, - }); - multiplayerProcess.name = 'multiplayer'; - multiplayerProcess.waitForExit = makeWaitForExit(multiplayerProcess); - - _logProcess(multiplayerProcess); - - await _waitForRegex(multiplayerProcess, /starting/i); - - return multiplayerProcess; -}; - -_startMultiplayer() \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/package.json deleted file mode 100644 index f8e96afe6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "multiplayer", - "version": "0.6.0", - "description": "", - "main": "index.mjs", - "type": "module", - "repository": { - "type": "git", - "url": "git+https://github.com/UpstreetAI/upstreet.git" - }, - "author": "Upstreet", - "license": "MIT", - "bugs": { - "url": "https://github.com/UpstreetAI/upstreet/issues" - }, - "homepage": "https://github.com/UpstreetAI/upstreet", - "scripts": { - "dev": "wrangler dev --port 2222", - "deploy": "wrangler deploy" - }, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.3.4", - "yjs": "^13.6.18" - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client-utils.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client-utils.mjs deleted file mode 100644 index db6bb8f61..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client-utils.mjs +++ /dev/null @@ -1,9 +0,0 @@ -import {UPDATE_METHODS} from '../update-types.mjs'; - -export const handlesMethod = method => { - return [ - UPDATE_METHODS.AUDIO, - UPDATE_METHODS.AUDIO_START, - UPDATE_METHODS.AUDIO_END, - ].includes(method); -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client.mjs deleted file mode 100644 index 416c8913a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/networked-audio-client.mjs +++ /dev/null @@ -1,200 +0,0 @@ -import {UPDATE_METHODS} from '../update-types.mjs'; -import {parseUpdateObject, makeId} from '../util.mjs'; -import {zbencode} from 'zjs'; -import {handlesMethod} from './networked-audio-client-utils.mjs'; - -export class NetworkedAudioClient extends EventTarget { - constructor({ - playerId = makeId(), - }) { - super(); - - this.playerId = playerId; - - this.ws = null; - - this.audioSourceCleanups = new Map(); // playerId:streamId -> function - } - - addAudioSource(playableAudioStream) { - // console.log('add audio source', new Error().stack); - - const { - id, - // output, - type, - disposition, - } = playableAudioStream; - if (typeof id !== 'string') { - throw new Error('audio source id must be a string'); - } - if (typeof type !== 'string') { - throw new Error('audio source type must be a string'); - } - if (typeof disposition !== 'string') { - throw new Error('audio source disposition must be a string'); - } - - // console.log('send start', [ - // this.playerId, - // id, - // type, - // disposition, - // ]); - this.ws.send(zbencode({ - method: UPDATE_METHODS.AUDIO_START, - args: [ - this.playerId, - id, - type, - disposition, - ], - })); - - // pump the reader - let live = true; - const finishPromise = (async () => { - for await (const chunk of playableAudioStream) { - if (live) { - // console.log('send audio', [ - // this.playerId, - // id, - // chunk, - // ]); - this.ws.send(zbencode({ - method: UPDATE_METHODS.AUDIO, - args: [ - this.playerId, - id, - chunk, - ], - })); - } else { - break; - } - } - })(); - - // add the cleanup fn - const cleanup = () => { - live = false; - - // console.log('send audio end', [ - // this.playerId, - // id, - // ]); - this.ws.send(zbencode({ - method: UPDATE_METHODS.AUDIO_END, - args: [ - this.playerId, - id, - ], - })); - }; - this.audioSourceCleanups.set(id, cleanup); - - return { - waitForFinish: () => finishPromise, - }; - } - - removeAudioSource(readableAudioStream) { - // console.log('remove audio source'); - const cleanupFn = this.audioSourceCleanups.get(readableAudioStream.id); - cleanupFn(); - this.audioSourceCleanups.delete(readableAudioStream.id); - } - - async connect(ws) { - this.ws = ws; - - const _waitForOpen = () => new Promise((resolve, reject) => { - resolve = (resolve => () => { - resolve(); - _cleanup(); - })(resolve); - reject = (reject => () => { - reject(); - _cleanup(); - })(reject); - - this.ws.addEventListener('open', resolve); - this.ws.addEventListener('error', reject); - - const _cleanup = () => { - this.ws.removeEventListener('open', resolve); - this.ws.removeEventListener('error', reject); - }; - }); - await _waitForOpen(); - - // console.log('irc listen'); - this.ws.addEventListener('message', e => { - // console.log('got irc data', e.data); - if (e?.data?.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method /*, args */} = updateObject; - if (handlesMethod(method)) { - this.handleUpdateObject(updateObject); - } - } else { - // debugger; - } - }); - } - - handleUpdateObject(updateObject) { - const {method, args} = updateObject; - // console.log('audio update object', {method, args}); - if (method === UPDATE_METHODS.AUDIO) { - // console.log('got irc chat', {method, args}); - const [ - playerId, - streamId, - data, - ] = args; - - this.dispatchEvent(new MessageEvent('audio', { - data: { - playerId, - streamId, - data, - }, - })); - } else if (method === UPDATE_METHODS.AUDIO_START) { - const [ - playerId, - streamId, - type, - disposition, - ] = args; - - this.dispatchEvent(new MessageEvent('audiostart', { - data: { - playerId, - streamId, - type, - disposition, - }, - })); - } else if (method === UPDATE_METHODS.AUDIO_END) { - const [ - playerId, - streamId, - ] = args; - - this.dispatchEvent(new MessageEvent('audioend', { - data: { - playerId, - streamId, - }, - })); - } else { - console.warn('unhandled audio method: ' + method, updateObject); - throw new Error('unhandled audio method: ' + method); - } - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/ws-util.js b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/ws-util.js deleted file mode 100644 index afca6e67d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/audio/ws-util.js +++ /dev/null @@ -1,198 +0,0 @@ -import {TYPE} from './ws-constants.js'; - -const textEncoder = new TextEncoder(); -const textDecoder = new TextDecoder(); -const encodedMessageUint8Array = new Uint8Array(32 * 1024); -const encodedMessageDataView = new DataView(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset); -export const encodeMessage = parts => { - let index = 0; - for (const part of parts) { - if (typeof part === 'number') { - encodedMessageDataView.setUint32(index, part, true); - index += Uint32Array.BYTES_PER_ELEMENT; - } else if (typeof part === 'string') { - const {written} = textEncoder.encodeInto(part, new Uint8Array(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset + index + Uint32Array.BYTES_PER_ELEMENT)); - encodedMessageDataView.setUint32(index, written, true); - index += Uint32Array.BYTES_PER_ELEMENT; - index += written; - } else if (part.byteLength >= 0) { - if (!part.staticSize) { - encodedMessageDataView.setUint32(index, part.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - } - encodedMessageUint8Array.set(new Uint8Array(part.buffer, part.byteOffset, part.byteLength), index); - index += part.byteLength; - } else { - throw new Error('unknown part: ' + JSON.stringify(part)); - } - } - return new Uint8Array(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset, index); -}; -export const encodeAudioMessage = (method, id, type, timestamp, data) => { - let index = 0; - encodedMessageDataView.setUint32(index, method, true); - index += Uint32Array.BYTES_PER_ELEMENT; - encodedMessageDataView.setUint32(index, id, true); - index += Uint32Array.BYTES_PER_ELEMENT; - encodedMessageDataView.setUint32(index, type === 'key' ? 0 : 1, true); - index += Uint32Array.BYTES_PER_ELEMENT; - encodedMessageDataView.setFloat32(index, timestamp, true); - index += Float32Array.BYTES_PER_ELEMENT; - encodedMessageDataView.setUint32(index, data.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - encodedMessageUint8Array.set(data, index); - index += data.byteLength; - return new Uint8Array(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset, index); -}; -export const encodePoseMessage = (method, id, p, q, s, extraUint8ArrayFull, extraUint8ArrayByteLength) => { - let index = 0; - - encodedMessageDataView.setUint32(index, method, true); - index += Uint32Array.BYTES_PER_ELEMENT; - encodedMessageDataView.setUint32(index, id, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - encodedMessageUint8Array.set(new Uint8Array(p.buffer, p.byteOffset, p.byteLength), index); - index += p.byteLength; - encodedMessageUint8Array.set(new Uint8Array(q.buffer, q.byteOffset, q.byteLength), index); - index += q.byteLength; - encodedMessageUint8Array.set(new Uint8Array(s.buffer, s.byteOffset, s.byteLength), index); - index += s.byteLength; - - encodedMessageUint8Array.set(new Uint8Array(extraUint8ArrayFull.buffer, extraUint8ArrayFull.byteOffset, extraUint8ArrayByteLength), index); - index += extraUint8ArrayByteLength; - - return new Uint8Array(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset, index); -}; -const _align = (index, n) => index + (n - (index % n)); -const _align4 = index => _align(index, 4); -export const encodeTypedMessage = (uint8Array, parts) => { - const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset); - - let index = 0; - for (const part of parts) { - if (typeof part === 'number') { - if (Number.isInteger(part)) { - dataView.setUint32(index, TYPE.INT, true); - index += Uint32Array.BYTES_PER_ELEMENT; - dataView.setUint32(index, part, true) - index += Uint32Array.BYTES_PER_ELEMENT; - } else { - dataView.setUint32(index, TYPE.FLOAT, true); - index += Uint32Array.BYTES_PER_ELEMENT; - dataView.setFloat32(index, part, true); - index += Float32Array.BYTES_PER_ELEMENT; - } - } else if (typeof part === 'string') { - dataView.setUint32(index, TYPE.STRING, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const {written} = textEncoder.encodeInto(part, new Uint8Array(uint8Array.buffer, uint8Array.byteOffset + index + Uint32Array.BYTES_PER_ELEMENT)); - dataView.setUint32(index, written, true); - index += Uint32Array.BYTES_PER_ELEMENT; - index += written; - index = _align4(index); - } else if (part instanceof Uint32Array) { - dataView.setUint32(index, TYPE.UINT32ARRAY, true); - index += Uint32Array.BYTES_PER_ELEMENT; - dataView.setUint32(index, part.length, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - uint8Array.set(new Uint8Array(part.buffer, part.byteOffset, part.byteLength), index); - index += part.byteLength; - } else if (part instanceof Float32Array) { - dataView.setUint32(index, TYPE.FLOAT32ARRAY, true); - index += Uint32Array.BYTES_PER_ELEMENT; - dataView.setUint32(index, part.length, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - uint8Array.set(new Uint8Array(part.buffer, part.byteOffset, part.byteLength), index); - index += part.byteLength; - } else if (part instanceof Uint8Array) { - dataView.setUint32(index, TYPE.UINT32ARRAY, true); - index += Uint32Array.BYTES_PER_ELEMENT; - dataView.setUint32(index, part.length, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - uint8Array.set(part, index); - index += part.byteLength; - index = _align4(index); - } else { - throw new Error('unknown part: ' + JSON.stringify(part)); - } - } - return index; -}; -export const decodeTypedMessage = (uint8Array, uint8ArrayByteLength, parts) => { - const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset); - - parts.length = 0; - for (let index = 0; index < uint8ArrayByteLength;) { - const type = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - switch (type) { - case TYPE.INT: { - const part = dataView.getUint32(index, true); - parts.push(part); - index += Uint32Array.BYTES_PER_ELEMENT; - break; - } - case TYPE.FLOAT: { - const part = dataView.getFloat32(index, true); - parts.push(part); - index += Float32Array.BYTES_PER_ELEMENT; - break; - } - case TYPE.STRING: { - const byteLength = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const part = textDecoder.decode(new Uint8Array(uint8Array.buffer, index, byteLength)); - parts.push(part); - index += byteLength; - index = _align4(index); - break; - } - case TYPE.UINT32ARRAY: { - const length = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const part = new Uint32Array(uint8Array.buffer, index, length); - parts.push(part); - index += part.byteLength; - break; - } - case TYPE.FLOAT32ARRAY: { - const length = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const part = new Float32Array(uint8Array.buffer, index, length); - parts.push(part); - index += part.byteLength; - break; - } - case TYPE.UINT8ARRAY: { - const length = dataView.getUint32(index, true); - index += Uint32Array.BYTES_PER_ELEMENT; - - const part = new Uint8Array(uint8Array.buffer, index, length); - parts.push(part); - index += part.byteLength; - index = _align4(index); - break; - } - default: { - throw new Error('cannot parse message part with type ' + type); - } - } - } -}; -/* // hack to fix toJSON() -export const loadState = state => { - const objects = state.getArray('objects'); - for (let i = 0; i < objects.length; i++) { - const objectId = objects.get(i); - const object = state.getMap('objects.' + objectId); - } -}; */ \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/constants.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/constants.mjs deleted file mode 100644 index 3cc5eff4f..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/constants.mjs +++ /dev/null @@ -1,4 +0,0 @@ -export const frameSize = 64; -export const realmSize = 300; -export const inventoryFrameSize = 30; -export const MULTIPLAYER_PORT = 2222; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/crdt-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/crdt-client.mjs deleted file mode 100644 index f1f4d3e59..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/crdt-client.mjs +++ /dev/null @@ -1,133 +0,0 @@ -import * as Y from 'yjs' -import {UPDATE_METHODS} from "./update-types.mjs"; -import { - // createWs, - // makePromise, - // makeId, - parseUpdateObject, - serializeMessage, -} from './util.mjs'; - -export class NetworkedCrdtClient extends EventTarget { - static handlesMethod(method) { - return [UPDATE_METHODS.CRDT_UPDATE].includes(method); - } - - doc = null; - constructor({ - initialUpdate = null, - } = {}) { - super(); - - this.doc = new Y.Doc(); - if (initialUpdate) { - Y.applyUpdateV2(this.doc, initialUpdate, 'constructor'); - } - this.doc.on('updateV2', (update, origin, doc) => { - this.dispatchEvent(new MessageEvent('update', { - data: { - update, - origin, - doc, - }, - })); - }); - } - getDoc() { - return this.doc; - } - update(uint8Array, origin) { - Y.applyUpdateV2(this.doc, uint8Array, origin); - } - getStateAsUpdate() { - return Y.encodeStateAsUpdateV2(this.doc); - } - getInitialUpdateMessage() { - const update = this.getStateAsUpdate(); - return new MessageEvent('crdtUpdate', { - data: { - update, - }, - }); - } - - // client connects to server - async connect(ws) { - const _waitForOpen = async () => { - await new Promise((resolve, reject) => { - resolve = (resolve => () => { - resolve(); - _cleanup(); - })(resolve); - reject = (reject => () => { - reject(); - _cleanup(); - })(reject); - - ws.addEventListener('open', resolve); - ws.addEventListener('error', reject); - - const _cleanup = () => { - ws.removeEventListener('open', resolve); - ws.removeEventListener('error', reject); - }; - }); - }; - const _waitForInitialImport = async () => { - await new Promise((resolve, reject) => { - const initialMessage = e => { - // console.log('got message', e.data); - if (e.data instanceof ArrayBuffer && e.data.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method, args} = updateObject; - if (method === UPDATE_METHODS.CRDT_UPDATE) { - const [update] = args; - this.update(update); - - resolve(); - - ws.removeEventListener('message', initialMessage); - } - } - }; - ws.addEventListener('message', initialMessage); - }); - }; - await Promise.all([ - _waitForOpen(), - _waitForInitialImport(), - ]); - - // console.log('irc listen'); - ws.addEventListener('message', e => { - // if some other listener hasn't consumed the message already - if (e?.data?.byteLength > 0) { - const updateBuffer = e.data; - // console.log('irc data', e.data); - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method, args} = updateObject; - if (method === UPDATE_METHODS.CRDT_UPDATE) { - const [update] = args; - this.update(update); - } - } else { - // debugger; - } - }); - - this.addEventListener('update', e => { - const {update, origin, doc} = e.data; - const m = new MessageEvent('crdtUpdate', { - data: { - update, - }, - }); - ws.send(serializeMessage(m)); - }); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/data-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/data-client.mjs deleted file mode 100644 index be9d95ec3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/data-client.mjs +++ /dev/null @@ -1,1250 +0,0 @@ -import {zbencode, zbdecode} from 'zjs'; -import {UPDATE_METHODS} from './update-types.mjs'; -import { - parseUpdateObject, - makeId, - serializeMessage, -} from './util.mjs'; - -// - -export const convertValToCrdtVal = val => { - const startEpoch = 0; - const crdtVal = {}; - for (const k in val) { - const v = val[k]; - crdtVal[k] = [startEpoch, v]; - } - return crdtVal; -}; - -export const convertCrdtValToVal = crdtVal => { - const val = {}; - for (const k in crdtVal) { - const [epoch, v] = crdtVal[k]; - val[k] = v; - } - return val; -}; - -export const convertMapToObject = map => { - const o = {}; - for (const [key, val] of map) { - o[key] = val; - } - return o; -}; - -export const convertObjectToMap = map => { - const o = new Map(); - for (const key in map) { - const val = map[key]; - o.set(key, val); - } - return o; -}; - -// - -const _key = (arrayId, arrayIndexId) => `${arrayId}:${arrayIndexId}`; - -export class DCMap extends EventTarget { - constructor(arrayId, arrayIndexId, dataClient) { - super(); - - this.arrayId = arrayId; - this.arrayIndexId = arrayIndexId; - this.dataClient = dataClient; - - this.cleanupFn = null; - } - - key() { - return _key(this.arrayId, this.arrayIndexId); - } - - getRawObject() { - const key = this.key(); - // if (!key) { - // debugger; - // } - const crdtWrap = this.dataClient.crdt.get(key); - // if (!crdtWrap) { - // debugger; - // } - const rawObject = crdtWrap[1]; - return rawObject; - } - - getKeys() { - const rawObject = this.getRawObject(); - return Object.keys(rawObject); - } - - setRawObject(rawObject, epoch) { - const key = this.key(); - const crdtWrap = [ - epoch, - rawObject, - ]; - this.dataClient.crdt.set(key, crdtWrap); - } - - getMapEpoch() { - const key = this.key(); - const crdtWrap = this.dataClient.crdt.get(key); - const epoch = crdtWrap[0]; - return epoch; - } - - toObject() { - const object = this.getRawObject(); - if (object) { - const result = {}; - for (const key in object) { - const [epoch, val] = object[key]; - result[key] = val; - } - return result; - } else { - debugger; - return {}; - } - } - - getKey(key) { - const object = this.getRawObject(); - if (object) { - const valSpec = object[key]; - if (valSpec !== undefined) { - const [epoch, val] = valSpec; - return val; - } else { - return undefined; - } - } else { - return undefined; - } - } - - getKeyEpoch(key) { - const object = this.getRawObject(); - if (object) { - const valSpec = object[key]; - if (valSpec !== undefined) { - const [epoch, val] = valSpec; - return epoch; - } else { - return 0; - } - } else { - return 0; - } - } - - // client - setKeyEpochValue(key, epoch, val) { - const object = this.getRawObject(); - if (!object) { - debugger; - throw new Error('setKeyEpochValue on nonexistent object'); - } - if (object[key]) { // already had key; update - object[key][0] = epoch; - object[key][1] = val; - } else { // did not have key; add - object[key] = [epoch, val]; - } - } - - setKeyValueUpdate(key, val) { - const oldEpoch = this.getKeyEpoch(key); - const newEpoch = oldEpoch + 1; - this.setKeyEpochValue(key, newEpoch, val); - - return new MessageEvent('set.' + this.arrayId + '.' + this.arrayIndexId, { - data: { - key, - epoch: newEpoch, - val, - }, - }); - } - - setKeyEpochValueUpdate(key, epoch, val) { - this.setKeyEpochValue(key, epoch, val); - - return new MessageEvent('set.' + this.arrayId + '.' + this.arrayIndexId, { - data: { - key, - epoch, - val, - }, - }); - } - - removeUpdate() { - const key = this.key(); - this.dataClient.crdt.delete(key); - - const array = this.dataClient.crdt.get(this.arrayId); - if (!array) { - throw new Error('remove from nonexistent array!'); - } - delete array[this.arrayIndexId]; - - return new MessageEvent('remove.' + this.arrayId, { - data: { - arrayIndexId: this.arrayIndexId, // XXX is this needed? - }, - }); - } - - importMapUpdate() { - const map = this; - const {arrayIndexId} = map; - - // convert the current value to JSON - // notice that this loses per-key epoch information - // however, during a migration, the map's overall epoch is increased - // migration conflicts are detected at the map level, not the key level - const crdtVal = map.getRawObject(); - const val = convertCrdtValToVal(crdtVal); - const epoch = map.getMapEpoch() + 1; - - // console.log('export epoch', epoch); - return new MessageEvent('add.' + this.arrayId, { - data: { - arrayIndexId, - map, - val, - epoch, - }, - }); - } - - // server - trySetKeyEpochValue(key, epoch, val) { - let object = this.getRawObject(); - if (!object) { - object = {}; - this.setRawObject(object, 0); - } - - const oldEpoch = object[key] ? object[key][0] : 0; - if (epoch > oldEpoch) { - if (object[key]) { - object[key][0] = epoch; - object[key][1] = val; - } else { - object[key] = [epoch, val]; - } - return undefined; - } else { - return object[key]; - } - } - - listen() { - const setKey = 'set.' + this.arrayId + '.' + this.arrayIndexId; - const setFn = e => { - const {key, epoch, val} = e.data; - this.dispatchEvent(new MessageEvent('update', { - data: { - key, - epoch, - val, - }, - })); - }; - this.dataClient.addEventListener(setKey, setFn); - - const removeKey = 'remove.' + this.arrayId; - const removeFn = e => { - const {arrayIndexId} = e.data; - if (arrayIndexId === this.arrayIndexId) { - this.dispatchEvent(new MessageEvent('remove', { - data: { - arrayIndexId, - }, - })); - } - }; - this.dataClient.addEventListener(removeKey, removeFn); - - /* const importMapKey = 'importMap.' + this.arrayId; - const importMapFn = e => { - const {arrayIndexId} = e.data; - const key = this.getKey(); - const map = this.dataClient.crdt.get(key); - const array = this.dataClient.crdt.get(this.arrayId); - console.log('dc handle import map', {array, map}); - }; - this.dataClient.addEventListener(importMapKey, importMapFn); */ - - // listener - // this.dataClient.arrayMapListeners.set(this.arrayIndexId, this); - - this.cleanupFn = () => { - // console.log('map unlink', setKey); - this.dataClient.removeEventListener(setKey, setFn); - this.dataClient.removeEventListener(removeKey, removeFn); - // this.dataClient.removeEventListener(importMapKey, importMapFn); - - // listener - // this.dataClient.arrayMapListeners.delete(this.arrayIndexId); - }; - } - - unlisten() { - if (this.cleanupFn) { - this.cleanupFn(); - this.cleanupFn = null; - } - } -} - -// - -export class DCArray extends EventTarget { - constructor(arrayId, dataClient) { - super(); - - this.arrayId = arrayId; - this.dataClient = dataClient; - - this.cleanupFn = null; - } - - getKeys() { - const array = this.dataClient.crdt.get(this.arrayId); - if (array) { - return Object.keys(array); - } else { - return []; - } - } - - getMaps() { - const array = this.dataClient.crdt.get(this.arrayId); - if (array) { - return Object.keys(array).map(arrayIndexId => { - return this.getMap(arrayIndexId, { - listen: false, - }); - }); - } else { - return []; - } - } - - getMap(arrayIndexId, {listen = true} = {}) { - const map = new DCMap(this.arrayId, arrayIndexId, this.dataClient); - listen && map.listen(); - return map; - } - - hasKey(key) { - const array = this.dataClient.crdt.get(this.arrayId); - return array ? (array[key] !== undefined) : false; - } - - getIndex(index, opts) { - const array = this.dataClient.crdt.get(this.arrayId); - if (array) { - let i = 0; - for (const k in array) { - if (i === index) { - return this.getMap(k, opts); - } - i++; - } - return undefined; - } else { - return undefined; - } - } - - getSize() { - const array = this.dataClient.crdt.get(this.arrayId); - return array ? Object.keys(array).length : 0; - } - - toArray() { - const array = this.dataClient.crdt.get(this.arrayId); - if (array) { - const arrayMaps = []; - for (const arrayIndexId in array) { - const key = _key(this.arrayId, arrayIndexId); - const crdtWrap = this.dataClient.crdt.get(key); - const crdtVal = crdtWrap[1]; - const val = convertCrdtValToVal(crdtVal); - arrayMaps.push(val); - } - return arrayMaps; - } else { - return []; - } - } - - importArrayUpdates() { - const arrayVal = this.dataClient.crdt.get(this.arrayId); - - const messages = []; - for (const arrayIndexId in arrayVal) { - const map = this.getMap(arrayIndexId, { - listen: false, - }); - const crdtVal = map.getRawObject(); - const val = convertCrdtValToVal(crdtVal); - const epoch = map.getMapEpoch() + 1; - - if (typeof epoch !== 'number') { - debugger; - } - const m = new MessageEvent('add.' + this.arrayId, { - data: { - arrayIndexId, - map, - val, - epoch, - }, - }); - messages.push(m); - } - return messages; - } - - add(val, epoch, opts) { - return this.dataClient.createArrayMapElement(this.arrayId, val, epoch, opts); - } - - addAt(arrayIndexId, val, epoch, opts) { - return this.dataClient.addArrayMapElement(this.arrayId, arrayIndexId, val, epoch, opts); - } - - removeAt(arrayIndexId) { - return this.dataClient.removeArrayMapElement(this.arrayId, arrayIndexId); - } - - listen() { - const _addMap = (arrayIndexId, val) => { - const map = new DCMap(this.arrayId, arrayIndexId, this.dataClient); - this.dispatchEvent(new MessageEvent('add', { - data: { - arrayIndexId, - map, - val, - }, - })); - }; - - const addKey = 'add.' + this.arrayId; - const addFn = e => { - const { - arrayIndexId, - val, - } = e.data; - // console.log('dispatch add', {arrayIndexId, val}); - _addMap(arrayIndexId, val); - }; - this.dataClient.addEventListener(addKey, addFn); - - const removeKey = 'remove.' + this.arrayId; - const removeFn = e => { - const { - arrayIndexId, - } = e.data; - // console.log('dispatch remove', {arrayIndexId}); - this.dispatchEvent(new MessageEvent('remove', { - data: { - arrayIndexId, - }, - })); - }; - this.dataClient.addEventListener(removeKey, removeFn); - this.cleanupFn = () => { - this.dataClient.removeEventListener(addKey, addFn); - this.dataClient.removeEventListener(removeKey, removeFn); - }; - } - - unlisten() { - if (this.cleanupFn) { - this.cleanupFn(); - this.cleanupFn = null; - } - } -} - -// - -export class DataClient extends EventTarget { - constructor({ - crdt = null, - userData = null, - } = {}) { - super(); - - this.crdt = crdt; - this.userData = userData; - } - - // for both client and server - serializeMessage(m) { - const parsedMessage = this.parseMessage(m); - const {type, arrayId, arrayIndexId} = parsedMessage; - switch (type) { - case 'import': { - const {crdtExport} = parsedMessage; - return zbencode({ - method: UPDATE_METHODS.IMPORT, - args: [ - crdtExport, - ], - }); - } - case 'syn': { - const {synId} = parsedMessage; - return zbencode({ - method: UPDATE_METHODS.SYN, - args: [ - synId, - ], - }); - } - case 'synAck': { - const {synId} = parsedMessage; - return zbencode({ - method: UPDATE_METHODS.SYN_ACK, - args: [ - synId, - ], - }); - } - case 'set': { - const {key, epoch, val} = m.data; - return zbencode({ - method: UPDATE_METHODS.SET, - args: [ - arrayId, - arrayIndexId, - key, - epoch, - val, - ], - }); - } - case 'add': { - const {arrayIndexId, val, epoch} = m.data; - if (typeof epoch !== 'number') { - debugger; - } - return zbencode({ - method: UPDATE_METHODS.ADD, - args: [ - arrayId, - arrayIndexId, - val, - epoch, - ], - }); - } - case 'remove': { - const {arrayIndexId} = m.data; - return zbencode({ - method: UPDATE_METHODS.REMOVE, - args: [ - arrayId, - arrayIndexId, - ], - }); - } - case 'removeArray': { - return zbencode({ - method: UPDATE_METHODS.REMOVE_ARRAY, - args: [ - arrayId, - ], - }); - } - case 'rollback': { - const {arrayId, arrayIndexId, key, oldEpoch, oldVal} = m.data; - return zbencode({ - method: UPDATE_METHODS.ROLLBACK, - args: [ - arrayId, - arrayIndexId, - key, - oldEpoch, - oldVal, - ], - }); - } - case 'deadhand': { - // console.log('serialize dead hand'); - const {keys, deadHand} = m.data; - return zbencode({ - method: UPDATE_METHODS.DEAD_HAND, - args: [ - keys, - deadHand, - ], - }); - } - case 'livehand': { - // console.log('serialize live hand'); - const {keys, liveHand} = m.data; - return zbencode({ - method: UPDATE_METHODS.LIVE_HAND, - args: [ - keys, - liveHand, - ], - }); - } - default: { - throw new Error('invalid message type: ' + type); - } - } - } - - getImportMessage() { - const crtdObject = convertMapToObject(this.crdt); - const crdtExport = zbencode(crtdObject); - return new MessageEvent('import', { - data: { - crdtExport, - }, - }); - } - - getSynMessage(synId) { - if (!synId) { - debugger; - } - return new MessageEvent('syn', { - data: { - synId, - }, - }); - } - - getSynAckMessage(synId) { - if (!synId) { - debugger; - } - return new MessageEvent('synAck', { - data: { - synId, - }, - }); - } - - deadHandKeys(keys, deadHand) { - return new MessageEvent('deadhand', { - data: { - keys, - deadHand, - }, - }); - } - - deadHandArrayMap(arrayId, arrayIndexId, deadHand) { - if (typeof arrayIndexId !== 'string') { - debugger; - } - return this.deadHandKeys([arrayId + '.' + arrayIndexId], deadHand); - } - - deadHandArrayMaps(arrayId, arrayIndexId, deadHand) { - return this.deadHandKeys(arrayIndexId.map(arrayIndexId => arrayId + '.' + arrayIndexId), deadHand); - } - - liveHandKeys(keys, liveHand) { - return new MessageEvent('livehand', { - data: { - keys, - liveHand, - }, - }); - } - - liveHandArrayMap(arrayId, arrayIndexId, liveHand) { - return this.liveHandKeys([arrayId + '.' + arrayIndexId], liveHand); - } - - liveHandArrayMaps(arrayId, arrayIndex, liveHand) { - return this.liveHandKeys(arrayIndex.map(arrayIndexId => arrayId + '.' + arrayIndexId), liveHand); - } - - applyUint8Array(uint8Array, opts) { - const updateObject = parseUpdateObject(uint8Array); - return this.applyUpdateObject(updateObject, opts); - } - - applyUpdateObject(updateObject, { - force = false, // force if it's coming from the server - } = {}) { - let rollback = null; - let update = null; - - const {method, args} = updateObject; - switch (method) { - case UPDATE_METHODS.IMPORT: { - const [crdtExport] = args; - this.crdt = convertObjectToMap(zbdecode(crdtExport)); - update = new MessageEvent('import', { - data: { - crdtExport, - }, - }); - break; - } - case UPDATE_METHODS.SET: { - const [arrayId, arrayIndexId, key, epoch, val] = args; - // console.log('apply update', {arrayId, arrayIndexId, key, epoch, val}); - const arrayMap = new DCMap(arrayId, arrayIndexId, this); - let oldObject; - if (force) { - arrayMap.setKeyEpochValue(key, epoch, val); - } else { - oldObject = arrayMap.trySetKeyEpochValue(key, epoch, val); - } - if (oldObject === undefined) { - // accept update - update = new MessageEvent('set.' + arrayId + '.' + arrayIndexId, { - data: { - key, - epoch, - val, - }, - }); - } else { - const [oldEpoch, oldVal] = oldObject; - // reject update and roll back - rollback = new MessageEvent('rollback', { - data: { - arrayId, - arrayIndexId, - key, - oldEpoch, - oldVal, - }, - }); - } - break; - } - case UPDATE_METHODS.ADD: { - const [arrayId, arrayIndexId, val, epoch] = args; - if (typeof epoch !== 'number') { - debugger; - } - - const key = _key(arrayId, arrayIndexId); - if (!this.crdt.has(key)) { - const crdtVal = convertValToCrdtVal(val); - const crdtWrap = [ - epoch, - crdtVal, - ]; - this.crdt.set(key, crdtWrap); - - let array = this.crdt.get(arrayId); - if (!array) { - array = {}; - this.crdt.set(arrayId, array); - } - array[arrayIndexId] = true; - - update = new MessageEvent('add.' + arrayId, { - data: { - // arrayId, - arrayIndexId, - val, - epoch, - }, - }); - } else { - console.warn('multiplayer ignoring existing app add', { - key, - }); - } - // console.log('add event', update); - break; - } - case UPDATE_METHODS.REMOVE: { - const [arrayId, arrayIndexId] = args; - - // remove from array - const array = this.crdt.get(arrayId); - if (!array) { - throw new Error('remove from nonexistent array: ' + arrayId); - } - delete array[arrayIndexId]; - - // remove from array map - const key = _key(arrayId, arrayIndexId); - this.crdt.delete(key); - - update = new MessageEvent('remove.' + arrayId, { - data: { - // arrayId, - arrayIndexId, - }, - }); - break; - } - case UPDATE_METHODS.ROLLBACK: { - const [arrayId, arrayIndexId, key, epoch, val] = args; - const object = this.crdt.get(arrayIndexId); - if (object) { - if (object[key]) { - object[key][0] = epoch; - object[key][1] = val; - } else { - object[key] = [epoch, val]; - } - - update = new MessageEvent('set.' + arrayId + '.' + arrayIndexId, { - data: { - key, - epoch, - val, - }, - }); - } else { - throw new Error('got rollback for nonexistent object: ' + arrayId + ':' + arrayIndexId); - } - - break; - } - case UPDATE_METHODS.DEAD_HAND: { - const [keys, deadHand] = args; - // console.log('handle dead hand', {arrayId, arrayIndexId, deadHand}); - this.dispatchEvent(new MessageEvent('deadhand', { - data: { - keys, - deadHand, - }, - })); - break; - } - case UPDATE_METHODS.LIVE_HAND: { - const [keys, liveHand] = args; - // console.log('handle live hand', {arrayId, arrayIndexId, liveHand}); - this.dispatchEvent(new MessageEvent('livehand', { - data: { - keys, - liveHand, - }, - })); - break; - } - case UPDATE_METHODS.SYN: { - const [synId] = args; - // console.log('got syn', { - // synId, - // }); - update = new MessageEvent('syn', { - data: { - synId, - }, - }); - break; - } - case UPDATE_METHODS.SYN_ACK: { - const [synId] = args; - // console.log('got synAck', { - // synId, - // }); - update = new MessageEvent('synAck', { - data: { - synId, - }, - }); - break; - } - } - return { - rollback, - update, - }; - } - - // for server - parseMessage(m) { - const match = m.type.match(/^set\.(.+?)\.(.+?)$/); - if (match) { - const arrayId = match[1]; - const arrayIndexId = match[2]; - const {key, epoch, val} = m.data; - return { - type: 'set', - arrayId, - arrayIndexId, - key, - epoch, - val, - }; - } else { - const match = m.type.match(/^add\.(.+?)$/); - if (match) { - const arrayId = match[1]; - const {arrayIndexId, val, epoch} = m.data; - if (typeof epoch !== 'number') { - debugger; - } - return { - type: 'add', - arrayId, - arrayIndexId, - val, - epoch, - }; - } else { - const match = m.type.match(/^remove\.(.+?)$/); - if (match) { - const arrayId = match[1]; - const {arrayIndexId} = m.data; - return { - type: 'remove', - arrayId, - arrayIndexId, - }; - } else { - if (m.type === 'rollback') { - const {arrayId, arrayIndexId, key, oldEpoch, oldVal} = m.data; - return { - type: 'rollback', - arrayId, - arrayIndexId, - key, - oldEpoch, - oldVal, - }; - } else if (m.type === 'import') { - return { - type: 'import', - crdtExport: m.data.crdtExport, - }; - } else if (m.type === 'deadhand') { - const {keys, deadHand} = m.data; - return { - type: 'deadhand', - keys, - deadHand, - }; - } else if (m.type === 'livehand') { - const {keys, liveHand} = m.data; - return { - type: 'livehand', - keys, - liveHand, - }; - } else if (m.type === 'syn') { - const {synId} = m.data; - return { - type: 'syn', - synId, - }; - } else if (m.type === 'synAck') { - const {synId} = m.data; - return { - type: 'synAck', - synId, - }; - } else { - throw new Error('unrecognized message type: ' + m.type); - } - } - } - } - } - - getSaveKeys(m) { - const mo = this.parseMessage(m); - const {type, arrayId, arrayIndexId} = mo; - - const saveKeys = []; - const saveKeyFn = name => { - saveKeys.push(name); - }; - - if (type === 'set') { - saveKeyFn(arrayIndexId); - } else if (type === 'add' || type === 'remove') { - saveKeyFn(arrayIndexId); - saveKeyFn(arrayId); - } else if (type === 'removeArray') { - saveKeyFn(arrayId); - } else if (type === 'rollback') { - saveKeyFn(arrayIndexId); - } else if (type === 'import') { - saveKeyFn('*'); - } else { - debugger; - throw new Error('unrecognized message type: ' + m.type); - } - - return saveKeys; - } - - emitUpdate(messageEvent) { - this.dispatchEvent(messageEvent); - } - - // for client - getArray(arrayId, {listen = true} = {}) { - const array = new DCArray(arrayId, this); - listen && array.listen(); - return array; - } - - getArrayMap(arrayId, arrayIndexId, {listen = true} = {}) { - const map = new DCMap(arrayId, arrayIndexId, this); - listen && map.listen(); - return map; - } - - createArrayMapElement(arrayId, val, epoch, opts) { - const arrayIndexId = makeId(); - return this.addArrayMapElement(arrayId, arrayIndexId, val, epoch, opts); - } - - addArrayMapElement(arrayId, arrayIndexId, val, epoch, { - listen = true, - } = {}) { - // if (typeof epoch !== 'number') { - // debugger; - // } - - const crdtVal = convertValToCrdtVal(val); - - const key = _key(arrayId, arrayIndexId); - const crdtWrap = [ - epoch, - crdtVal, - ]; - this.crdt.set(key, crdtWrap); - - let array = this.crdt.get(arrayId); - if (!array) { - array = {}; - this.crdt.set(arrayId, array); - } - array[arrayIndexId] = true; - - const map = new DCMap(arrayId, arrayIndexId, this); - listen && map.listen(); - - const update = new MessageEvent('add.' + arrayId, { - data: { - // arrayId, - arrayIndexId, - val, - epoch, - }, - }); - return {map, update}; - } - - removeArrayMapElement(arrayId, arrayIndexId) { - let array = this.crdt.get(arrayId); - if (!array) { - array = {}; - this.crdt.set(arrayId, array); - } - if (array[arrayIndexId]) { - const key = _key(arrayId, arrayIndexId); - if (this.crdt.has(key)) { - this.crdt.delete(key); - - delete array[arrayIndexId]; - - const update = new MessageEvent('remove.' + arrayId, { - data: { - // arrayId, - arrayIndexId, - }, - }); - return update; - } else { - debugger; - throw new Error('array map key not found in crdt'); - } - } else { - debugger; - throw new Error('array index not found in array'); - } - } - - readBinding(arrayNames) { - const arrays = {}; - const arrayMaps = {}; - if (this.crdt) { - arrayNames.forEach(arrayId => { - const array = this.crdt.get(arrayId); - const localArrayMaps = []; - if (array) { - for (const arrayIndexId in array) { - const arrayMap = new DCMap(arrayId, arrayIndexId, this); - arrayMap.listen(); - localArrayMaps.push(arrayMap); - } - } - - arrays[arrayId] = new DCArray(arrayId, this); - arrays[arrayId].listen(); - arrayMaps[arrayId] = localArrayMaps; - }); - return { - arrays, - arrayMaps, - }; - } else { - throw new Error('crdt was not initialized; it has not gotten its first message'); - } - } -} - -// - -export class NetworkedDataClient extends EventTarget { - constructor(dataClient, { - userData = {}, - } = {}) { - super(); - - this.dataClient = dataClient; - this.userData = userData; - - this.ws = null; - } - - static handlesMethod(method) { - return [ - UPDATE_METHODS.IMPORT, - UPDATE_METHODS.SYN, - UPDATE_METHODS.SYN_ACK, - UPDATE_METHODS.SET, - UPDATE_METHODS.ADD, - UPDATE_METHODS.REMOVE, - UPDATE_METHODS.ROLLBACK, - UPDATE_METHODS.DEAD_HAND, - UPDATE_METHODS.LIVE_HAND, - ].includes(method); - } - - async connect(ws) { - this.ws = ws; - - const _waitForOpen = () => new Promise((resolve, reject) => { - resolve = (resolve => () => { - resolve(); - _cleanup(); - })(resolve); - reject = (reject => () => { - reject(); - _cleanup(); - })(reject); - - this.ws.addEventListener('open', resolve); - this.ws.addEventListener('error', reject); - - const _cleanup = () => { - this.ws.removeEventListener('open', resolve); - this.ws.removeEventListener('error', reject); - }; - }); - const _waitForInitialImport = async () => { - await new Promise((resolve, reject) => { - const initialMessage = e => { - if (e?.data?.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method, args} = updateObject; - if (method === UPDATE_METHODS.IMPORT) { - const [crdtExport] = args; - - const importMessage = new MessageEvent('import', { - data: { - crdtExport, - }, - }); - const uint8Array = serializeMessage(importMessage); - const updateObject = parseUpdateObject(uint8Array); - - const { - rollback, - update, - } = this.dataClient.applyUpdateObject(updateObject, { - force: true, // since coming from the server - }); - if (rollback) { - throw new Error('initial import failed 1'); - } - if (update) { - this.dataClient.emitUpdate(update); - } else { - throw new Error('initial import failed 2'); - } - - resolve(); - this.ws.removeEventListener('message', initialMessage); - } - } else { - // debugger; - } - }; - this.ws.addEventListener('message', initialMessage); - }); - }; - await Promise.all([ - _waitForOpen, - _waitForInitialImport(), - ]); - - const mainMessage = e => { - // if some other listener hasn't consumed the message already - if (e?.data?.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method} = updateObject; - // console.log('got message', updateObject); - if (NetworkedDataClient.handlesMethod(method)) { - const { - rollback, - update, - } = this.dataClient.applyUpdateObject(updateObject, { - force: true, // force since coming from the server - }); - if (rollback) { - console.warn('rollback', rollback); - throw new Error('unexpected rollback'); - } - - this.dataClient.emitUpdate(update); - } - } else { - // debugger; - } - }; - this.ws.addEventListener('message', mainMessage); - } - - /* disconnect() { - } */ - - send(msg) { - this.ws.send(msg); - } - - emitUpdate(update) { - this.send(this.dataClient.serializeMessage(update)); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/favicon.ico b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/favicon.ico deleted file mode 100644 index 184540c7032f710b02aaf3c88ec5e36ac0de3534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 zcmd752V9g#*FL`CQT7UP*e~BQL2cF*gN)KV(&E?6QeP)#1czvQIn{#V~w%J z*kX-|iN;i;F>356*LR)Sy%8)a&-1?j@8$Qqn0xCz=ggTiXHJ>b>GV2tUG3UBwt>0| zb#%IPolX}WZG8Mes7}|H&jkjW9y{xFp51jiXSVYG?&dn(?qNDz1%8HKp&LiY^Xjj* zPUmW8gz*WTE<7Rz&)_j1uO<8m?QQ?KH5d#!!kI`VMiFoQU&b@EYrJ^E=RYR02`A!j z=_idsw++#V*i2kE81#<`ybOB2rZ*V=JLnBC{1+f?8qLqPclcUA!shSjC#^zz05O}m zMUZAQ!V+dCn6njFm|)4)ijdaQU}1teTY;Gg2DXHm3Fd4C7A9D-EddK&3(QS0V=FKe zgMG3Tn44fBG`~rRyq_bA2#pVa@H&_9F~N$h%$HKKKw5?N5Mmqggdp8Ij%gTd^o!u9 zUxpYWooG$;BPQvVVU}Sr7MRb*`})_gOgEJ1ie>tyL@H602;y_jSVmfxdFrq%T#sdm zL?fazF^qUakN4lxW9~9NCKH2*PDEp(Hc^@ICmfcsKg+D3TjtF+f=DD95&1%^fe_ka ziLVKberbOqE)f@qB}6U4oKQRc(tK-h%HM=pGWZ9i)g;DwxB9^%yu> zkFKNiXh~!f$wUkhLU<9jgkh8=^rPH}aztfcn+GWMmx5hex4R>NJevm^Y{~R>?(BnHsP# zw<7!G{2=|&x(X4M{VGI6pEuH9!d zJ!!Teq?M<2u`#K-gldiLsz%pco0l>MjcN~nO#M(4Rw1fLXni41BFQ5Gc_Ocqcc>fR z0VA6qLg&n-aCI(&vhI->nzs)VTAxA3v?Xw|^LpX@c~O7=r=L@VzTltmfT&KqJ1DQ< z{FoNUIA#Z*q{Ov(TrRjg92}g$HGtzBrp8_5xwu&E)PA+hCa)yhmJA9}UME;F35`(btO7QY73u|lY2n!oH z+xxJ!erDW_>qSg(Bd!Z^rSz%j(wCt$|4QrNzk97D{UvCx$LpP37anljpJXI-e-u-> zc2R@m!9{iB^AT9C0@rkl7xvHI#tn|Po{%*`_)^B(4`CH570W|#XhpcXdBEJ<+(i3R zohP2WTqor@_R$Er)}TGd_C;&YU(s!Rzwy2=p+AxI9~{&2_~mvP zZ{MyQl~5$I9a*Uc8YT}#ctA4mS$dt8@3gUUMB|#TqGi%sa3CMF_sCokov6(V(Uk## zp^6V&Kh=66{T1581`ypauGL8-MRZYg3$GG`s-SCZV|1#Ti_TT^kXs=Y3BFahKd?~m z`KLUvFt>!vKPwAcjkhIPp!7az*H37D)^$Mc=CDeY;ua}AM*3^lXw7x&bL7>W!u3kz z-zbyX_*j_RaQxzkcz(bA({bY%iM)uu(B_1uA4E0+%Y~^qBQ~P+D>b?wa^ogaj=U&G z24t77g^$x;#jbiYv9sPg#2jqTnuCq$@1Rw1HuqKL|A+^&-?X!FLHoK3&^Ue)A_CIn zb1(g)9v2%Roa^9Gu7gOZmWScZ_AB{JjOeK5F+Z&KXXRWS5a{NFV0VEFLfl;u?BRhR zcMm@HBwZFtPOUj7-1yi(Aei$aiZT(cAbgS6WE`z5DHCSaY7PnQ>xA~qx3DAgZDJNN zmza;8S?^&>#(eT1=O6JvzT3gZUCpfttxt0-kNhS5mX=n+8%yf5C9-ZuMpj3wv}qX0 zwYz?`QIr82?q_vq5$cYmX%(UTW3enF0V~o|uskyhD>8DiD!n;cN7p0|EY&!P ztcy&`yojj4wIQw@sz#?O88A1qL}WlFd0>x>&^Sf=PL1{q(w;%uGv*Nsu_J3SdGJ1Y zuoz7#2lBmtHxI-fO^WQI#!%+iO9!7X@cRUHDCbv$17Z*rm4JxwIJJ(6o-?OB3GHjs zLfOvqM#c7{ z{jBNK(rbY7vrxBa>#8N^Zq<;+7}n&om(p*d-HGiw`Mm65TBW@XfBz8f>9{we+y}Wk zbIcR%g^d_7%LL>`>%%Ai)o4yYB85C5_i;O^;#n6Uav23|D&Cfa4}J96yr$$Bk1y^ zo&6CeB^c=!yTplhi0By4GG$T5#}_G8J7RQ;qr?};sM!PMD^{W{-U7p#?t9_*o9GW< zdz7GDS)z7y7iGtK`}k8YaX(MLRj`LEmS$8hmU$WXjddH~VBeAWFX>;6UD@k6SH{D^)&bm;s&!VgyF|a%tJPQOI@xbDsWYB7 zY7{C(#iK+0`OndBqMeOl0#QULo#Nr?qrTUttUufw{ZPJa3PL>G@IG~&%y%X8sSR*| zwEubehvI(9#iQGIac24l?CW6CKa}G+5}UF{qHT1#;z33KG^E9KM@B+7qPn&@G}cY|K3vcKfYgxBd_e@cdo_G`k!EO(s~xzXs|4UT9a4IYgNfyT#YP9Ll(cA|^Nwp`IRC zo>52XI+^d=a@ymUeMd^su00SQoSpF@`#X~KjKDiXK1Fz7CHcaQsJn#<}$|>ED9aQl`Mc&H-*7UJCa1 zj+NPCIp^P_HW@IWoznQwOpiy^R`{HzQAD_K=bo(B8u%0?=JY`@ac`$`Mn2feD z+4K!r!^15Q@l|q>m-s4W*$qRgb)n6(ggje4N4PKHzC~mz zI3!%za^_t7gK68W;u^P=Yuwg!>iLW=_15IEYoqkk;tf4ybo*D}(7kovE%_`4q8e~cr;4`FM)t=Qgh55^=;;#_)m zKlQZ#%C|z_pDx}RQ45Dr-@Z*-JNjAry-53~gi-E`TiW)t&1C$8gnsV%MF0C!$1bSX zLapzz#%;^&fzSF+#r0EP7x(i;7mse=$C+uHN&hs`HUm3p*KMlz7J1N+a$pM&$6(md z2AouL5ZAVq)PKu4{|}b>Dv|#qBfr4r>>b$Ba37|m%~bL){d&ItCFrp;hecEwSlZhw z8Ikpm@7FMp*M;)=l6I6@LrwEv>{MIsS>!pfY4c(euso+TdC)_xaoaNckq2**2Nz5A z_t^*6j(>+e&1G#9`(_q-@Gf~Un>@&+92k9Q1C;!)qO5#?v(t~LIj?=s<9m;BaL^an zSbsM*H#&$BiLWVLDtoBEqF-#Eq>7zs&%DAp=B~!yM1KU^ujI3`-iuF0u4N9<4pw?q zTT^5Y>*g-6n<-l+FE$A)a(ZxmGp=#lGY4V+fVatmZ?*0|*WNh)6LvS5OWidGJF~@} zokt$LM;^>45AxKWFsob&w$xir{;a{7H;>>+VQKw$c=VUpkh2e;G(LjSb!NbhI?BP( z8J1S`C31YE|0SWuk#zNMumxjV9!COgBEBwTZ%NFN_X_`_gBqY~#tKvl%u;?yFWM0r z?Z#I8eU;(t;-=<-*!4|flgWd=)YXHCq14MG$%8q#e)`gLw96B>f4YWGJ1)ZU>05Aq z&VKUXJ<_>I+4GyS7okJd=E$$o5}WI-Kta}rIQ{0)=jcB;>J-*BJcRXm$1#HRi(L9~ zUnM$P{I13rTxlK%Z6lf;;(B;m?Ey{nr?b5#^oxxgRyGL(X_pOedJxshH=$3n{4?|$ z{aPU*k#Mp%`tFQ8NWsdSfu!HK#uadV+dp6dd2snT9^Crj8uqqdf>R6j;L+WOM@%C-1mWR8UT)b`9`d@UQ z$bjsJYgEZb$MnTqyVFeifO1f+E_om}j&Y4E;QF?|?;>3J8)@@UUF`a@?h)ug-qQz! zxbT*0{~)w`czP@TNGtr6J%ren;=ixpS6h8v`yMqHs-=?$pVwAh178?I3I6_t9M(7$usCA{D4D=cgE9bV!3AvT)kbCmIv$Ff#w z^h+ypAifv&^+%$vykGV+ozj5s^Py7P=`X0gk>o1U#2TxEi{tA{f z{{~Cie2)R#BbB6I#zN>6KU+!qD^Ql{UnpY#rgDvx_%(T9MxSVT3`m%R$<2;FrJuZz zy@=Qe;_vCgHBt7Ej1AIuUZ(aHuQV#4uRi`c`sI6{@}M4h@FsacpH=2!&g-S*!DjN{ zYN;_T`QQonI-kG(B|aN`0uOIJ)%)6e9&!A)j{gzwwfq)~+Wv?>^aEOR?=SZ>(j;^- z|DkL}WYy}8%2Bn*2k|w=h%fqk#$hXR{g$<#F?Qw(=v{EYvK>B&TSYlIh4Ci;U}Qjs zTH`&O$}vX0TkWG|KkZ#6koyg1r7vu(9Mrv@-q)y0pYp(pIfy0o?kML4dJcs?`zbd8owKo(#D8lAff5p7kS1`Z*ujrq%OxZsr=b_AP$uX!?wTtqt zNi4ETbV^avI^%EAx8I!c3>yDBWLZ?kPlnMLWS*exUWrS|p3z#Zk3yFYkwJBpzONjW zNFT~Lq(u)<`$>6CXj7n_EIvqqHLt~vmpG6m_e=6v_W8}L=h9|fLLa`Y?;m1&&N}QL zy$8R4bzRwaBKMEE&Of?ah(oi!LcuHNaPRsHRH)!3J(--mPIE_K)w>a`QpaaFwxF4$=piaq9i;98qVmyDx^vb;6)(`SeE(qEBWZdd0NGq{P9PT6-kwh18)< z+p5^EQ|r5|arA%f?z#^L#~jDuIbUMms596z;vBa2Ig3kse%FS)RQr(hubXfUv)lfR z+4>w8K0*XCcaU#wcM7`sMV&Cd6zw;z-CBI4M1eLMVYJ`XKCl3}oroVBNO zSGz8zpLS1K`qyOttHos`HX%OhU0LrCbBKAw0%8&O?n~AFeHZ0@H*ML?*~@6pQ}$`o zmb7hTeLpztI1Y_I#rb|7pN;(r`zCy&XqS2LqQ6J?i}3NJ-|=?4t9Ym54Ro!ySgq|P z>DSh_t{E#Cw>j{nc8xXV{X4GjkM0!G zzwubD^Rl*!tylD7(iJ;|{tsWhfw$UU!^}=M(Yw(HYX2v?M(elOb9JNpsC9e<>918S z?}_+6dV*N@=zwBz`4 z+DUvl{fx5fO4{`=8tWH5C-T2$(jS=7;X2;xd>h>xtWZ808FORbC6;cd*6)d}&lWL; z|1c`5CUd!>f9KxiEMr*@sS6)v>f@AMEO7_14^6g_`VQfrpGTC+*Akg`r*Bc{&kL_Z zpWJkgE$uo}T;|r-#&t}5)Fu5?h4-ktOyekYir-qsS)S9{7t!~3&pjahD<|B-oB1~| zy~`c6V?0dqj!MeE*fkLWsgGNxzWyjaw&4@eU0m}do*P6yd?b%$uP6Kxe};^&@*VK8 z@X^JgEP8UT=5sBSJT}n-I?6-SifNQ%qu)mCx-08n?(_URI{wqwA5#85m~tC$bi9da zUGJhRyMtM$TK8C&mv3GlN zowBudQoNP<)gY`keSKon&*j{nM_=BjDE#y3KJGuI>EC=#=wJ2P9Zc{9QS_t6AymBhle-ri=itpEka3 zEMpd}N#_GX=s!bv6GFe9=vk6(?ON!R{G15?RJAWK=H?mKMH&Cfp5^gD${Sqc=(EaN zOdc%dexCMh_s#gcZvhVXF2JGQJ8`Jb9vmLHA4kU>!~TAsV_*NHI5g%oKBeDgNB=X} zHT(khO!yAFCS1nWQQu?R#2>MF!q3<=@mH)HcNH5ZU&Fe|zvF{(H?VZr4Xm1YOUb;9 z`{HqTF|FqvOrh*g>HY|9={u6#!xHoVIQ#0yu}>wPHwmHtB2j@5`UT?qG3m?aTbWCx z=M(3JtS`*PO)FayYwJorhS8qiL7$bxA`4`VV@yioGTZCXwxNH1bNwCIn6n3;G}x#7 zb>g#HOTUfyE@c0{jC)ww$H`ts?0K=gLKz{C8+9tC9Q|sR++zY#K z>}!(FrG(@x7ZTqR0|^V_Kc-*!qVb@vZ!HXs>4gC`x?@09BDN|08Oh^Pem z=)NbN+PGim^#MZ3zapOhUN*-6`O9*vFF!iUS+V5DoixE+0S zHZrE4$vI`r376OZry%y1#Ge98e!P<3EBRR`05Gav2h%tPChxo8+SjxmNtoaZn1i~XDX z$a{r;$!SnA80HO1K7u@F`ktF?rS49~Q%66Cpg!&UKTY(1!B*_Ol0$F2mYSSWkh&Xz z_ytY)oBA7ro;t|P$plB%)|m1!i|cME`>O7S{e7nXrerP73$JB8Q)?RYEUD`xo+C6# zj6-a86a9g%DSzBW;vh$PApUW5ZWQm=Qk*Q28s z5lpcDs$)$eoyaBH>e03%>&=MFjyfa~Rf%vu4j?=TTf)$hd3hZj3D%!=3?`z8cp{Z( zNVI~!eMjh<5LrYb5krI#K7?Z@7|g3f=DUYS8AZRupCreNG+!pFX|xLiG&R`5!`4Sr$C*8=}yN%49-q?ibPK+YnB9=q{(I?Q)+X($6 zqA$^ss7piTL;39upz7oOTvOM zBUlYgP*$CpGw;mUyt55qOV|^fFV56u&dx9}c5h(*r@@Y}Ay^+}uq4cxyTksGMg=Vf z$93Qb)*qD*D__Y-^fUiSr|>}PH|G=g2{51gYLA?iVBpq!BvF=lhVrKmH*PD1ROrv$&?N?s={==XYq z_COJR|Bp>^z8n9S>6X5UA11&vrf5jsr|46E!(qlVf~^>~B0V#S&4exS0;)?tCGX+* z*JOU}HP&!EVeaci`hS<|@xb`Tv6oHlUSk_D&e*CHc%5#qNxfV)KC9bnY7f1nEiyg- z*wmWtqI&;BBYpsdCMHN@wH=F5{c zeI(&axDw*eQ*^Me(s!{5S`b$V_M3ZUeK&aP$0ABU2B}0#qPKoDhMEt-XudW|*Mw~< z#_;@sF|-56=$$ZzXD5vD)?-X1B86y5&;}YcLXW;<^k_rWBjSnjga=_UhI`*JE(B{O z#xPDiCR2DXHiswiF` z=j)L{#1oN(KjA`{=d=I$4umg3n=L;MLFI#W^d;zMceZCA#ikVg%Q+z$EsuD;fp%Fe zV<^7t_kpKmV$8B(Hqp?Y{Lypp$@ab})LK%H;ggP3GU z_8;6!{2eqo;^>!<9m*`#>x5QkboFZW(e=yyq*;2+t_!&*?#%vnC%!I0gXFn=@8=)1 zo4%LgJXp2Q(z7q@mz!e%x-oVi6`TnV7k`yAB=vNX1J{9dWs)aRVqeB_Gt&OwwzO4r zV_FKq8opQG$?%A5B1zwNtxUhBW~n~-tvr7SJtnGa~0_Ilwfjki5veY=Wr%KI%C zOOSk8dk06tLDlB@`3D>6p}hG81Sx-nJ?j)CS45L}@juIakQzHj$%`W$0^YwAwD%968F>MzS7U?Va-*ZS8}DUs?WB}3n=dyh>BjU*>n$tCu{R$kMnmlNUg2p zk}G{?BEZCd9c#VPfSy+%bbGsth4xtxu^@0#-Wy174>~D zqe1#0=ae+8F%IE=b>zLz{e_i}(uIXb)#m-LR>b`N#K*o#4RdKKA8#61mAE;o}p?@6w};qb=s7gkeKQCDtZZH`b@6u}&$q3AUuR zW1T`btV-)l8Y0xa<@^ot*~%Fe@l_kDTqheF2j(s{C9h{;SA%(s@t?wD<}&cvvy@p zq_-FQPrCh`9k4hpnstSyzNcnlciWyg)PEul^q9c7VjopYxhkzE5=n!Xb0~T-SGrH5 zbt=zM>h!%m!_YcBi@cwW{T)`~?hiLrc)jRJ5zfB#Imci%)?~cL8m4lvqmGl>bgAtN z2na(yV^AV9a%KztCFsi7>I-=9$NqmI?EhMv4pB`6rY;p343wf3inGzgikQuPn8ERlPx=H;Q`+HiaXX<|}+be{cH=?`c+!@JjcCq(E1uuWB zpv-JZZ-#<~-O2k4+O3OQq2c_jO{}$;r0Vcir;p`)s7k*cbyaK!L;`bR_m|hTeTl>wZmTuQWGjmP6Zw%fNXEjBap*n?tOd^MhV7iAJDU!}x9g;S z_jwxbUA=_^-C5(9_7-WFLz$k2q;kwB=XbYN{a=awoi?dl5{-b<@0`P?`g^c6djkU9 zpYOlWB4Z);M;!MRp3Xs9|2_EH9^tpt!bo1X&?@Vu*k}UD0h73^3vK3pwW#m2Sksj@ z06UwF#dqsJdya;}yASaB;MLgM;yvujS)k;7HT8Y1!0M>wUmY7W-p7H?+sOYrTK92! z?$_AR-~bloY(}6*C>*)w8PAh>YJ1C=l=n@BoV%0D`VtfW`_m>Y6n|jz#OW&De2_5*Gg2l}{#N7DcH400%2WA2Ip-dHHG#Xj{rz5E)emsPjLZS<~CURvz<4 z$6!bL1k&&(zFGDeZk+iMzn}XNza6`bL;XI)kK4~Pm#7dI=6^vNRxvL{@-aSExt4p{ z>|jmyQ~5tW_cGSzp1}Ov-OTHz-tePsN4|-z?o&2Eo#Q2QIG!=gq{z<7o@L)xiajpl zA~C=8Dz9*SlHlOvsQNEXhl&)p!m* zW&PK_{1y0W4r^O^rh)uPzTk!V$C*FE99hW|t+xsLdLF>NtM`lL=jgm2m^*VCvvc>- zt_@Z(5$U(|U+9pzD0Z&Q0X0wcdZ}-EAo==I+a$V`wlmt)orU=5#_CK23+8553abO! zqv|}4hVi3|YGJTTsw!7iI2y zl+5EjGXEzmZ~7Hx=Iw{Cn{ocC915PBRGv1u&>*?CjuHHpGy;J$!vP*T1c3%QFR4&K^I0#RCp~d=Bbf457YWr8w>CDYI zLz$^4vLpQORdFz;=N`mZ)|QA5USj96Z*7t=Rne5sJWiSKc?naLoGD$*{+Fg9A6x3P zW>oCR)*s;Vw(}}?UhBKop8Mb%oSgmjb9uxE7W~FstIK$U{r7PTD(=7ZF)Ea25!CFg zXpntLS-*fuU3v|r>qU=XgDdu1w8#9!Rpc@2=ebUc?I`+4YGbzLo_2fWTREqqJx zUu0cmBqwo@)OaXcFtui<892-Eq11SoH^x$nrnLFE?{f)NwGqNs7e^m7s5KOc)tjMy z{7{}f;Lf~Q1M3BC6r{GnhB-L4^jS$QgIv2gx?)IjZ|1SDrX92vyV`EVcUv#2x`oHg z0WM^Y@5!Z?aOCYvrDR{mX5Yda%y0V{Q+OVO&ok?n73;r)f-5S24)@~^>F4>Ld&c^W z3^j1XVicmyxwj&n#(8brC(2wG-C4eTG{3I`_f7WbQn?}CsyzTRk_Td9d@sCSYapg4 z4ac~+ewbN%9D2v(V?x3(=588u@kP&UZ@CNmhaJU%DW|Y!*jely`!#+$^HgtYa|v#L*`E1M#yuZ(WG2sgN@q<0&;Qs-TYYE75{RvYsSGe71UwFw1Hcj5fv zi}+#BRs68;8ZPg-jvL?J)4E)$-M#o0W-_O6QkygI^(tRN{tfC}PFZtvk_HyWR8B_c z>_tzwFDm-jFac2kQR-|7kr@p#7GnQM-LW10B|V~Z*)P+cugOAuIjI20S?BcS#9cV` z+CCf~y@&b2hjDV^K^z}@5XZ(H!O`)@ae4C(T$i8ML!~-yda&cY+su2vfeCHTmFU0m z>^M2wYDDvck9k(r6Xt;Y8XcARE9Lr81pV1AtX~!VBzdwj*G2C{1=dsck@yImsN<*C z>Wkgv`>qD>sy(0RMp;*-_FVQ(Dz}}v>(WaWuBQbtyVu}NA7L5 zwD`QBXYc>tJ}y{#7q55x6Jy$c1K%>?#qvY_cFV)F%y#->CD&5U43%?KCBCv*lNYTO zTBV+nF-=ulCjA$EGcDm2?zyFYWFh6I0DpdW!0QJ=P3AlMk{}~(4wtV?ZO)HtRFd>jI}RW%kWu;4LH3)Z|@`6H{=v{^gE4$f#7jrUuAhsCX~U}2k|Ft6ROm_r@&PKVzylR3-NnX^2NJfGU- zK3?m_+}$2eFrwr4^p6zlpVvadA|+o%VpF?f|{?@ma16GIcHU}EY5jA#A+@Hz`Hl6rM$#xe}dSdPKj zYgkXZ0{!Z*WnSaQ^h<6)&j#z!oo(kF#tRy-&E1UV%+qyo@)7=@bZ~Txq1-QHUnM># z@-I1Ok;K31ztARjf~>zz+@D1T)Mad?4(*Hp>MJYOp)e#rq!tG4tH+HtM3q8_tl zYt8vDIkED*=r(z5!)sgS-#R+FaG&SR+!06WYvXI8x0$Eib7&T*-wk>_NdXmdsA6o@WX*QVEu&l&lky+?8% zWsR5kg2p3hBLmVe^X%vaj73}+n73W*_v4J!d1-uCo&T5pm;TBAP3nGFJEhJJld~Wk z?L3S7{vw)R_MFfldqeg~`8dSZS2P&(*D9B*-(_N(b8if7vS%ap{$1*Q<|;==Ykb%G zZ;Un5eq`T_piNKu6(l~WLB$D~D{AM5x>5a*9XpD-$%9cfD35j#_xmcQ%(+x5M#wP` z9ioBbq;d|WWsFj;B^Dxk6Y(*Xpi|CFv0yAj@-02MP8|~(37Nx6?zR4h8GI3D@FH9Z z2f~^#Lm1=BVaz8Bb0x|UenhYV!C~AZhZ*1 zFb~3qV822`V4yGEAZOIk|7mb0YzgxK`ek^A4fp9{XNkSYet$#AnK!DRrv6GkfTsHs zO46`gKNQRL9f@or7RzuEH&^YiWodx9|s=J>fASkFiPyYqZ~cjorFGq2Cxfp8)? z7Ow8h?IRorJHnc25bhIwG`*qrRFwM{w!Fv7^7CGv zlSkPX9rPk_u8Hi+xfiYu%mvWvFH`;xag7z-?je0H`6rJ}aA#b1x%i@a?x55f^PG); zwtoF@yiZ~}jIn;>VB?XWqI{JI?f2YfTUT zy3w+_{`y@nf7O&5M;&ea)3UdoZJkW7n_9i8HJf65-fE($-D_$un_3btd0K%)Z9=c* zX*vI8p4Lws%VtFJ?{)B_N?%aMBv+idLHdo%NjbrOzXW+_IAG_+`f#`+XA)rq+_JyPoG zQ7ui6Fro}$OBm8vcb3Nd?zB*zkv~k=JauxN8dbB`&>oz_`~FG@FD~-jk@<`@shm@> z2{;_;e5uMI^$_G+4OPRM@SM?JsKQokrQ&s7)^@e7mu^evi?JX4KKcfA%i z;q~@cTszfUIJ14`>?bi%b&AA491<$Oi6G}_8P9&^Zww$cwg>z?E76}nU-^_}U!v7z z|Jy!@jGJ-{JlKZ?%=Ip8k@ngX@$<@AR$}uqe_EZh=;7g`&bE?1F$T`_1G!$w+QP9B zKboA0Bz=+dJk(hpTrcIdm-R`Fnd$zl!SUqp1q@BB-t_C(m^9SmUPS6)WXvrs>`;;C z%2-)CsCs&dJIe29NL`nl&1-382|1fAIkGzfoP97Xwk=+(*$0E8J0O^670Gv$?1S`C z&MT7~EWW1x0zw0Hf&LYBegWkMMpsHkm#n4Cu}MIng9X}F^hKviq39SHfewtD1iSKl zZssC*GB1JS1b;vNz5&m$529~k2Jb5|@I5&Tv4{1DvulorA8Uh!R%0KGa!fl`)kpc9B6H=RgfVXjS{1#l@e+gd<+{!)mN@N72C>}^Yi<}c2SSD7DXXAv4ihjAbfP87q z+?;!9)q29swJiLc7+0@b1)roPVQ0$@I6G@8PE2^0d)rsohxUjmTUnibQzyP1LPKMa z6`agE-Z}VrhcSNo{rU?$yJHPs#fr`C-$y^tY}@!}1N_>FtBEWrL6%H;`&#?;$SC+s-peUS}T$Alf$?(P0f)=U<;^kS*c; zzcb!{%VnN%yOrm-)Gr=?bxw|zJ-pLuqCxs3?f%iU*S;6Il>19wf#erBa}O~kiT;ty zo;W_~J=Vh;a}wmsC60Jv{5tI9Ii9nVMxcUc1=I~l;{8|Pm)%Am`1hNyU{ixV$O>(! z#-H@5?-yAtQ!WDKd~3-4t$E)?Vy}h!@thh5H&rt!dly$XPsU5V@Mi7S^idARiC0&! z4^Q(7F1)`V2Yar-b*YdsYY|w=8a*D(h}v|eHh>DMPKrpJcsaI z938cRXAz!M{!Q_Be!b{Ro*k|2NyNVa2JsV^+@Hmwgz>`S&i4Pu@;n z-qRSd^x^dE(>OEttKzuGh3z~Cpyk)7&74{47FG8vx?A!lnS1hxw2v`RS9dPk5;Gg} z{`{>5(TQ??8*>zyThT+s$z;rAKOx^yj&ovq$_VUWj?2ku`|#k8r#|x^4*bIS*e{B9 z`FC#nEi7z(35llrOB_8evMH*@)ZyN^^7nxO;o%j`%3z*FV`K#8F^8hQ()o!|?bR9F z-fm&A;vUFR{5JH>I9Rb3n*N+{?=Z}%JB4xEwKzfF_#K`b@rd!ai`##}w*|iy-~UX( zpP1Y3N7M>$Q7r#{Wh(M_32Gp>_J~{DEA@WIq7#~0S2NlV!iiyw4Gh_Z6T?5n7lZcU@ZdxEZr%4BgNHoxt&p+c((!nXS=XuKFlWw^Vhr1QvV7J{k*yj-T^*)9@JddNG{{?ItLLc%cnM@nrFPXJSX$r&(0g8 zs`SO1l)0I;Uc(HYH#t3NHl`%c!PHd#E@Ij$jL-ZCqq5dxc=jd?=DFqr8}7h>++951 zX*YW0?m>^HpQ0jj&w2l~%>V4jdwyqv{C=UVeNScYnQQ5fEoCOLVq3)1#&)3XU{9OO zmh;fThUW^%W43a3fgM}1Eu?jIDFffKA+V<$+3-2$&D^eCsr%seneQB9J>3`7fvtFN z`@g@xF(*@g-$vra?v8<+Lnfan`=;@$bW49WV^g85`b($bhZ%j9Q%SSL8DfNX!C=;C z4A$2qcwQoXO@rO_v|EY#L^nOU4dVGhL^Z;XupUgCdNBQ}gQE%B+k?A6-*XW34F^Nd zx^lhOE9^%Y*BD>=j=~->H>o>)FtV?a`$Z7vh|gG?QPJL4r}L(N(VPB7Z~7O#$p>%x z7rpHW7s8Xe$eX?`!hx_R%m{-wY4)Zc%bPwdZ`Krh@vK)D!k)17=6Y!_WAKnR#MjK3 z4ivwY&}xF5vvD*#vHzE>Ded|~Kh;b8Ql))T90!>zB_OilM4vN%Yv-D)llM^G=RM9h zPr0xBX?+L{56__PyFIGKk?*X=>2#XgftR|s2x<44Abym~ChTQ9&IC69=1)8(0=bnS zpXg5v6F&vr63RoNSO58dX~xh0?r`)E)LT19Lpi>K?rU9=nZaYfn?B~ZD2uqO)y>1N z#u^;2R<$==jSV(jjjUq0TBfT0szp_ctNN-QS9$hwL*}OL;CXJJGT&!7&;B`PK|f=V zGjpc`x**4&zo%j5h)~unhjNSqL#Pi!>4OZVoQFEg*{z

%A9ApZme^3bB&AR3v#& zRU&CGM0eqSG=_4=x^0dJyGL+-DxW#`hrI6H@I&3urh77SQ%3$&J}`m5iQve&6@;?P zLH6+pQg)~0N5yznMBTF0;bLVxKTFO9@o);_@8FfydAOEwi405rEGD=%I*0q=wfF?| zu9U#vzX?HXWJARGR>g6cY-`T=<-G{%rsWxR@!g8G zxbW`BJU2g|c{S~k8Qu^_rfk8@haQ(>{&7%H zIDe}s9_!kU$Mw%I;@AD((6%nXyp*Xp`r3ZnIDLmPwrSjBmw}UmyRuW6|8~16b9`dT zXVI_HgEdici1!J{8lIK=?aE{7Jh5+Ty}=Q?Or zWfXlTxk!oW3LhtbIB}iL3QWe;9`b)1MV?KvLZhgr)?*ES9+i)#yu$sSF*@%`~?Qq5bClkTJye ziPiIxsq^1qK83HZ!5O}cBlvQD`BJZX&_`!mmVO&wt|7jR%lI%R!+Se9R=Dq5Hdt~3 g{9096rel1uD}Q5kgXjqDZyYZ)XwUs+OMUYH0U_OA00000 diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/game.js b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/game.js deleted file mode 100644 index c853ee003..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/game.js +++ /dev/null @@ -1,768 +0,0 @@ -import {makeId, zstringify} from './util.mjs'; -import {frameSize, realmSize} from './constants.js'; - -import {RemotePlayerCursorHtmlRenderer, AppsHtmlRenderer, GameRealmsCanvases, GamePlayerCanvas} from "./renderers/html-renderer.js"; -import {NetworkRealms} from "./network-realms.mjs"; - -// - -// throttle a function every ms, queueing -const _throttleFn = (fn, ms) => { - let running = false; - let queued = false; - let timeout; - return (...args) => { - if (!running) { - running = true; - fn(...args); - timeout = setTimeout(() => { - running = false; - if (queued) { - queued = false; - fn(...args); - } - }, ms); - } else { - queued = true; - } - }; -}; -const _updateCoord = _throttleFn(coord => { - const u = new URL(window.location.href); - u.searchParams.set('coord', JSON.stringify(coord)); - history.replaceState({}, '', u); -}, 500); - -// - -export const startGame = async ({ - initialCoord = [0, 0, 0], -} = {}) => { - // locals - const playerId = makeId(); - let localPlayerCanvas = null; - const remotePlayerCanvases = new Map(); - - // realms - console.warn('need to port NetworkRealms to new endpointUrl API'); - debugger; - throw new Error('need to port NetworkRealms'); - const realms = new NetworkRealms('scene', playerId); - const realmCleanupFns = new Map(); - realms.addEventListener('realmconnecting', e => { - const {realm} = e.data; - const el = Array.from(realmsCanvases.element.childNodes).find(el => { - return el.min[0] === realm.min[0] && el.min[2] === realm.min[2]; - }); - if (el) { - el.classList.add('connecting'); - } - }); - const getRealmElement = realm => Array.from(realmsCanvases.element.childNodes).find(el => { - return el.min[0] === realm.min[0] && el.min[2] === realm.min[2]; - }); - - /* const onentityadd2 = e => { - // const {entity} = e.data; - // console.log('world app entity add', e.data); - }; - realms.getVirtualWorld().worldApps.addEventListener('needledentityadd', onentityadd2); - const onentityremove2 = e => { - // console.log('world app entity remove', e.data); - }; - realms.getVirtualWorld().worldApps.addEventListener('entityremove', onentityremove2); */ - - realms.addEventListener('realmjoin', e => { - const {realm} = e.data; - - const {dataClient} = realm; - - // console.log('realm join', realm.key); - - const cleanupFns = []; - - const el = getRealmElement(realm); - if (el) { - el.classList.add('connected'); - el.classList.remove('connecting'); - - el.updateText(dataClient); - - const playersArray = dataClient.getArray('players'); - // const worldApps = dataClient.getArray('worldApps'); - - const onadd = e => { - // console.log('game players array add', realm.key, e.data, playersArray.toArray()); - const {map: playerMap} = e.data; - - playerMap.listen(); - playerMap.addEventListener('update', e => { - // console.log('player map update', e.data); - - el.updateText(dataClient); - }); - - el.updateText(dataClient); - }; - playersArray.addEventListener('add', onadd); - - // console.log('game players array listen on realm', realm.key); - const onremove = e => { - // console.log('game players array remove', realm.key, e.data, playersArray.toArray()); - const {map: playerMap} = e.data; - - el.updateText(dataClient); - }; - playersArray.addEventListener('remove', onremove); - - const onentityadd3 = e => { - // const {entity} = e.data; - el.updateText(dataClient); - }; - virtualWorld.worldApps.addEventListener('needledentityadd', onentityadd3); - - const onentityremove3 = e => { - // const {entity} = e.data; - el.updateText(dataClient); - }; - virtualWorld.worldApps.addEventListener('needledentityremove', onentityremove3); - - cleanupFns.push(() => { - playersArray.removeEventListener('add', onadd); - playersArray.removeEventListener('remove', onremove); - virtualWorld.worldApps.removeEventListener('needledentityadd', onentityadd3); - virtualWorld.worldApps.removeEventListener('needledentityremove', onentityremove3); - - playersArray.unlisten(); - }); - } - realmCleanupFns.set(realm, () => { - for (const cleanupFn of cleanupFns) { - cleanupFn(); - } - }); - }); - realms.addEventListener('realmleave', e => { - const {realm} = e.data; - - // console.log('realm leave', realm.key); - - const el = Array.from(realmsCanvases.element.childNodes).find(el => { - return el.min[0] === realm.min[0] && el.min[2] === realm.min[2]; - }); - if (el) { - el.classList.remove('connected'); - el.classList.remove('connecting'); - } - realmCleanupFns.get(realm)(); - realmCleanupFns.delete(realm); - }); - - // local objects - const virtualWorld = realms.getVirtualWorld(); - const virtualPlayers = realms.getVirtualPlayers(); - - // states - const keyState = { - W: false, - A: false, - S: false, - D: false, - }; - const _resetKeys = () => { - for (const k in keyState) { - keyState[k] = false; - } - }; - const mouseState = { - buttons: 0, - x: 0, - y: 0, - }; - const lastMouseState = { - buttons: 0, - x: 0, - y: 0, - }; - - // main game element - const gameEl = document.getElementById('engine-canvas'); - // realms canvases - const realmsCanvases = new GameRealmsCanvases(realms); - gameEl.appendChild(realmsCanvases.element); - - const _initRenderers = () => { - GamePlayerCanvas.waitForLoad(); // note: not actually waiting - - // players wrapper element - const playersEl = document.createElement('div'); - playersEl.id = 'players'; - playersEl.classList.add('players'); - gameEl.appendChild(playersEl); - - // local player rendering - localPlayerCanvas = new GamePlayerCanvas(realms.localPlayer, { - local: true, - }); - - // controls tracking - let localPlayerFocused = true; - localPlayerCanvas.element.addEventListener('focus', e => { - localPlayerFocused = true; - }); - localPlayerCanvas.element.addEventListener('blur', e => { - localPlayerFocused = false; - }); - - // reset keys on blur - window.document.addEventListener('contextmenu', e => { - _resetKeys(); - }); - window.addEventListener('blur', e => { - _resetKeys(); - }); - - window.addEventListener('keydown', e => { - // if it's Ctrl, ignore - if (e.ctrlKey) { - // nothing - } else { - if (localPlayerFocused) { - e.preventDefault(); - e.stopPropagation(); - - // WASD - switch (e.code) { - case 'KeyW': { - keyState.W = true; - // localPlayerCanvas.velocity[2] = -1; - break; - } - case 'KeyA': { - keyState.A = true; - // localPlayerCanvas.velocity[0] = -1; - break; - } - case 'KeyS': { - keyState.S = true; - // localPlayerCanvas.velocity[2] = 1; - break; - } - case 'KeyD': { - keyState.D = true; - // localPlayerCanvas.velocity[0] = 1; - break; - } - case 'KeyE': { - _pickupDrop(); - break; - } - case 'KeyT': { - realms.toggleMic(); - break; - } - } - } - } - }); - window.addEventListener('keyup', e => { - // if it's Ctrl, ignore - if (e.ctrlKey) { - // nothing - } else { - if (localPlayerFocused) { - e.preventDefault(); - e.stopPropagation(); - - switch (e.code) { - case 'KeyW': { - keyState.W = false; - break; - } - case 'KeyA': { - keyState.A = false; - break; - } - case 'KeyS': { - keyState.S = false; - break; - } - case 'KeyD': { - keyState.D = false; - break; - } - } - } - } - }); - localPlayerCanvas.element.focus(); - document.body.addEventListener('click', e => { - localPlayerCanvas.element.focus(); - }); - playersEl.appendChild(localPlayerCanvas.element); - - // remote players rendering - realms.players.addEventListener('join', e => { - const {playerId, player} = e.data; - // console.log('join', e.data); - - if (playerId !== realms.playerId) { - const remotePlayer = player; - const remotePlayerCanvas = new GamePlayerCanvas(remotePlayer, { - local: false, - }); - playersEl.appendChild(remotePlayerCanvas.element); - remotePlayerCanvases.set(playerId, remotePlayerCanvas); - } - }); - realms.players.addEventListener('leave', e => { - const {playerId} = e.data; - // console.log('leave', e.data); - - if (playerId !== realms.playerId) { - const remotePlayerCanvas = remotePlayerCanvases.get(playerId); - remotePlayerCanvas.element.parentNode.removeChild(remotePlayerCanvas.element); - remotePlayerCanvas.destroy(); - remotePlayerCanvases.delete(playerId); - } - }); - - // action methods - const _pickupDrop = () => { - // console.log('drop 1'); - const position = localPlayerCanvas.virtualPlayer.getKeyValue('position'); - const direction = localPlayerCanvas.virtualPlayer.getKeyValue('direction'); - const targetPosition = [ - position[0] + direction[0] * frameSize, - 0, - position[2] + direction[2] * frameSize - frameSize / 2, - ]; - const targetBox = { - min: [ - targetPosition[0] - frameSize / 2, - 0, - targetPosition[2] - frameSize / 2, - ], - max: [ - targetPosition[0] + frameSize / 2, - 0, - targetPosition[2] + frameSize / 2, - ], - }; - const _boxContains = (box, position) => { - return position[0] >= box.min[0] && position[0] <= box.max[0] && - position[1] >= box.min[1] && position[1] <= box.max[1] && - position[2] >= box.min[2] && position[2] <= box.max[2]; - }; - const _needledEntityIsWorn = needledEntity => { - const actions = realms.localPlayer.playerActions.toArray(); - const action = actions.find(action => action.action === 'wear' && action.appId === needledEntity.entityMap.arrayIndexId); - return !!action; - }; - const _getCollision = () => { - return Array.from(virtualWorld.worldApps.needledVirtualEntities.values()).find(needledEntityMap => { - const worn = _needledEntityIsWorn(needledEntityMap); - if (!worn) { - const position = needledEntityMap.get('position'); - return !!position && _boxContains(targetBox, position); - } else { - return false; - } - }); - }; - - const collidedVirtualMap = _getCollision(); - if (collidedVirtualMap) { - // deadhand - // Is emitted by addEntity(). - /* - const sourceRealm = collidedVirtualMap.headTracker.getHeadRealm(); - const deadHandUpdate = sourceRealm.dataClient.deadHandArrayMaps( - realms.localPlayer.playerApps.arrayId, - [collidedVirtualMap.entityMap.arrayIndexId], - realms.playerId, - ); - sourceRealm.emitUpdate(deadHandUpdate); - */ - - // track - // collidedVirtualMap.setHeadTracker(realms.localPlayer.playerApps.headTracker); - - // add app to the new location (player) - const collidedAppJson = collidedVirtualMap.toObject(); - const targetRealm = realms.localPlayer.headTracker.getHeadRealm(); - const newAppMap = realms.localPlayer.playerApps.addEntityAt( - collidedVirtualMap.entityMap.arrayIndexId, - collidedAppJson, - targetRealm, - ); - - // add new action - const action = { - position: targetPosition, - action: 'wear', - appId: collidedVirtualMap.entityMap.arrayIndexId, - }; - const newActionMap = realms.localPlayer.playerActions.addEntity(action, targetRealm); - - // remove from the old location (world) - // collidedVirtualMap.remove(); - virtualWorld.worldApps.removeEntityAt(collidedVirtualMap.entityMap.arrayIndexId); - - // livehand - // Is emitted by addEntity(). - /* - const liveHandUpdate = targetRealm.dataClient.liveHandArrayMaps( - realms.localPlayer.playerApps.arrayId, - [collidedVirtualMap.entityMap.arrayIndexId], - realms.playerId, - ); - sourceRealm.emitUpdate(liveHandUpdate); - */ - } else { - // console.log('got player apps', realms.localPlayer.playerApps.getSize()); - if (realms.localPlayer.playerActions.getSize() > 0) { - const targetRealm = realms.getClosestRealm(targetPosition); - if (targetRealm) { - // console.log('drop to target realm', targetRealm.key, targetRealm); - - // the app we will be dropping - const actions = realms.localPlayer.playerActions.toArray(); - const wearActionIndex = actions.findIndex(action => action.action === 'wear'); - const wearAction = actions[wearActionIndex]; - const {appId} = wearAction; - - const appIds = realms.localPlayer.playerApps.getKeys(); - const wearAppIndex = appIds.indexOf(appId); - - const firstAction = realms.localPlayer.playerActions.getVirtualMapAt(wearActionIndex); - const firstApp = realms.localPlayer.playerApps.getVirtualMapAt(wearAppIndex); - - // const newHeadTracker = new HeadTracker('drop'); - // newHeadTracker.setHeadRealm(firstApp.headTracker.getHeadRealm()); - // newHeadTracker.setConnectedRealms(firstApp.headTracker.getConnectedRealms()); - // firstApp.setHeadTracker(newHeadTracker); - - // firstApp.set('position', targetPosition); - - // set dead hands - // old location: player - // the player already has deadhand on all of its apps, probably? - // const deadHandUpdate = firstApp.headRealm.dataClient.deadHandArrayMaps( - // realms.localPlayer.playerApps.arrayId, - // [firstApp.entityMap.arrayIndexId], - // realms.playerId, - // ); - // firstApp.headRealm.emitUpdate(deadHandUpdate); - // new location: world - // deadhand - // Is emitted by addEntityAt(). - /* - const deadHandUpdate = targetRealm.dataClient.deadHandArrayMaps( - 'worldApps', - [firstApp.entityMap.arrayIndexId], - realms.playerId, - ); - targetRealm.emitUpdate(deadHandUpdate); - */ - - // add at the new location (world) - const firstAppJson = firstApp.toObject(); - firstAppJson.position = targetPosition; - const newPlayerAppMap = virtualWorld.worldApps.addEntityAt( - firstApp.entityMap.arrayIndexId, - firstAppJson, - targetRealm, - ); - // const newPlayerApp = virtualWorld.worldApps.getVirtualMap(newPlayerAppMap.arrayIndexId); - // newPlayerApp.headTracker.setHeadRealm(targetRealm); - - // remove from the old location (player) - // firstApp.remove(); - // firstAction.remove(); - realms.localPlayer.playerApps.removeEntityAt(appId); - realms.localPlayer.playerActions.removeEntityAt(firstAction.arrayIndexId); - - // livehand - // Is emitted by addEntity(). - /* - const liveHandUpdate = targetRealm.dataClient.liveHandArrayMap( - 'worldApps', - [firstApp.entityMap.arrayIndexId], - realms.playerId, - ); - targetRealm.emitUpdate(liveHandUpdate); - */ - - } else { - console.warn('no containing realm to drop to'); - } - } else { - console.warn('nothing to drop'); - } - } - }; - }; - _initRenderers(); - - const _initLogic = () => { - // world - // const worldItemRenderers = []; - // bind - - // local player - const localPlayerCursorRenderer = new RemotePlayerCursorHtmlRenderer(realms.playerId, realms.playerId, realms.localPlayer); - const appsRenderer = new AppsHtmlRenderer(realms); - - const imageNode = new Image(); - imageNode.src = '/public/images/audio.svg'; - imageNode.classList.add('audio-icon'); - let roster = document.querySelector("#roster"); - - const _addPlayer = player => { - // ui - const p = document.createElement("p"); - p.classList.add('player'); - - p.appendChild(imageNode.cloneNode()); - - const span = document.createElement('span'); - span.classList.add('name'); - span.innerText = player.arrayIndexId; - p.appendChild(span); - - p.playerId = player.arrayIndexId; - roster.appendChild(p); - - // render - const playerCursorRenderer = new RemotePlayerCursorHtmlRenderer(player.arrayIndexId, playerId, player); - playerCursorRenderers.push(playerCursorRenderer); - }; - const _removePlayer = playerId => { - for (let i = 0; i < roster.children.length; i++) { - const p = roster.children[i]; - if (p.playerId === playerId) { - roster.removeChild(p); - break; - } - } - - for (let i = 0; i < playerCursorRenderers.length; i++) { - const playerCursorRenderer = playerCursorRenderers[i]; - if (playerCursorRenderer.remotePlayerId === playerId) { - playerCursorRenderers.splice(i, 1); - playerCursorRenderer.destroy(); - break; - } - } - }; - - // players - const playerCursorRenderers = []; - virtualPlayers.addEventListener('join', e => { - // console.log('add virtual player', e.data); - const {player} = e.data; - _addPlayer(player); - }); - virtualPlayers.addEventListener('leave', e => { - // console.log('remove virtual player', e.data); - const {playerId} = e.data; - _removePlayer(playerId); - }); - _addPlayer(realms.localPlayer); - - // audio - const _enableAudioOutput = playerId => { - for (let i = 0; i < roster.children.length; i++) { - const p = roster.children[i]; - const textNode = p.children[1]; - if (textNode.playerId === playerId) { - // console.log('swap on'); - p.classList.add('speaking'); - break; - } - } - }; - const _disableAudioOutput = playerId => { - for (let i = 0; i < roster.children.length; i++) { - const p = roster.children[i]; - const textNode = p.children[1]; - if (textNode.playerId === playerId) { - // console.log('swap off'); - p.classList.remove('speaking'); - break; - } - } - }; - realms.addEventListener('audiostreamstart', e => { - const {playerId} = e.data; - // console.log('stream start', playerId); - _enableAudioOutput(playerId); - }); - realms.addEventListener('audiostreamend', e => { - const {playerId} = e.data; - // console.log('stream end', playerId); - _disableAudioOutput(playerId); - }); - - // wait for the network to be ready befor binding controls - // realms.addEventListener('networkreconfigure', e => { - // }, {once: true}); - }; - _initLogic(); - - const _startFrameLoop = () => { - let connected = false; - const onConnect = position => { - console.log('on connect'); - if (!position) { - debugger; - } - const appVals = [ - { - start_url: 'rock', - position: new Float32Array(3), - }, - { - start_url: 'rock', - position: new Float32Array(3), - }, - ]; - const appIds = Array(appVals.length); - for (let i = 0; i < appIds.length; i++) { - appIds[i] = makeId(); - } - - const actionVals = [ - { - action: 'wear', - appId: appIds[0], - }, - { - action: 'wear', - appId: appIds[1], - }, - ]; - - const o = { - position: position.slice(), - direction: [0, 0, 1], - cursorPosition: [0, 0, 0], - name: 'Hanna', - }; - // console.log('initialize player', o); - realms.localPlayer.initializePlayer(o, { - appVals, - appIds, - actionVals, - }); - - connected = true; - }; - const _setInitialCoord = () => { - // console.log('set initial coord', initialCoord); - const initialPosition = [ - initialCoord[0], - 0, - initialCoord[1], - ]; - realms.updatePosition(initialPosition, realmSize, { - onConnect, - }); - }; - _setInitialCoord(); - - let frame; - const _recurse = () => { - frame = requestAnimationFrame(_recurse); - - if (connected) { - // move the cursor - if (mouseState.x !== lastMouseState.x || mouseState.y !== lastMouseState.y) { - realms.localPlayer.setKeyValue('cursorPosition', [ - lastMouseState.x, - lastMouseState.y, - 0, - ]); - - lastMouseState.x = mouseState.x; - lastMouseState.y = mouseState.y; - } - - const _normalize = p => { - const l = Math.sqrt(p[0]*p[0] + p[1]*p[1] + p[2]*p[2]); - if (l > 0) { - p[0] /= l; - p[1] /= l; - p[2] /= l; - } - }; - const _updateVelocity = () => { - localPlayerCanvas.velocity[0] = 0; - localPlayerCanvas.velocity[1] = 0; - localPlayerCanvas.velocity[2] = 0; - if (keyState.W) { - localPlayerCanvas.velocity[2] -= 1; - } - if (keyState.S) { - localPlayerCanvas.velocity[2] += 1; - } - if (keyState.A) { - localPlayerCanvas.velocity[0] -= 1; - } - if (keyState.D) { - localPlayerCanvas.velocity[0] += 1; - } - _normalize(localPlayerCanvas.velocity); - }; - _updateVelocity(); - - // move the local player - localPlayerCanvas.move(); - - // render the frame - const _renderPlayers = () => { - localPlayerCanvas.draw(); - for (const remotePlayerCanvas of remotePlayerCanvases.values()) { - remotePlayerCanvas.draw(); - } - }; - _renderPlayers(); - - const _renderRealms = () => { - realmsCanvases.update(); - }; - _renderRealms(); - - // update realms set - const position = realms.localPlayer.getKeyValue('position'); - realms.updatePosition(position, realmSize, { - // onConnect, - }); - - // draw the world - const gameEl = document.getElementById(`game`); - const localPlayerEl = document.getElementById(`player-${realms.playerId}`); - const worldAppsEl = document.getElementById('world-apps'); - const networkRealmsEl = document.getElementById('network-realms'); - const cssTransformText = `translate3d(${-position[0]}px, ${-position[2]}px, 0px)`; - gameEl.style.transform = cssTransformText; - const cssTransformText2 = `translate3d(${position[0]}px, ${position[2]}px, 0px)`; - localPlayerEl.style.transform = cssTransformText2; - // worldAppsEl.style.transform = cssTransformText; - // networkRealmsEl.style.transform = cssTransformText; - - // latch last coord - const coord = [ - position[0], - position[2], - ]; - _updateCoord(coord); - } - }; - _recurse(); - }; - _startFrameLoop(); - - return realms; -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/audio.svg b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/audio.svg deleted file mode 100644 index aa2d65d3a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/audio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/fire-mage.png b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/images/fire-mage.png deleted file mode 100644 index a69ac965d737991b07bd2456b297323d36f8d692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96885 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 z 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 diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/irc-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/irc-client.mjs deleted file mode 100644 index 1c18a0bb5..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/irc-client.mjs +++ /dev/null @@ -1,169 +0,0 @@ -import {zbencode} from 'zjs'; -import {UPDATE_METHODS} from './update-types.mjs'; -import {parseUpdateObject, makeId} from './util.mjs'; - -export class NetworkedIrcClient extends EventTarget { - constructor(playerId = makeId()) { - super(); - - this.playerId = playerId; - this.playerIds = []; - - this.ws = null; - } - - static handlesMethod(method) { - return [ - UPDATE_METHODS.NETWORK_INIT, - UPDATE_METHODS.JOIN, - UPDATE_METHODS.LEAVE, - UPDATE_METHODS.REGISTER, - UPDATE_METHODS.CHAT, - ].includes(method); - } - - async connect(ws) { - this.ws = ws; - - const _waitForOpen = () => new Promise((resolve, reject) => { - resolve = (resolve => () => { - resolve(); - _cleanup(); - })(resolve); - reject = (reject => () => { - reject(); - _cleanup(); - })(reject); - - this.ws.addEventListener('open', resolve); - this.ws.addEventListener('error', reject); - - const _cleanup = () => { - this.ws.removeEventListener('open', resolve); - this.ws.removeEventListener('error', reject); - }; - }); - const _waitForInitialImport = async () => { - await new Promise((resolve, reject) => { - const initialMessage = e => { - // console.log('got message', e.data); - if (e.data instanceof ArrayBuffer && e.data.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method/*, args */} = updateObject; - if (method === UPDATE_METHODS.NETWORK_INIT) { - this.handleUpdateObject(updateObject); - - resolve(); - - this.ws.removeEventListener('message', initialMessage); - } - } - }; - this.ws.addEventListener('message', initialMessage); - }); - }; - await Promise.all([ - _waitForOpen(), - _waitForInitialImport(), - ]); - - // console.log('irc listen'); - this.ws.addEventListener('message', e => { - // if some other listener hasn't consumed the message already - if (e?.data?.byteLength > 0) { - const updateBuffer = e.data; - // console.log('irc data', e.data); - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method/*, args */} = updateObject; - if (NetworkedIrcClient.handlesMethod(method)) { - this.handleUpdateObject(updateObject); - } - } else { - // debugger; - } - }); - } - - handleUpdateObject(updateObject) { - const {method, args} = updateObject; - // console.log('got irc event', {method, args}); - if (method === UPDATE_METHODS.NETWORK_INIT) { - const [playerIds] = args; - this.playerIds = playerIds; - - for (let i = 0; i < playerIds.length; i++) { - const playerId = playerIds[i]; - // console.log('dispatch join', playerId); - this.dispatchEvent(new MessageEvent('join', { - data: { - playerId, - }, - })); - } - } else if (method === UPDATE_METHODS.CHAT) { - // console.log('got irc chat', JSON.stringify({method, args}, null, 2)); - const [playerId, message] = args; - const chatMessage = new MessageEvent('chat', { - data: { - playerId, - message, - }, - }); - this.dispatchEvent(chatMessage); - } else if (method === UPDATE_METHODS.JOIN) { - const [playerId] = args; - this.playerIds.push(playerId); - this.dispatchEvent(new MessageEvent('join', { - data: { - playerId, - }, - })); - } else if (method === UPDATE_METHODS.LEAVE) { - const [playerId] = args; - const index = this.playerIds.indexOf(playerId); - this.playerIds.splice(index, 1); - this.dispatchEvent(new MessageEvent('leave', { - data: { - playerId, - }, - })); - } else if (method === UPDATE_METHODS.REGISTER) { - const [playerId] = args; - const index = this.playerIds.indexOf(playerId); - this.playerIds.splice(index, 1); - this.dispatchEvent(new MessageEvent('register', { - data: { - playerId, - }, - })); - } else { - console.warn('unhandled irc method', {method, args}); - } - } - - sendRegisterMessage() { - const buffer = zbencode({ - method: UPDATE_METHODS.REGISTER, - args: [ - this.playerId, - ], - }); - this.ws.send(buffer); - } - - sendChatMessage(message) { - const buffer = zbencode({ - method: UPDATE_METHODS.CHAT, - args: [ - this.playerId, - message, - ], - }); - this.ws.send(buffer); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/lock-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/lock-client.mjs deleted file mode 100644 index 6a356158d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/lock-client.mjs +++ /dev/null @@ -1,204 +0,0 @@ -import { UPDATE_METHODS } from "./update-types.mjs"; -import { - // createWs, - // makePromise, - // makeId, - parseUpdateObject, - serializeMessage, -} from './util.mjs'; - -class LockRealm { - constructor({ - lockName, - }) { - this.lockName = lockName; - this.queue = []; - this.currentLockedSession = null; - } - lock({ - session, - }) { - if (!this.currentLockedSession) { - this.currentLockedSession = session; - - // reply to the session that we are locked - const m = new MessageEvent('lockResponse', { - data: { - playerId: session.playerId, - lockName: this.lockName, - }, - }); - session.webSocket.send(serializeMessage(m)); - } else { - this.queue.push(session); - } - } - unlock({ - session, - }) { - if (this.currentLockedSession === session) { - this.currentLockedSession = null; - - if (this.queue.length > 0) { - const nextSession = this.queue.shift(); - this.lock({ - session: nextSession, - }); - } - } else { - this.queue = this.queue.filter(s => s !== session); - } - } -} - -export class NetworkedLockClient extends EventTarget { - static handlesMethod(method) { - return [ - UPDATE_METHODS.LOCK_REQUEST, // client -> server - UPDATE_METHODS.LOCK_RESPONSE, // server -> client - UPDATE_METHODS.LOCK_RELEASE, // client -> server - ].includes(method); - } - - ws = null; // client - locks = new Map(); // server; string -> LockRealm - constructor() { - super(); - } - - // client request lock - async lock(lockName, { - signal, - }) { - // send the lock - const m = new MessageEvent('lockRequest', { - data: { - lockName, - }, - }); - this.ws.send(serializeMessage(m)); - - // when the signal aborts,send the release - signal.addEventListener('abort', (e) => { - const m = new MessageEvent('lockRelease', { - data: { - lockName, - }, - }); - this.ws.send(serializeMessage(m)); - }); - - // wait for the unlock - await new Promise((resolve, reject) => { - const onmessage = (e) => { - if (e.data instanceof ArrayBuffer && e.data.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method, args} = updateObject; - if (method === UPDATE_METHODS.LOCK_RESPONSE) { - const [_lockName] = args; - if (_lockName === lockName) { - resolve(); - cleanup(); - } - } - } - }; - this.ws.addEventListener('message', onmessage); - - // const onabort = (e) => { - // resolve(); - // cleanup(); - // }; - // signal.addEventListener('abort', onabort); - - const cleanup = () => { - this.ws.removeEventListener('message', onmessage); - // signal.removeEventListener('abort', onabort); - }; - }); - } - - // server force unlock on disconnect - ensureLockRealm() { - let lockRealm = this.locks.get(lockName); - if (!lockRealm) { - lockRealm = new LockRealm(); - this.locks.set(lockName, lockRealm); - } - return lockRealm; - } - serverLock(session, lockName) { - const lockRealm = this.ensureLockRealm(lockName); - lockRealm.lock({ - session, - }); - } - serverUnlock(session, lockName) { - const lockRealm = this.ensureLockRealm(lockName); - lockRealm.unlock({ - session, - }); - } - serverUnlockSession(session) { - for (const lockRealm of Array.from(this.locks)) { - lockRealm.unlock({ - session, - }); - } - } - - // client connects to server - async connect(ws) { - this.ws = ws; - - const _waitForOpen = async () => { - await new Promise((resolve, reject) => { - resolve = (resolve => () => { - resolve(); - _cleanup(); - })(resolve); - reject = (reject => () => { - reject(); - _cleanup(); - })(reject); - - ws.addEventListener('open', resolve); - ws.addEventListener('error', reject); - - const _cleanup = () => { - ws.removeEventListener('open', resolve); - ws.removeEventListener('error', reject); - }; - }); - }; - await _waitForOpen(); - } - - // server handles message - handle(e) { - const { type } = e; - const { session, lockName } = e.data; - if (!playerId || !lockName) { - throw new Error('lock client message missing args: ' + JSON.stringify(e.data)); - } - switch (type) { - case 'lockRequest': { - this.serverLock(session, lockName); - break; - } - case 'lockResponse': { - throw new Error('server should not receive lockResponse'); - } - case 'lockRelease': { - this.serverUnlock(session, lockName); - break; - } - default: { - throw new Error('unrecognized lock client message type: ' + type); - } - } - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/network-realms.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/network-realms.mjs deleted file mode 100644 index 48ab48fd2..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/network-realms.mjs +++ /dev/null @@ -1,2089 +0,0 @@ -import {DataClient, NetworkedDataClient, DCMap, DCArray} from './data-client.mjs'; -import {NetworkedCrdtClient} from './crdt-client.mjs'; -import {NetworkedLockClient} from './lock-client.mjs'; -import {NetworkedIrcClient} from './irc-client.mjs'; -import {NetworkedAudioClient} from './audio/networked-audio-client.mjs'; -import {NetworkedVideoClient} from './video/networked-video-client.mjs'; -import { - createWs, - makePromise, - makeId, - parseUpdateObject, - serializeMessage, -} from './util.mjs'; - -// - -const arrayEquals = (a, b) => { - if (a.length !== b.length) { - return false; - } else { - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - } -}; - -const makeTransactionHandler = () => { - const queue = []; - async function handle(fn) { - if (!handle.running) { - handle.running = true; - let result; - let error; - try { - result = await fn(); - } catch (err) { - error = err; - } - handle.running = false; - if (queue.length > 0) { - queue.shift()(); - } - if (!error) { - return result; - } else { - throw error; - } - } else { - const promise = makePromise(); - queue.push(promise.resolve); - await promise; - return handle(fn); - } - } - handle.running = false; - return handle; -}; - -// - -const _getContainingHeadRealm = (realmKey, realms) => { - // console.log('get containing realm', realmKey, realms); - - for (const realm of realms) { - if (realm.connected) { - if (realm.key === realmKey) { - return realm; - } - // const box = { - // min: realm.min, - // max: [ - // realm.min[0] + realm.size, - // realm.min[1] + realm.size, - // realm.min[2] + realm.size, - // ], - // }; - // if (boxContains(box, position)) { - // return realm; - // } - } - } - return null; -}; - -// - -class HeadTrackedEntity extends EventTarget { - constructor(headTracker) { - super(); - - this.headTracker = headTracker || new HeadTracker(this); - } -} - -// - -class HeadTracker extends EventTarget { - constructor(headTrackedEntity) { - super(); - - this.headTrackedEntity = headTrackedEntity; - - this.onMigrate = null; - this.cleanupFns = new Map(); - } - - #needsUpdate = false; - #currentHeadRealm = null; // based on position, used for migrate + write - #cachedHeadRealm = null; // based on linkage, used for events + read - #connectedRealms = new Map(); // realm -> link count - - getHeadRealm() { - if (this.#needsUpdate) { - this.#updateCachedHeadRealm(); - this.#needsUpdate = false; - } - return this.#cachedHeadRealm; - } - - #updateCachedHeadRealm() { - this.#cachedHeadRealm = this.#computeHeadRealm(); - } - - #computeHeadRealm() { - if (this.#connectedRealms.size === 1) { // by far the most common case - return this.#connectedRealms.keys().next().value; - } else { - const {arrayId, arrayIndexId} = this.headTrackedEntity; - let dcMaps = []; - for (const realm of this.#connectedRealms.keys()) { - const {dataClient} = realm; - const dcArray = dataClient.getArray(arrayId, { - listen: false, - }); - if (dcArray.hasKey(arrayIndexId)) { - const dcMap = dcArray.getMap(arrayIndexId, { - listen: false, - }); - dcMaps.push(dcMap); - } else { - // nothing - } - } - - if (dcMaps.length > 0) { - let dcMap; - if (dcMaps.length === 1) { - dcMap = dcMaps[0]; - } else { - dcMaps = dcMaps.sort((a, b) => { - return b.getMapEpoch() - a.getMapEpoch(); - }); - dcMap = dcMaps[0]; - } - return dcMap.dataClient.userData.realm; - } else { - // XXX if we got here, that means that this entity does not exist in the data. - // XXX if the caller is trying to create this data, they should call getHeadRealmForCreate() instead - debugger; - throw new Error('cannot get head realm: entity does not exist in data'); - } - } - } - - getHeadRealmForCreate(realmKey) { - const headRealm = _getContainingHeadRealm(realmKey, this.#connectedRealms.keys()); - return headRealm; - } - - async tryMigrate(realmKey) { - // console.log('try migrate', realmKey, this.isLinked()); - if (this.isLinked()) { - if (realmKey) { - const newHeadRealm = _getContainingHeadRealm(realmKey, Array.from(this.#connectedRealms.keys())); - if (!this.#currentHeadRealm) { - this.#currentHeadRealm = newHeadRealm; - // console.log('init head realm', newHeadRealm.key); - } else { - const oldHeadRealm = this.#currentHeadRealm; - /* if (!newHeadRealm) { - console.log('missing realm', this, realmKey); - debugger; - } - if (!oldHeadRealm) { - console.log('missing realm', this, this.#currentHeadRealm); - debugger; - } */ - if (newHeadRealm.key !== oldHeadRealm.key) { - this.#currentHeadRealm = newHeadRealm; - - this.onMigrate && await this.onMigrate(new MessageEvent('migrate', { - data: { - oldHeadRealm, - newHeadRealm, - }, - })); - } else { - console.log('keys same! why are you updating me?'); - debugger; - } - } - } else { - this.#currentHeadRealm = null; - } - } else { - debugger; - throw new Error('try to get head realm for fully unlinked player ' + this.playerId); - } - } - - isLinked() { - return this.#connectedRealms.size > 0; - } - - linkRealm(realm) { - // listen for array add/remove which might trigger head update - const _listen = () => { - const {arrayId} = this.headTrackedEntity; - const {dataClient} = realm; - const dcArray = dataClient.getArray(arrayId); // note: auto-listen - const onadd = e => { - this.#needsUpdate = true; - }; - dcArray.addEventListener('add', onadd); - const onremove = e => { - this.#needsUpdate = true; - }; - dcArray.addEventListener('remove', onremove); - - this.cleanupFns.set(realm, () => { - // stop listening for array add/remove - dcArray.unlisten(); - dcArray.removeEventListener('add', onadd); - dcArray.removeEventListener('remove', onremove); - }); - }; - - // add connected realm - let val = this.#connectedRealms.get(realm) ?? 0; - val++; - if (val === 1) { - _listen(); - } - this.#connectedRealms.set(realm, val); - this.#needsUpdate = true; - } - - unlinkRealm(realm) { - // remove connected realm - let val = this.#connectedRealms.get(realm); - val--; - if (val <= 0) { - this.#connectedRealms.delete(realm); - - this.cleanupFns.get(realm)(); - this.cleanupFns.delete(realm); - } - this.#needsUpdate = true; - } -} - -// - -class EntityTracker extends EventTarget { - constructor() { - super(); - - this.virtualMaps = new Map(); - // this.linkedRealms = new Map(); - this.cleanupFns = new Map(); - } - - getSize() { - return this.virtualMaps.size; - } - - linkMap(realm, map) { - // bind local array maps to virtual maps - const _getOrCreateVirtualMap = arrayIndexId => { - let virtualMap = this.virtualMaps.get(map.arrayIndexId); - if (!virtualMap) { - // console.log('*** create new', map.arrayId, arrayIndexId); - virtualMap = new HeadlessVirtualEntityMap(arrayIndexId); - this.virtualMaps.set(map.arrayIndexId, virtualMap); - - virtualMap.addEventListener('garbagecollect', e => { - this.virtualMaps.delete(map.arrayIndexId); - this.dispatchEvent(new MessageEvent('entityremove', { - data: { - arrayId: map.arrayId, - entityId: arrayIndexId, - entity: virtualMap, - realm, - }, - })); - }); - } else { - // console.log('*** create old', map.arrayId, arrayIndexId); - } - return virtualMap; - }; - - const added = !this.virtualMaps.has(map.arrayIndexId); - const virtualMap = _getOrCreateVirtualMap(map.arrayIndexId); - - virtualMap.link(map.arrayId, realm); - - if (added) { - this.dispatchEvent(new MessageEvent('entityadd', { - data: { - arrayId: map.arrayId, - entityId: map.arrayIndexId, - entity: virtualMap, - realm, - }, - })); - } else { - this.dispatchEvent(new MessageEvent('entitytransplant', { - data: { - arrayId: map.arrayId, - entityId: map.arrayIndexId, - entity: virtualMap, - realm, - }, - })); - } - return virtualMap; - } - - unlinkMap(realm, arrayId, arrayIndexId) { - // console.log('entity tracker unlink map', realm, arrayIndexId); - - const virtualMap = this.virtualMaps.get(arrayIndexId); - virtualMap.unlink(arrayId, realm); - } - - // each realm will only be linked once - #linkInternal(arrayId, realm) { - const key = arrayId + ':' + realm.key; - - const {dataClient} = realm; - const dcArray = dataClient.getArray(arrayId); // note: auto listen - - const localVirtualMaps = new Map(); - const _bind = map => { - const virtualMap = this.linkMap(realm, map); - localVirtualMaps.set(map.arrayIndexId, virtualMap); - }; - const _unbind = arrayIndexId => { - this.unlinkMap(realm, dcArray.arrayId, arrayIndexId); - localVirtualMaps.delete(arrayIndexId); - }; - - const onimport = e => { - const keys = dcArray.getKeys(); - for (const arrayIndexId of keys) { - const map = dcArray.dataClient.getArrayMap(arrayId, arrayIndexId, { - listen: false, - }); - _bind(map); - } - }; - dcArray.dataClient.addEventListener('import', onimport); - - const addKey = 'add.' + dcArray.arrayId; - const onadd = e => { - const {arrayIndexId} = e.data; - const map = dcArray.getMap(arrayIndexId, { - listen: false, - }); - _bind(map); - }; - dcArray.dataClient.addEventListener(addKey, onadd); - const removeKey = 'remove.' + dcArray.arrayId; - const onremove = e => { - const {arrayIndexId} = e.data; - _unbind(arrayIndexId); - }; - dcArray.dataClient.addEventListener(removeKey, onremove); - - // initial listen for existing elements - const arrayIndexIds = dcArray.getKeys(); - for (const arrayIndexId of arrayIndexIds) { - const map = new DCMap(arrayId, arrayIndexId, realm.dataClient); - _bind(map); - } - - this.cleanupFns.set(key, () => { - dcArray.unlisten(); - dcArray.dataClient.removeEventListener('import', onimport); - dcArray.dataClient.removeEventListener(addKey, onadd); - dcArray.dataClient.removeEventListener(removeKey, onremove); - - for (const arrayIndexId of localVirtualMaps.keys()) { - this.unlinkMap(realm, dcArray.arrayId, arrayIndexId); - } - }); - } - - // returns whether the realm was linked - link(arrayId, realm) { - this.#linkInternal(arrayId, realm); - } - - #unlinkInternal(arrayId, realm) { - const key = arrayId + ':' + realm.key; - this.cleanupFns.get(key)(); - this.cleanupFns.delete(key); - } - - // returns whether the realm was unlinked - unlink(arrayId, realm) { - this.#unlinkInternal(arrayId, realm); - } -} - -class VirtualPlayer extends HeadTrackedEntity { - constructor(arrayId, arrayIndexId, realms, name, opts) { - super(opts?.headTracker); - - this.arrayId = arrayId; - this.arrayIndexId = arrayIndexId; - this.realms = realms; - this.name = name; - - this.headTracker = new HeadTracker(this); - - this.playerApps = new VirtualEntityArray('playerApps:' + this.arrayIndexId, this.realms, { - entityTracker: opts?.appsEntityTracker, - }); - this.playerActions = new VirtualEntityArray('playerActions:' + this.arrayIndexId, this.realms, { - entityTracker: new EntityTracker(), - }); - this.cleanupMapFns = new Map(); - } - - initializePlayer(o, { - appVals = [], - appIds = [], - actionVals = [], - actionValIds = [], - } = {}) { - const headRealm = this.headTracker.getHeadRealmForCreate(o.realmKey); - // if (!headRealm) { - // debugger; - // } - - // console.log('initialize app', headRealm.key, o.position.join(',')); - - const _initializeApps = () => { - for (let i = 0; i < appVals.length; i++) { - const appVal = appVals[i]; - const appId = appIds[i] ?? makeId(); - const deadHandUpdate = headRealm.dataClient.deadHandArrayMap(this.playerApps.arrayId, appId, this.realms.playerId); - headRealm.emitUpdate(deadHandUpdate); - - this.playerApps.addEntityAt(appId, appVal, headRealm); - } - }; - _initializeApps(); - - const _initializeActions = () => { - for (let i = 0; i < actionVals.length; i++) { - const actionVal = actionVals[i]; - const actionId = actionValIds[i] ?? makeId(); - const deadHandUpdate = headRealm.dataClient.deadHandArrayMap(this.playerActions.arrayId, actionId, this.realms.playerId); - headRealm.emitUpdate(deadHandUpdate); - - this.playerActions.addEntityAt(actionId, actionVal, headRealm); - } - }; - _initializeActions(); - - const _initializePlayer = () => { - const deadHandUpdate = headRealm.dataClient.deadHandArrayMap(this.arrayId, this.arrayIndexId, this.realms.playerId); - headRealm.emitUpdate(deadHandUpdate); - - const playersArray = headRealm.dataClient.getArray(this.arrayId, { - listen: false, - }); - const epoch = 0; - const { - // map, - update, - } = playersArray.addAt(this.arrayIndexId, o, epoch, { - listen: false, - }); - headRealm.emitUpdate(update); - }; - _initializePlayer(); - } - - link(realm) { - const {dataClient} = realm; - const map = dataClient.getArrayMap(this.arrayId, this.arrayIndexId); // note: this map might not exist in the crdt yet - const update = e => { - this.dispatchEvent(new MessageEvent('update', { - data: e.data, - })); - }; - map.addEventListener('update', update); - - // link child arrays - this.playerApps.link(realm); - this.playerActions.link(realm); - - // link initial position - // console.log('player link to realm', !this.headTracker.isLinked(), realm); - if (!this.headTracker.isLinked()) { - // console.log('dispatching join event', this); - this.dispatchEvent(new MessageEvent('join', { - data: {}, - })); - } - this.headTracker.linkRealm(realm); - - // cleanup - this.cleanupMapFns.set(realm, () => { - this.headTracker.unlinkRealm(realm); - - map.unlisten(); - map.removeEventListener('update', update); - - this.playerApps.unlink(realm); - this.playerActions.unlink(realm); - }); - } - - unlink(realm) { - this.cleanupMapFns.get(realm)(); - this.cleanupMapFns.delete(realm); - - if (!this.headTracker.isLinked()) { - this.dispatchEvent(new MessageEvent('leave', { - data: {}, - })); - } - } - - getKeys() { - const headRealm = this.headTracker.getHeadRealm(); - const {dataClient} = headRealm; - const valueMap = dataClient.getArrayMap(this.arrayId, this.arrayIndexId, { - listen: false, - }); - const keys = valueMap.getKeys(); - return keys; - } - - getKeyValue(key) { - const headRealm = this.headTracker.getHeadRealm(); - const {dataClient} = headRealm; - const valueMap = dataClient.getArrayMap(this.arrayId, this.arrayIndexId, { - listen: false, - }); - return valueMap.getKey(key); - } - - getEpoch() { - const headRealm = this.headTracker.getHeadRealm(); - const {dataClient} = headRealm; - const valueMap = dataClient.getArrayMap(this.arrayId, this.arrayIndexId, { - listen: false, - }); - return valueMap.getEpoch(); - } - - setKeyValue(key, val) { - const headRealm = this.headTracker.getHeadRealm(); - const {dataClient} = headRealm; - const valueMap = dataClient.getArrayMap(this.arrayId, this.arrayIndexId, { - listen: false, - }); - const update = valueMap.setKeyValueUpdate(key, val); - headRealm.emitUpdate(update); - } -} - -class VirtualPlayersArray extends EventTarget { - constructor(arrayId, parent, opts) { - super(); - - this.arrayId = arrayId; - this.parent = parent; - this.opts = opts; - - this.virtualPlayers = new Map(); - this.cleanupFns = new Map(); - } - - getOrCreateVirtualPlayer(playerId) { - // console.log('get or create virtual player', { - // playerId, - // }); - let virtualPlayer = this.virtualPlayers.get(playerId); - if (!virtualPlayer) { - virtualPlayer = new VirtualPlayer(this.arrayId, playerId, this.parent, 'remote', { - appsEntityTracker: this.opts?.appsEntityTracker, - // actionsEntityTracker: this.opts?.actionsEntityTracker, - }); - this.virtualPlayers.set(playerId, virtualPlayer); - } - return virtualPlayer; - } - - getSize() { - return this.virtualPlayers.size; - } - - getKeys() { - return Array.from(this.virtualPlayers.keys()); - } - getValues() { - return Array.from(this.virtualPlayers.values()); - } - - link(realm) { - const {dataClient, networkedDataClient, networkedAudioClient, networkedVideoClient} = realm; - - const _linkData = () => { - const playersArray = dataClient.getArray(this.arrayId); - - const _linkPlayer = arrayIndexId => { - // console.log('link player', arrayIndexId, realm.key); - const playerId = arrayIndexId; - if (playerId === this.parent.playerId) { - // nothing - } else { - const created = !this.virtualPlayers.has(playerId); - const virtualPlayer = this.getOrCreateVirtualPlayer(playerId); - virtualPlayer.link(realm); - - if (created) { - this.dispatchEvent(new MessageEvent('join', { - data: { - player: virtualPlayer, - playerId, - }, - })); - } - } - }; - - const _unlinkPlayer = arrayIndexId => { - const playerId = arrayIndexId; - - // console.log('unlink player', arrayIndexId, realm.key); - - if (playerId === this.parent.playerId) { - // nothing - } else { - const virtualPlayer = this.virtualPlayers.get(playerId); - if (virtualPlayer) { - virtualPlayer.unlink(realm); - - if (!virtualPlayer.headTracker.isLinked()) { - this.virtualPlayers.delete(playerId); - - this.dispatchEvent(new MessageEvent('leave', { - data: { - player: virtualPlayer, - playerId, - }, - })); - } - } else { - console.warn('removing nonexistent player', playerId, this.players); - } - } - }; - - const onadd = e => { - // console.log('player add', e.data); - const {arrayIndexId /*, map, val */} = e.data; - _linkPlayer(arrayIndexId); - }; - playersArray.addEventListener('add', onadd); - - const onremove = e => { - // console.log('player remove', e.data, realm.key); - const {arrayIndexId} = e.data; - _unlinkPlayer(arrayIndexId); - }; - playersArray.addEventListener('remove', onremove); - - // link initial players - for (const arrayIndexId of playersArray.getKeys()) { - // console.log('player initial', arrayIndexId); - _linkPlayer(arrayIndexId); - } - - this.cleanupFns.set(networkedDataClient, () => { - playersArray.unlisten(); - - // console.log('player unlisten', realm.key, new Error().stack); - - playersArray.removeEventListener('add', onadd); - playersArray.removeEventListener('remove', onremove); - }); - }; - _linkData(); - - const _linkAudio = () => { - const audio = e => { - this.dispatchEvent(new MessageEvent('audio', { - data: e.data, - })); - }; - networkedAudioClient.addEventListener('audio', audio); - const audiostart = e => { - this.dispatchEvent(new MessageEvent('audiostart', { - data: e.data, - })); - }; - networkedAudioClient.addEventListener('audiostart', audiostart); - const audioend = e => { - this.dispatchEvent(new MessageEvent('audioend', { - data: e.data, - })); - }; - networkedAudioClient.addEventListener('audioend', audioend); - - this.cleanupFns.set(networkedAudioClient, () => { - networkedAudioClient.removeEventListener('audio', audio); - networkedAudioClient.removeEventListener('audiostart', audiostart); - networkedAudioClient.removeEventListener('audioend', audioend); - }); - }; - _linkAudio(); - - const _linkVideo = () => { - const video = e => { - this.dispatchEvent(new MessageEvent('video', { - data: e.data, - })); - }; - networkedVideoClient.addEventListener('video', video); - const videostart = e => { - this.dispatchEvent(new MessageEvent('videostart', { - data: e.data, - })); - }; - networkedVideoClient.addEventListener('videostart', videostart); - const videoend = e => { - this.dispatchEvent(new MessageEvent('videoend', { - data: e.data, - })); - }; - networkedVideoClient.addEventListener('videoend', videoend); - - this.cleanupFns.set(networkedVideoClient, () => { - networkedAudioClient.removeEventListener('video', video); - networkedAudioClient.removeEventListener('videostart', videostart); - networkedAudioClient.removeEventListener('videoend', videoend); - }); - }; - _linkVideo(); - } - - unlink(realm) { - const {networkedDataClient, networkedAudioClient, networkedVideoClient} = realm; - - this.cleanupFns.get(networkedDataClient)(); - this.cleanupFns.delete(networkedDataClient); - - this.cleanupFns.get(networkedAudioClient)(); - this.cleanupFns.delete(networkedAudioClient); - - this.cleanupFns.get(networkedVideoClient)(); - this.cleanupFns.delete(networkedVideoClient); - - } -} - -class VirtualEntityArray extends VirtualPlayersArray { - constructor(arrayId, realms, opts) { - super(arrayId, realms); - - // note: the head tracker is only for passing down to needled virtual entities we create - // we do not use the head tracker in this class, because arrays do not have a head - // this.headTracker = opts?.headTracker ?? null; - this.entityTracker = opts?.entityTracker ?? null; - - this.needledVirtualEntities = new Map(); // entity -> needled entity - - const onentityadd = e => { - // console.log('entity add', e.data); - const {entityId, entity} = e.data; - - const needledEntity = new NeedledVirtualEntityMap(arrayId, entity); - - needledEntity.cleanupFn = () => { - needledEntity.destroy(); - - this.needledVirtualEntities.delete(entity); - - this.dispatchEvent(new MessageEvent('needledentityremove', { - data: { - entityId, - needledEntity, - }, - })); - }; - this.needledVirtualEntities.set(entity, needledEntity); - - this.dispatchEvent(new MessageEvent('needledentityadd', { - data: { - entityId, - needledEntity, - }, - })); - }; - - this.entityTracker.addEventListener('entityadd', onentityadd); - - const onentityremove = e => { - // console.log('entity remove', e.data); - const {/* entityId, */ entity} = e.data; - - const needledEntity = this.needledVirtualEntities.get(entity); - if (needledEntity) { - needledEntity.cleanupFn(); - } - }; - - this.entityTracker.addEventListener('entityremove', onentityremove); - - // // console.log('adding defaults', arrayId, this.entityTracker.virtualMaps, this.entityTracker.virtualMaps.size); - // for (const [entityId, entity] of this.entityTracker.virtualMaps.entries()) { - // // console.log('add initial entity', arrayId, entityId, entity); - // onentityadd(new MessageEvent('entityadd', { - // data: { - // entityId, - // entity, - // }, - // })); - // } - } - - addEntityAt(arrayIndexId, val, realm) { - const deadHandUpdate = realm.dataClient.deadHandArrayMap(this.arrayId, arrayIndexId, this.parent.playerId); - realm.emitUpdate(deadHandUpdate); - - const array = new DCArray(this.arrayId, realm.dataClient); - const epoch = 0; - const { - map, - update, - } = array.addAt(arrayIndexId, val, epoch); - realm.emitUpdate(update); - - const liveHandUpdate = realm.dataClient.liveHandArrayMap(this.arrayId, arrayIndexId, this.parent.playerId); - realm.emitUpdate(liveHandUpdate); - - return map; - } - - removeEntityAt(arrayIndexId) { - this.getVirtualMap(arrayIndexId).remove(); - } - - getMapEntity(map) { - let entity = null; - const realms = this.parent; - for (const e of realms.world.worldApps.needledVirtualEntities.keys()) { - if (e.arrayIndexId === map.arrayIndexId) { - entity = e; - break; - } - } - // if (!entity) { - // debugger; - // } - return entity; - } - - transplantEntityToRealm(arrayIndexId, targetRealm) { - console.log('transplant entity', { - arrayIndexId, - targetRealm, - }); - debugger; - // const collidedAppJson = collidedVirtualMap.toObject(); - // const targetRealm = realms.localPlayer.headTracker.getHeadRealm(); - const realms = this.parent; - const newAppMap = realms.localPlayer.playerApps.addEntityAt( - collidedVirtualMap.entityMap.arrayIndexId, - collidedAppJson, - targetRealm, - ); - - // add new action - const action = { - position: targetPosition, - action: 'wear', - appId: collidedVirtualMap.entityMap.arrayIndexId, - }; - const newActionMap = realms.localPlayer.playerActions.addEntity(action, targetRealm); - - // remove from the old location (world) - // collidedVirtualMap.remove(); - virtualWorld.worldApps.removeEntityAt(collidedVirtualMap.entityMap.arrayIndexId); - - // action methods - const _pickupDrop = () => { - // console.log('drop 1'); - const position = localPlayerCanvas.virtualPlayer.getKeyValue('position'); - const direction = localPlayerCanvas.virtualPlayer.getKeyValue('direction'); - const targetPosition = [ - position[0] + direction[0] * frameSize, - 0, - position[2] + direction[2] * frameSize - frameSize / 2, - ]; - const targetBox = { - min: [ - targetPosition[0] - frameSize / 2, - 0, - targetPosition[2] - frameSize / 2, - ], - max: [ - targetPosition[0] + frameSize / 2, - 0, - targetPosition[2] + frameSize / 2, - ], - }; - const _boxContains = (box, position) => { - return position[0] >= box.min[0] && position[0] <= box.max[0] && - position[1] >= box.min[1] && position[1] <= box.max[1] && - position[2] >= box.min[2] && position[2] <= box.max[2]; - }; - const _needledEntityIsWorn = needledEntity => { - const actions = realms.localPlayer.playerActions.toArray(); - const action = actions.find(action => action.action === 'wear' && action.appId === needledEntity.entityMap.arrayIndexId); - return !!action; - }; - const _getCollision = () => { - return Array.from(virtualWorld.worldApps.needledVirtualEntities.values()).find(needledEntityMap => { - const worn = _needledEntityIsWorn(needledEntityMap); - if (!worn) { - const position = needledEntityMap.get('position'); - return !!position && _boxContains(targetBox, position); - } else { - return false; - } - }); - }; - - const collidedVirtualMap = _getCollision(); - if (collidedVirtualMap) { - // deadhand - // Is emitted by addEntity(). - /* - const sourceRealm = collidedVirtualMap.headTracker.getHeadRealm(); - const deadHandUpdate = sourceRealm.dataClient.deadHandArrayMaps( - realms.localPlayer.playerApps.arrayId, - [collidedVirtualMap.entityMap.arrayIndexId], - realms.playerId, - ); - sourceRealm.emitUpdate(deadHandUpdate); - */ - - // track - // collidedVirtualMap.setHeadTracker(realms.localPlayer.playerApps.headTracker); - - // add app to the new location (player) - const collidedAppJson = collidedVirtualMap.toObject(); - const targetRealm = realms.localPlayer.headTracker.getHeadRealm(); - const newAppMap = realms.localPlayer.playerApps.addEntityAt( - collidedVirtualMap.entityMap.arrayIndexId, - collidedAppJson, - targetRealm, - ); - - // add new action - const action = { - position: targetPosition, - action: 'wear', - appId: collidedVirtualMap.entityMap.arrayIndexId, - }; - const newActionMap = realms.localPlayer.playerActions.addEntity(action, targetRealm); - - // remove from the old location (world) - // collidedVirtualMap.remove(); - virtualWorld.worldApps.removeEntityAt(collidedVirtualMap.entityMap.arrayIndexId); - - // livehand - // Is emitted by addEntity(). - /* - const liveHandUpdate = targetRealm.dataClient.liveHandArrayMaps( - realms.localPlayer.playerApps.arrayId, - [collidedVirtualMap.entityMap.arrayIndexId], - realms.playerId, - ); - sourceRealm.emitUpdate(liveHandUpdate); - */ - } else { - // console.log('got player apps', realms.localPlayer.playerApps.getSize()); - if (realms.localPlayer.playerActions.getSize() > 0) { - const targetRealm = realms.getClosestRealm(targetPosition); - if (targetRealm) { - // console.log('drop to target realm', targetRealm.key, targetRealm); - - // the app we will be dropping - const actions = realms.localPlayer.playerActions.toArray(); - const wearActionIndex = actions.findIndex(action => action.action === 'wear'); - const wearAction = actions[wearActionIndex]; - const {appId} = wearAction; - - const appIds = realms.localPlayer.playerApps.getKeys(); - const wearAppIndex = appIds.indexOf(appId); - - const firstAction = realms.localPlayer.playerActions.getVirtualMapAt(wearActionIndex); - const firstApp = realms.localPlayer.playerApps.getVirtualMapAt(wearAppIndex); - - // const newHeadTracker = new HeadTracker('drop'); - // newHeadTracker.setHeadRealm(firstApp.headTracker.getHeadRealm()); - // newHeadTracker.setConnectedRealms(firstApp.headTracker.getConnectedRealms()); - // firstApp.setHeadTracker(newHeadTracker); - - // firstApp.set('position', targetPosition); - - // set dead hands - // old location: player - // the player already has deadhand on all of its apps, probably? - // const deadHandUpdate = firstApp.headRealm.dataClient.deadHandArrayMaps( - // realms.localPlayer.playerApps.arrayId, - // [firstApp.entityMap.arrayIndexId], - // realms.playerId, - // ); - // firstApp.headRealm.emitUpdate(deadHandUpdate); - // new location: world - // deadhand - // Is emitted by addEntityAt(). - /* - const deadHandUpdate = targetRealm.dataClient.deadHandArrayMaps( - 'worldApps', - [firstApp.entityMap.arrayIndexId], - realms.playerId, - ); - targetRealm.emitUpdate(deadHandUpdate); - */ - - // add at the new location (world) - const firstAppJson = firstApp.toObject(); - firstAppJson.position = targetPosition; - const newPlayerAppMap = virtualWorld.worldApps.addEntityAt( - firstApp.entityMap.arrayIndexId, - firstAppJson, - targetRealm, - ); - // const newPlayerApp = virtualWorld.worldApps.getVirtualMap(newPlayerAppMap.arrayIndexId); - // newPlayerApp.headTracker.setHeadRealm(targetRealm); - - // remove from the old location (player) - // firstApp.remove(); - // firstAction.remove(); - realms.localPlayer.playerApps.removeEntityAt(appId); - realms.localPlayer.playerActions.removeEntityAt(firstAction.arrayIndexId); - - // livehand - // Is emitted by addEntity(). - /* - const liveHandUpdate = targetRealm.dataClient.liveHandArrayMap( - 'worldApps', - [firstApp.entityMap.arrayIndexId], - realms.playerId, - ); - targetRealm.emitUpdate(liveHandUpdate); - */ - - } else { - console.warn('no containing realm to drop to'); - } - } else { - console.warn('nothing to drop'); - } - } - }; - } - - getSize() { - return this.entityTracker.getSize(); - } - - addEntity(val, realm) { - return this.addEntityAt(makeId(), val, realm); - } - - getVirtualMap(arrayIndexId) { - const entityMap = this.entityTracker.virtualMaps.get(arrayIndexId); - const needledEntity = this.needledVirtualEntities.get(entityMap); - return needledEntity; - } - - getVirtualMapAt(index) { - return Array.from(this.needledVirtualEntities.values())[index]; - } - - getKeys() { - return Array.from(this.needledVirtualEntities.keys()).map(entityMap => { - return entityMap.arrayIndexId; - }); - } - - getValues() { - return Array.from(this.needledVirtualEntities.values()); - } - - toArray() { - return Array.from(this.needledVirtualEntities.values()).map(needledEntity => { - const realm = needledEntity.headTracker.getHeadRealm(); - const entityMap = needledEntity.entityMap; - const headMap = entityMap.getHeadMapFromRealm(realm); - return headMap.toObject(); - }); - } - - // linkedRealms = new Map(); - - link(realm) { - // if (!this.linkedRealms.has(realm.key)) { - // this.linkedRealms.set(realm.key, new Error().stack); - // } else { - // debugger; - // } - - // link the entity tracker - this.entityTracker.link(this.arrayId, realm); - - this.cleanupFns.set(realm, () => { - // unlink the entity tracker - this.entityTracker.unlink(this.arrayId, realm); - }); - } - - unlink(realm) { - // if (this.linkedRealms.has(realm.key)) { - // this.linkedRealms.delete(realm.key); - // } else { - // debugger; - // } - - this.cleanupFns.get(realm)(); - this.cleanupFns.delete(realm); - } -} - -// - -class VirtualIrc { - constructor(parent) { - this.parent = parent; - this.cleanupFns = new Map(); - } - - link(realm) { - const {networkedIrcClient} = realm; - - // note: this is not a good place for this, since it doesn't have to do with players - // it's here for convenience - const onchat = e => { - this.parent.dispatchEvent(new MessageEvent('chat', { - data: e.data, - })); - }; - networkedIrcClient.addEventListener('chat', onchat); - - this.cleanupFns.set(networkedIrcClient, () => { - networkedIrcClient.removeEventListener('chat', onchat); - }); - } - - unlink(realm) { - const {networkedIrcClient} = realm; - - this.cleanupFns.get(networkedIrcClient)(); - this.cleanupFns.delete(networkedIrcClient); - } -} - -// - -// one per arrayIndexId per EntityTracker -class HeadlessVirtualEntityMap extends EventTarget { - constructor(arrayIndexId) { - super(); - - this.arrayIndexId = arrayIndexId; - - this.maps = new Map(); // bound dc maps - this.cleanupFns = new Map(); - } - - getInitial(key) { // can only be used if there is one bound map - if (this.maps.size !== 1) { - debugger; - throw new Error('cannot get initial value: ' + this.maps.size); - } else { - const map = this.maps.values().next().value.map; - return map.getKey(key); - } - } - - getHeadMapFromRealm(realm) { - for (const map of this.maps.values()) { - if (map.map.dataClient === realm.dataClient) { - return map.map; - } - } - debugger; - return null; - } - - link(arrayId, realm) { - const key = arrayId + ':' + realm.key; - - // listen - const map = new DCMap(arrayId, this.arrayIndexId, realm.dataClient); - map.listen(); - this.maps.set(key, { - map, - realm, - }); - - const update = e => { - this.dispatchEvent(new MessageEvent('update', { - data: e.data, - })); - }; - map.addEventListener('update', update); - - this.dispatchEvent(new MessageEvent('link', { - data: { - appId: this.arrayIndexId, - arrayId, - realm, - }, - })); - - this.cleanupFns.set(key, () => { - map.removeEventListener('update', update); - - this.maps.delete(key); - - this.dispatchEvent(new MessageEvent('unlink', { - data: { - appId: this.arrayIndexId, - arrayId, - realm, - }, - })); - }); - } - - unlink(arrayId, realm) { - // console.log('unlink realm', realm.key, this.arrayIndexId); - - const key = arrayId + ':' + realm.key; - - this.cleanupFns.get(key)(); - this.cleanupFns.delete(key); - - // garbage collect - if (this.maps.size === 0) { - this.dispatchEvent(new MessageEvent('garbagecollect')); - } - } -} - -class NeedledVirtualEntityMap extends HeadTrackedEntity { - constructor(arrayId, entityMap) { - super(); - - this.arrayId = arrayId; - this.entityMap = entityMap; // headless entity map - - const onlink = e => { - const {realm} = e.data; - // console.log('needled entity map link', realm.key); - this.headTracker.linkRealm(realm); - }; - this.entityMap.addEventListener('link', onlink); - const onunlink = e => { - const {realm} = e.data; - // console.log('needled entity map unlink', realm.key); - this.headTracker.unlinkRealm(realm); - }; - this.entityMap.addEventListener('unlink', onunlink); - - this.destroy = () => { - this.entityMap.removeEventListener('link', onlink); - this.entityMap.removeEventListener('unlink', onunlink); - }; - - for (const {/* map, */ realm} of this.entityMap.maps.values()) { - this.headTracker.linkRealm(realm); - } - } - - get arrayIndexId() { - return this.entityMap.arrayIndexId; - } - - set arrayIndexId(arrayIndexId) { - throw new Error('cannot set arrayIndexId'); - } - - get(key) { - const realm = this.headTracker.getHeadRealm(); - const map = this.entityMap.getHeadMapFromRealm(realm); - return map.getKey(key); - } - - set(key, val) { - const realm = this.headTracker.getHeadRealm(); - const map = this.entityMap.getHeadMapFromRealm(realm); - const update = map.setKeyValueUpdate(key, val); - realm.emitUpdate(update); - } - - remove() { - const realm = this.headTracker.getHeadRealm(); - const map = this.entityMap.getHeadMapFromRealm(realm); - const array = map.dataClient.getArray(map.arrayId, map.arrayIndexId, { - listen: false, - }); - const update = array.removeAt(this.entityMap.arrayIndexId); - realm.emitUpdate(update); - } - - getKeys() { - const realm = this.headTracker.getHeadRealm(); - const map = this.entityMap.getHeadMapFromRealm(realm); - const keys = map.getKeys(); - return keys; - } - - toObject() { - const realm = this.headTracker.getHeadRealm(); - const map = this.entityMap.getHeadMapFromRealm(realm); - return map.toObject(); - } -} - -// - -export class NetworkRealm extends EventTarget { - constructor(key, parent) { - super(); - - this.parent = parent; - - this.key = key; - this.connected = false; - - const dc1 = new DataClient({ - crdt: new Map(), - userData: { - realm: this, - }, - }); - this.dataClient = dc1; - this.ws = null; - this.networkedDataClient = new NetworkedDataClient(dc1, { - userData: { - realm: this, - }, - }); - this.networkedCrdtClient = new NetworkedCrdtClient(); - this.networkedLockClient = new NetworkedLockClient(); - this.networkedIrcClient = new NetworkedIrcClient(this.parent.playerId); - this.networkedAudioClient = new NetworkedAudioClient({ - playerId: this.parent.playerId, - // audioManager: this.parent.audioManager, - }); - this.networkedVideoClient = new NetworkedVideoClient({ - playerId: this.parent.playerId, - }); - - // this.microphoneSource = null; - } - - sendChatMessage(message) { - this.networkedIrcClient.sendChatMessage(message); - } - - async connect() { - this.dispatchEvent(new Event('connecting')); - - const ws1 = createWs(this.parent.endpointUrl, 'realm:' + this.key, this.parent.playerId); - ws1.binaryType = 'arraybuffer'; - this.ws = ws1; - this.ws.onerror = err => { - console.warn(err); - // if (this.connected) { - // this.disconnect({ - // errored: true, - // }); - // } - }; - this.ws.onclose = () => { - // if (this.connected) { - this.disconnect(); - // } - }; - await Promise.all([ - this.networkedDataClient.connect(ws1).then(() => { - // console.log('networkedDataClient connected'); - }), - this.networkedCrdtClient.connect(ws1).then(() => { - // console.log('networkedCrdtClient connected'); - }), - this.networkedLockClient.connect(ws1).then(() => { - // console.log('networkedLockClient connected'); - }), - this.networkedIrcClient.connect(ws1).then(() => { - // console.log('networkedIrcClient connected'); - }), - this.networkedAudioClient.connect(ws1).then(() => { - // console.log('networkedAudioClient connected'); - }), - this.networkedVideoClient.connect(ws1).then(() => { - // console.log('networkedVideoClient connected'); - }), - ]); - this.connected = true; - - this.dispatchEvent(new Event('connect')); - } - - *getClearUpdateFns() { - const playersArray = this.dataClient.getArray('players', { - listen: false, - }); - - // players - const playerIds = playersArray.getKeys(); - for (const playerId of playerIds) { - const playerAppsArray = this.dataClient.getArray('playerApps:' + playerId, { - listen: false, - }); - const playerActionsArray = this.dataClient.getArray('playerActions:' + playerId, { - listen: false, - }); - - // actions - for (const actionId of playerActionsArray.getKeys()) { - yield () => playerActionsArray.removeAt(actionId); - } - // apps - for (const appId of playerAppsArray.getKeys()) { - yield () => playerAppsArray.removeAt(appId); - } - // player - yield () => playersArray.removeAt(playerId); - } - } - - flush() { - const clearUpdateFns = this.getClearUpdateFns(); - for (const clearUpdateFn of clearUpdateFns) { - const clearUpdate = clearUpdateFn(); - this.dataClient.emitUpdate(clearUpdate); - } - } - - disconnect() { - // this.dispatchEvent(new Event('disconnecting')); - - this.connected = false; - - if (this.ws.readyState === WebSocket.OPEN) { - if (this.ws.terminate) { - this.ws.terminate(); - } else { - this.ws.close(); - } - } - - this.dispatchEvent(new MessageEvent('disconnect', { - data: {}, - })); - } - - emitUpdate(update) { - this.dataClient.emitUpdate(update); - this.networkedDataClient.emitUpdate(update); - } -} - -// - -class VirtualWorld extends EventTarget { - constructor(arrayId, realms, opts) { - super(); - - this.worldApps = new VirtualEntityArray(arrayId, realms, { - entityTracker: opts?.entityTracker, - }); - } - - link(realm) { - this.worldApps.link(realm); - } - - unlink(realm) { - this.worldApps.unlink(realm); - } -} - -// - -// The set of network realms at and surrounding the player's current location in the current scene. -// Properties: -// - localPlayer - The user's player object. -// Events: -// - realmconnecting - MessageEvent fired when a connection to a new realm is being established. Event data contains the -// NetworkRealm being connected to. -// - realmjoin - MessageEvent fired when a connection to a new realm has been established. Event data contains the NetworkRealm -// that has been connected to. -// - realmleave - MessageEvent fired when a connection to an old realm has been removed. Event data contains the NetworkRealm -// that has been disconnected from. -// - networkreconfigure - MessageEvent fired when the set of realms connected to changes. Event data is empty. -// - chat - MessageEvent fired when a chat message is receive from a remote player in the realms. Event data contains the chat -// message. -export class NetworkRealms extends EventTarget { - // Constructs a NetworkRealms object and connects the local player to multiplayer. - // - endpointUrl - The URL of the multiplayer server to connect to. - // - sceneId - A unique alphanumeric string identifying the scene. - // - playerId - A unique alphanumeric string identifying the local player. - // - audioContext - The Web Audio API AudioContext to use for audio. - // The 'chat' event is dispatched within VirtualIrc. - constructor({ - endpointUrl, - playerId, - // audioManager, - // metadata = null, - }) { - super(); - - if (!endpointUrl /* || !playerId || !audioManager*/) { - console.warn('got bad network realms args', { - endpointUrl, - // playerId, - // audioManager, - }); - // throw new Error('invalid arguments'); - debugger; - } - this.endpointUrl = endpointUrl; - this.playerId = playerId; - // this.audioManager = audioManager; - // this.metadata = metadata; - - // this.lastKey = ''; - // this.lastPosition = [NaN, NaN, NaN]; - this.appsEntityTracker = new EntityTracker(); - this.localPlayer = this.playerId ? new VirtualPlayer('players', this.playerId, this, 'local', { - appsEntityTracker: this.appsEntityTracker, - }) : null; - this.world = new VirtualWorld('worldApps', this, { - entityTracker: this.appsEntityTracker, - }); - - this.lastRealmsKeys = []; - this.lastRootRealmKey = null; - - // Provide entity add/remove events. - this.appsEntityTracker.addEventListener('entityadd', e => { - // Add to the event queue after allowing internal event handlers to have been called. - // setTimeout(() => { - // console.log('check is updating', e.data.realm.parent.isUpdating()); - if (!e.data.realm.parent.isUpdating()) { - this.dispatchEvent(new MessageEvent('entityadd', {data: e.data})); - } - // }, 0); - }); - this.appsEntityTracker.addEventListener('entityremove', e => { - // Add to the event queue after allowing internal event handlers to have been called. - // setTimeout(() => { - if (!e.data.realm.parent.isUpdating()) { - this.dispatchEvent(new MessageEvent('entityremove', {data: e.data})); - } - // }, 0); - }); - this.appsEntityTracker.addEventListener('entitytransplant', e => { - if (!e.data.realm.parent.isUpdating()) { - this.dispatchEvent(new MessageEvent('entitytransplant', {data: e.data})); - } - }); - - this.players = new VirtualPlayersArray('players', this, { - appsEntityTracker: this.appsEntityTracker, - }); - if (this.localPlayer) { - this.localPlayer.headTracker.onMigrate = async e => { - const {oldHeadRealm, newHeadRealm} = e.data; - - console.log('migrate', oldHeadRealm.key, '->', newHeadRealm.key); - - // old objects - const oldPlayersArray = oldHeadRealm.dataClient.getArray(this.localPlayer.arrayId, { - listen: false, - }); - const oldPlayerAppsArray = oldHeadRealm.dataClient.getArray('playerApps:' + this.playerId, { - listen: false, - }); - const oldPlayerActionsArray = oldHeadRealm.dataClient.getArray('playerActions:' + this.playerId, { - listen: false, - }); - const oldPlayerMap = oldPlayersArray.getMap(this.playerId, { - listen: false, - }); - - // new objects - /* const newPlayersArray = newHeadRealm.dataClient.getArray(this.localPlayer.arrayId, { - listen: false, - }); - const newPlayerAppsArray = newHeadRealm.dataClient.getArray('playerApps:' + this.playerId, { - listen: false, - }); - const newPlayerActionsArray = newHeadRealm.dataClient.getArray('playerActions:' + this.playerId, { - listen: false, - }); */ - - // set dead hands - const deadHandKeys = [ - this.localPlayer.arrayId + '.' + this.localPlayer.arrayIndexId, // player - 'playerApps:' + this.localPlayer.arrayIndexId, // playerApps - 'playerActions:' + this.localPlayer.arrayIndexId, // playerActions - ]; - const _emitDeadHands = realm => { - const deadHandupdate = realm.dataClient.deadHandKeys(deadHandKeys, this.playerId); - realm.emitUpdate(deadHandupdate); - }; - _emitDeadHands(oldHeadRealm); - _emitDeadHands(newHeadRealm); - - // add new - // import apps - const _applyMessageToRealm = (realm, message) => { - const uint8Array = serializeMessage(message); - const updateObject = parseUpdateObject(uint8Array); - const { - rollback, - update, - } = realm.dataClient.applyUpdateObject(updateObject, { - force: true, // since coming from the server - }); - if (rollback) { - throw new Error('migrate failed 1'); - } - if (update) { - realm.emitUpdate(update); - } else { - throw new Error('migrate failed 2'); - } - }; - const _importPlayer = () => { - const playerAppsImportMessages = oldPlayerAppsArray.importArrayUpdates(); - for (const m of playerAppsImportMessages) { - _applyMessageToRealm(newHeadRealm, m); - } - // import actions - const playerActionsImportMessages = oldPlayerActionsArray.importArrayUpdates(); - for (const m of playerActionsImportMessages) { - _applyMessageToRealm(newHeadRealm, m); - } - // import player - const playerImportMessage = oldPlayerMap.importMapUpdate(); - _applyMessageToRealm(newHeadRealm, playerImportMessage); - }; - _importPlayer(); - - // migrate networked audio client - this.migrateAudioRealm(oldHeadRealm, newHeadRealm); - this.migrateVideoRealm(oldHeadRealm, newHeadRealm); - - await this.sync(); - - // delete old - // delete apps - const _deleteOldArrayMaps = () => { - for (const arrayIndexId of oldPlayerAppsArray.getKeys()) { - const update = oldPlayerAppsArray.removeAt(arrayIndexId); - oldHeadRealm.emitUpdate(update); - } - // delete actions - for (const arrayIndexId of oldPlayerActionsArray.getKeys()) { - const update = oldPlayerActionsArray.removeAt(arrayIndexId); - oldHeadRealm.emitUpdate(update); - } - // delete player - const oldPlayerRemoveUpdate = oldPlayerMap.removeUpdate(); - oldHeadRealm.emitUpdate(oldPlayerRemoveUpdate); - }; - _deleteOldArrayMaps(); - }; - } - - this.irc = new VirtualIrc(this); - this.connectedRealms = new Set(); - this.migrateTx = makeTransactionHandler(); - - this.realmsCleanupFns = new Map(); - this.addEventListener('realmjoin', e => { - const {realm} = e.data; - const {dataClient, networkedDataClient} = realm; - - const onsyn = e => { - const {synId} = e.data; - const synAckMessage = dataClient.getSynAckMessage(synId); - networkedDataClient.emitUpdate(synAckMessage); - }; - dataClient.addEventListener('syn', onsyn); - - const cleanupFns = [ - () => { - dataClient.removeEventListener('syn', onsyn); - }, - ]; - - this.realmsCleanupFns.set(realm, () => { - for (const cleanupFn of cleanupFns) { - cleanupFn(); - } - }); - }); - this.addEventListener('realmleave', e => { - const {realm} = e.data; - - const fn =this.realmsCleanupFns.get(realm); - if (fn) { - fn(); - this.realmsCleanupFns.delete(realm); - } - - this.connectedRealms.delete(realm); - - // if no more realms, dispatchEvent disconnect - // console.log('remaining size', this.connectedRealms.size); - if (this.connectedRealms.size === 0) { - this.dispatchEvent(new MessageEvent('disconnect', { - data: {}, - })); - } - }); - - this.audioSources = []; - this.videoSources = []; - } - - #updating = false; - isUpdating() { - return this.#updating; - } - tx(fn) { - this.#updating = true; - // console.log('set updating 1'); - try { - fn(); - } finally { - this.#updating = false; - // console.log('set updating 2'); - } - } - - // Gets the other players also present in the local player's NetworkRealms. - getVirtualPlayers() { - return this.players; - } - - // Gets the world of apps present in the local player's NetworkRealms. - getVirtualWorld() { - return this.world; - } - - // Gets the realm connected to at the player's position. - // Returns: The NetworkRealm at the player's position if there is one connected to, null if there's none. - // XXX in the future, this can be done by passing in a predicate function - getClosestRealm(realmKey) { - for (const realm of this.connectedRealms) { - if (realm.connected) { - if (realm.key === realmKey) { - return realm; - } - } - } - return null; - } - - // Internal method. - async sync() { - // for all realms - const promises = Array.from(this.connectedRealms.values()).map(async realm => { - const {dataClient} = realm; - - const playersArray = dataClient.getArray('players', { - listen: false, - }); - const playersArrayMaps = playersArray.getMaps(); - const numPlayers = playersArrayMaps.filter(player => player.arrayIndexId !== this.playerId).length; - // console.log('sync', numPlayers, playersArray.getKeys(), playersArrayMaps, this.playerId); - if (numPlayers > 0) { - const synId = makeId(); - const synMessage = dataClient.getSynMessage(synId); - realm.networkedDataClient.emitUpdate(synMessage); - // console.log('emit to ws', realm.key, playersArrayMaps.map(p => p.arrayIndexId), realm.networkedDataClient.ws.readyState); - - // wait for >= numPlayers synAcks, with a 2-second timeout - await new Promise((resolve, reject) => { - let seenSynAcks = 0; - const onSynAck = e => { - if (e.data.synId === synId) { - seenSynAcks++; - if (seenSynAcks >= numPlayers) { - cleanup(); - resolve(); - } - } - }; - dataClient.addEventListener('synAck', onSynAck); - - const timeout = setTimeout(() => { - console.log('timeout', realm.key, playersArrayMaps); - cleanup(); - resolve(); - }, 2000); - - const cleanup = () => { - dataClient.removeEventListener('synAck', onSynAck); - clearTimeout(timeout); - }; - }); - } else { - // throw new Error('expected at least 1 player'); - } - }); - await Promise.all(promises); - } - - addAudioSource(audioSource) { - const headRealm = this.localPlayer.headTracker.getHeadRealm(); - const {networkedAudioClient} = headRealm; - - this.audioSources.push(audioSource); - - return networkedAudioClient.addAudioSource(audioSource); - } - removeAudioSource(audioSource) { - const index = this.audioSources.indexOf(audioSource); - if (index !== -1) { - this.audioSources.splice(index, 1); - - const headRealm = this.localPlayer.headTracker.getHeadRealm(); - const {networkedAudioClient} = headRealm; - networkedAudioClient.removeAudioSource(audioSource); - } else { - console.warn('audio source not found', audioSource); - } - } - // Internal method. - migrateAudioRealm(oldRealm, newRealm) { - const {networkedAudioClient: oldNetworkedAudioClient} = oldRealm; - const {networkedAudioClient: newNetworkedAudioClient} = newRealm; - for (const audioSource of this.audioSources) { - oldNetworkedAudioClient.removeAudioSource(audioSource); - newNetworkedAudioClient.addAudioSource(audioSource); - } - } - - addVideoSource(videoSource) { - const headRealm = this.localPlayer.headTracker.getHeadRealm(); - const {networkedVideoClient} = headRealm; - - return networkedVideoClient.addVideoSource(videoSource); - } - removeVideoSource(videoSource) { - const index = this.videoSources.indexOf(videoSource); - if (index !== -1) { - this.videoSources.splice(index, 1); - - const headRealm = this.localPlayer.headTracker.getHeadRealm(); - const {networkedVideoClient} = headRealm; - networkedVideoClient.removeVideoSource(videoSource); - } else { - console.warn('video source not found', videoSource); - } - } - // Internal method. - migrateVideoRealm(oldRealm, newRealm) { - const {networkedVideoClient: oldNetworkedVideoClient} = oldRealm; - const {networkedVideoClient: newNetworkedVideoClient} = newRealm; - for (const videoSource of this.videoSources) { - oldNetworkedVideoClient.removeVideoSource(videoSource); - newNetworkedVideoClient.addVideoSource(videoSource); - } - } - - isConnected() { - const headRealm = this.getClosestRealm(this.lastRootRealmKey); - return !!headRealm; - } - - // Sends a chat message to the realm that the local player is in. - // - message - String to send. - sendChatMessage(message) { - // const headRealm = this.localPlayer.headTracker.getHeadRealm(); - const headRealm = this.getClosestRealm(this.lastRootRealmKey); - if (headRealm) { - headRealm.sendChatMessage(message); - } else { - throw new Error('no connected realm to send chat message to: ' + this.lastRootRealmKey + ': ' + Array.from(this.connectedRealms.values()).map(realm => realm.key).join(',') + '\n' + new Error().stack); - } - } - - // Updates the set of realms connected to based on the local player's position. - // - realmsKeys: The realm string keys to connect to; the first one is the one the local player is in. - // - onConnect: Optional callback to call when the realms are connected to. - async updateRealmsKeys({ - realmsKeys = [], - rootRealmKey = realmsKeys.length > 0 ? realmsKeys[0] : null, - } = {}) { - // if (realmsKeys.length === 0) { - // throw new Error('at least one realm key required'); - // } - - // const snappedPosition = position.map(v => Math.floor(v / realmSize) * realmSize); - /* if (!arrayEquals(snappedPosition, this.lastPosition)) */ - if (!arrayEquals(realmsKeys, this.lastRealmsKeys)) { - // this.lastPosition[0] = snappedPosition[0]; - // this.lastPosition[1] = snappedPosition[1]; - // this.lastPosition[2] = snappedPosition[2]; - this.lastRealmsKeys = realmsKeys; - - await this.migrateTx(async () => { - const oldNumConnectedRealms = this.connectedRealms.size; - - const candidateRealms = []; - for (let i = 0; i < realmsKeys.length; i++) { - const realmsKey = realmsKeys[i]; - // for (let dx = -1; dx <= 1; dx++) { - // const min = [ - // Math.floor((snappedPosition[0] + dx * realmSize) / realmSize) * realmSize, - // 0, - // Math.floor((snappedPosition[2] + dz * realmSize) / realmSize) * realmSize, - // ]; - const realm = new NetworkRealm(realmsKey, /*min, realmSize,*/ this); - realm.addEventListener('disconnect', e => { - // const { - // errored, - // } = e.data; - - // if (errored) { - // this.connectedRealms.delete(realm); - // this performs the actual removal - this.dispatchEvent(new MessageEvent('realmleave', { - data: { - realm, - }, - })); - // } - }); - candidateRealms.push(realm); - // } - } - - // check if we need to connect to new realms - const connectPromises = []; - for (const realm of candidateRealms) { - let foundRealm = null; - for (const connectedRealm of this.connectedRealms) { - if (connectedRealm.key === realm.key) { - foundRealm = connectedRealm; - break; - } - } - - if (!foundRealm) { - this.dispatchEvent(new MessageEvent('realmconnecting', { - data: { - realm, - }, - })); - - const connectPromise = (async () => { - await realm.connect(); - - this.players.link(realm); - this.localPlayer && this.localPlayer.link(realm); - this.world.link(realm); - this.irc.link(realm); - - this.connectedRealms.add(realm); - - this.dispatchEvent(new MessageEvent('realmjoin', { - data: { - realm, - }, - })); - })(); - connectPromises.push(connectPromise); - } - } - await Promise.all(connectPromises); - - this.lastRootRealmKey = rootRealmKey; - - // if this is the first network configuration, initialize our local player - if (oldNumConnectedRealms === 0 && connectPromises.length > 0) { - // onConnect && await onConnect(); - let promise = Promise.resolve(); - const e = new MessageEvent('connect', { - data: { - rootRealmKey, - }, - }); - e.waitUntil = p => { - promise = p; - }; - this.dispatchEvent(e); - - await promise; - } - // we are in the middle of a network configuration, so take the opportunity to migrate the local player if necessary - // await this.localPlayer.headTracker.tryMigrate(position); - this.localPlayer && await this.localPlayer.headTracker.tryMigrate(rootRealmKey); - - // check if we need to disconnect from any realms - const oldRealms = []; - for (const connectedRealm of this.connectedRealms) { - if (!candidateRealms.find(candidateRealm => candidateRealm.key === connectedRealm.key)) { - // first, disconnect to make sure no corrupted state goes on the network - connectedRealm.disconnect(); - - // note: we must perform a flush before unlinking - // otherwise, the remove handlers will be unlinked by the time we emit - connectedRealm.flush(); - - // unlink arrays - this.players.unlink(connectedRealm); - this.localPlayer && this.localPlayer.unlink(connectedRealm); - this.world.unlink(connectedRealm); - this.irc.unlink(connectedRealm); - - // bookkeeping - // this.connectedRealms.delete(connectedRealm); - oldRealms.push(connectedRealm); - } - } - for (const oldRealm of oldRealms) { - // this performs the actual removal - this.dispatchEvent(new MessageEvent('realmleave', { - data: { - realm: oldRealm, - }, - })); - } - - // emit the fact that the network was reconfigured - this.dispatchEvent(new MessageEvent('networkreconfigure', { - data: {}, - })); - }); - } - } - - // Disconnects the local player from multiplayer. - disconnect() { - for (const connectedRealm of this.connectedRealms) { - connectedRealm.disconnect(); - connectedRealm.flush(); - this.players.unlink(connectedRealm); - this.localPlayer.unlink(connectedRealm); - this.world.unlink(connectedRealm); - this.irc.unlink(connectedRealm); - // this.connectedRealms.delete(connectedRealm); - // this performs the actual removal - // this.dispatchEvent(new MessageEvent('realmleave', { - // data: { - // realm: connectedRealm, - // }, - // })); - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/renderers/html-renderer.js b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/renderers/html-renderer.js deleted file mode 100644 index bc8867e86..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/renderers/html-renderer.js +++ /dev/null @@ -1,625 +0,0 @@ -import {frameSize, realmSize, inventoryFrameSize} from '../constants.js'; -import {zstringify} from '../util.mjs'; - -// - -const rockImg = new Image(); -rockImg.src = '/public/images/rock.png'; - -// - -/* export class LocalPlayerHtmlRenderer { - constructor(localPlayerId, virtualPlayer) { - this.localPlayerId = localPlayerId; - this.virtualPlayer = virtualPlayer; - - const div = document.createElement('div'); - div.id = 'inventory'; - document.body.appendChild(div); - - // const playerAppsEntityAdd = e => { - // console.log('html renderer got player apps add', e.data); - // }; - // virtualPlayer.playerApps.addEventListener('entityadd', playerAppsEntityAdd); - - // const playerActionsEntityAdd = e => { - // console.log('html renderer got player actions add', e.data); - // }; - // virtualPlayer.playerActions.addEventListener('entityadd', playerActionsEntityAdd); - - this.cleanupFn = () => { - document.body.removeChild(div); - - // virtualPlayer.removeEventListener('entityadd', playerAppsEntityAdd); - // virtualPlayer.removeEventListener('entityadd', playerActionsEntityAdd); - }; - } - destroy() { - this.cleanupFn(); - } -} */ - -export class RemotePlayerCursorHtmlRenderer { - constructor(remotePlayerId, localPlayerId, virtualPlayer) { - this.remotePlayerId = remotePlayerId; - this.localPlayerId = localPlayerId; - this.virtualPlayer = virtualPlayer; - - const div = document.createElement('div'); - div.className = 'player-cursor'; - div.style.cssText = `\ - background-color: ${this.remotePlayerId === this.localPlayerId ? 'blue' : 'red'}; - `; - document.body.appendChild(div); - - // console.log('new cursor'); - - // const map = this.dataClient.getArrayMap('players', this.remotePlayerId); - // console.log('virtual player update listen'); - const update = e => { - // console.log('html renderer got player map update', e.data); - - const {key, val} = e.data; - // console.log('got key', key); - if (key === 'cursorPosition') { - const [x, y, z] = val; - div.style.transform = `translate3d(${x}px, ${y}px, 0)`; - } - }; - virtualPlayer.addEventListener('update', update); - - this.cleanupFn = () => { - document.body.removeChild(div); - - virtualPlayer.removeEventListener('update', update); - }; - } - - destroy() { - this.cleanupFn(); - } -} - -// - -export class AppsHtmlRenderer { - constructor(realms) { - const _render = () => { - const worldAppsEl = document.getElementById('world-apps'); - - let worldAppIndex = 0; - const playerAppIndexes = new Map(); - const _makeAppEl = () => { - const appEl = rockImg.cloneNode(); - appEl.classList.add('world-app'); - return appEl; - }; - const _pushWorldApp = needledEntity => { - const wearSpec = _getWearSpec(needledEntity); - if (wearSpec) { - // console.log('got wear spec', wearSpec); - const { - wearPlayerId, - wearNeedledEntity, - } = wearSpec; - // if (wearPlayerId !== realms.playerId) { - // debugger; - // throw new Error('only local player is supported'); - // } - - const playerAppIndex = playerAppIndexes.get(wearPlayerId) ?? 0; - playerAppIndexes.set(wearPlayerId, playerAppIndex + 1); - - const playerEl = document.getElementById(`player-${wearPlayerId}`); - const playerApps = playerEl.querySelector('.player-apps'); - const had = !!playerApps.childNodes[playerAppIndex]; - const appEl = playerApps.childNodes[playerAppIndex] || _makeAppEl(); - - // appEl.style.left = `${playerAppIndex * inventoryFrameSize}px`; - // appEl.style.top = null; - appEl.style.transform = `translate3d(${playerAppIndex * inventoryFrameSize}px, 0, 0)`; - - // console.log('append child', wearPlayerId, needledEntity.arrayIndexId); - - !had && playerApps.appendChild(appEl); - - // debugger; - } else { - // console.log('world app'); - - const had = !!worldAppsEl.childNodes[worldAppIndex]; - const appEl = worldAppsEl.childNodes[worldAppIndex] || _makeAppEl(); - - const app = needledEntity.toObject(); - const position = app.position ?? [0, 0, 0]; - // appEl.style.left = `${position[0]}px`; - // appEl.style.top = `${position[2]}px`; - appEl.style.transform = `translate3d(${position[0]}px, ${position[2]}px, 0)`; - - !had && worldAppsEl.appendChild(appEl); - - worldAppIndex++; - } - }; - const _finalizeWorldApps = () => { - while (worldAppsEl.children.length > worldAppIndex) { - worldAppsEl.removeChild(worldAppsEl.lastChild); - } - - const playersEl = document.getElementById('players'); - for (const playerEl of playersEl.childNodes) { - const playerApps = playerEl.querySelector('.player-apps'); - const playerId = playerEl.id.slice('player-'.length); - const playerAppIndex = playerAppIndexes.get(playerId) ?? 0; - while (playerApps.children.length > playerAppIndex) { - playerApps.removeChild(playerApps.lastChild); - } - } - }; - - for (const needledEntity of worldAppEntities.values()) { - _pushWorldApp(needledEntity); - } - _finalizeWorldApps(); - }; - const update = () => { - _render(); - }; - const _getWearSpec = virtualEntity => { - const playerActionIdsMap = new Map(); - const allPlayerActions = Array.from(playerActions.values()).concat( - Array.from(remotePlayerActions.values()) - .flatMap(set => Array.from(set)), - ); - /* const allPlayerActions = realms.localPlayer.playerActions.getValues() - .concat( - realms.players.getValues() - .flatMap(player => player.playerActions.getValues()) - ); */ - allPlayerActions.forEach(playerAction => { - const match = playerAction.arrayId.match(/^([^:]+?):([^:]+?)$/); - if (match) { - const playerId = match[2]; - playerActionIdsMap.set(playerAction.entityMap.arrayIndexId, playerId); - } else { - debugger; - } - }); - - const actionIds = allPlayerActions.map(a => a.arrayIndexId); - const actions = Array.from(allPlayerActions.values()).map(playerAction => playerAction.toObject()); - const wearActionIndex = actions.findIndex(action => action.action === 'wear' && action.appId === virtualEntity.entityMap.arrayIndexId); - const wearAction = actions[wearActionIndex]; - const wearActionId = actionIds[wearActionIndex]; // XXX wrong - - if (wearAction) { - const wearPlayerId = playerActionIdsMap.get(wearActionId); - const wearNeedledEntity = playerApps.get(wearAction.appId); - return { - wearPlayerId, - wearNeedledEntity, - }; - } else { - return null; - } - }; - - // local players - const playerApps = new Map(); - const playerActions = new Map(); - realms.localPlayer.playerApps.addEventListener('needledentityadd', e => { - // console.log('got app', e.data); - const {needledEntity} = e.data; - playerApps.set(needledEntity.entityMap.arrayIndexId, needledEntity); - - needledEntity.addEventListener('update', update); - }); - realms.localPlayer.playerApps.addEventListener('needledentityremove', e => { - // console.log('remove app', e.data); - const {needledEntity} = e.data; - - needledEntity.removeEventListener('update', update); - - playerApps.delete(needledEntity.entityMap.arrayIndexId); - }); - realms.localPlayer.playerActions.addEventListener('needledentityadd', e => { - const {needledEntity} = e.data; - playerActions.set(needledEntity.entityMap.arrayIndexId, needledEntity); - - update(); - }); - realms.localPlayer.playerActions.addEventListener('needledentityremove', e => { - const {needledEntity} = e.data; - playerActions.delete(needledEntity.entityMap.arrayIndexId); - - update(); - }); - - // remote players - const remotePlayerActions = new Map(); - const remotePlayersCleanupFns = new Map(); - realms.players.addEventListener('join', e => { - // console.log('remote player join', e.data); - const {playerId, player} = e.data; - - const localRemotePlayerActions = new Set(); - remotePlayerActions.set(playerId, localRemotePlayerActions); - const onappadd = e => { - const {entityId, needledEntity} = e.data; - localRemotePlayerActions.add(needledEntity); - - update(); - }; - player.playerActions.addEventListener('needledentityadd', onappadd); - const onappremove = e => { - const {entityId, needledEntity} = e.data; - // if (!needledEntity) { - // debugger; - // } - localRemotePlayerActions.delete(needledEntity); - - update(); - }; - player.playerActions.addEventListener('needledentityremove', onappremove); - - // intialize starting actions - for (const playerActionId of player.playerActions.getKeys()) { - const needledEntity = player.playerActions.getVirtualMap(playerActionId); - localRemotePlayerActions.add(needledEntity); - } - - remotePlayersCleanupFns.set(playerId, () => { - player.playerApps.removeEventListener('needledentityadd', onappadd); - player.playerApps.removeEventListener('needledentityremove', onappremove); - - remotePlayerActions.delete(playerId); - }); - - update(); - }); - realms.players.addEventListener('leave', e => { - // console.log('remote player leave', e.data); - const {playerId} = e.data; - remotePlayersCleanupFns.get(playerId)(); - remotePlayersCleanupFns.delete(playerId); - - update(); - }); - - // world apps - const worldAppEntities = new Map(); - const virtualWorld = realms.getVirtualWorld(); - virtualWorld.worldApps.addEventListener('needledentityadd', e => { - const {needledEntity} = e.data; - - worldAppEntities.set(needledEntity.entityMap.arrayIndexId, needledEntity); - - // needledEntity.addEventListener('update', update); - - update(); - }); - virtualWorld.worldApps.addEventListener('needledentityremove', e => { - const {needledEntity} = e.data; - // const realm = needledEntity.headTracker.getHeadRealm(); - - worldAppEntities.delete(needledEntity.entityMap.arrayIndexId); - - // needledEntity.removeEventListener('update', update); - - update(); - }); - - window.realms = realms; - window.playerApps = playerApps; - window.playerActions = playerActions; - window.worldAppEntities = worldAppEntities; - window.sanityCheck = () => { - Array.from(playerActions.values()).map(playerAction => playerAction.toObject()); - }; - } -} - -// - -const spriteUrl = '/public/images/fire-mage.png'; -export class GamePlayerCanvas { - constructor(virtualPlayer, { - local = true, - } = {}) { - this.virtualPlayer = virtualPlayer; - this.local = local; - - this.element = document.createElement('div'); - this.element.id = `player-${virtualPlayer.arrayIndexId}`; - // this.element.className = 'game-player'; - this.element.classList.add('player-sprite'); - - this.element.tabIndex = -1; - - this.canvas = document.createElement('canvas'); - this.canvas.width = frameSize; - this.canvas.height = frameSize; - this.ctx = this.canvas.getContext('2d'); - this.element.appendChild(this.canvas); - - const playerAppsEl = document.createElement('div'); - playerAppsEl.className = 'player-apps'; - this.element.appendChild(playerAppsEl); - - this.velocity = [0, 0, 0]; - this.cancelFn = null; - - const update = e => { - const {key, val} = e.data; - if (['position', 'direction'].includes(key)) { - this.draw(); - } - if (key === 'position') { - // console.log('position update event', key, val, new Error().stack); - } - }; - virtualPlayer.addEventListener('update', update); - - this.destroy = () => { - virtualPlayer.removeEventListener('update', update); - }; - } - - move() { - const oldPosition = this.virtualPlayer.getKeyValue('position'); - const oldDirection = this.virtualPlayer.getKeyValue('direction'); - - const speed = 5; - - const _updatePosition = () => { - const position = [ - oldPosition[0], - oldPosition[1], - oldPosition[2], - ]; - if (this.velocity[0] !== 0 || this.velocity[2] !== 0) { - position[0] += this.velocity[0] * speed; - position[2] += this.velocity[2] * speed; - - this.virtualPlayer.setKeyValue('position', position); - } - }; - _updatePosition(); - const _updateDirection = () => { - const direction = [ - oldDirection[0], - oldDirection[1], - oldDirection[2], - ]; - let directionChanged = false; - if (this.velocity[2] < 0) { - direction[0] = 0; - direction[2] = -1; - directionChanged = true; - } else if (this.velocity[0] < 0) { - direction[0] = -1; - direction[2] = 0; - directionChanged = true; - } else if (this.velocity[0] > 0) { - direction[0] = 1; - direction[2] = 0; - directionChanged = true; - } else if (this.velocity[2] > 0) { - direction[0] = 0; - direction[2] = 1; - directionChanged = true; - } else { - // nothing - } - if (directionChanged) { - this.virtualPlayer.setKeyValue('direction', direction); - } - }; - _updateDirection(); - } - - draw() { - if (GamePlayerCanvas.#spriteImg) { - const direction = this.virtualPlayer.getKeyValue('direction'); - - let row; - if (direction[0] === -1) { - row = 1; - } else if (direction[0] === 1) { - row = 2; - } else if (direction[2] === -1) { - row = 3; - } else { - row = 0; - } - const timestamp = performance.now(); - const frameLoopTime = 200; - const col = Math.floor(timestamp / frameLoopTime) % 3; - - this.ctx.clearRect(0, 0, frameSize, frameSize); - this.ctx.drawImage(GamePlayerCanvas.#spriteImg, col * frameSize, row * frameSize, frameSize, frameSize, 0, 0, frameSize, frameSize); - - if (!this.local) { - const remotePlayerPosition = this.virtualPlayer.getKeyValue('position'); - // const localPlayerPosition = realms.localPlayer.getKeyValue('position'); - - this.element.style.transform = `translate3d(${remotePlayerPosition[0]}px, ${remotePlayerPosition[2]}px, 0)`; - } - } - } - - static #spriteImg = null; - static async waitForLoad() { - this.#spriteImg = await new Promise((accept, reject) => { - const img = new Image(); - img.onload = () => { - const canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - const ctx = canvas.getContext('2d'); - // replace the color #24886d with transparent - ctx.drawImage(img, 0, 0); - const imageData = ctx.getImageData(0, 0, img.width, img.height); - const data = imageData.data; - const _isInRange = (v, base, range) => v >= (base - range) && v <= (base + range); - const _isInRangeN = (v, base) => _isInRange(v, base, 5); - for (let i = 0; i < data.length; i += 4) { - if (_isInRangeN(data[i], 0x24) && _isInRangeN(data[i+1], 0x88) && _isInRangeN(data[i+2], 0x6d)) { - data[i+3] = 0; - } - } - ctx.putImageData(imageData, 0, 0); - - accept(canvas); - }; - img.onerror = err => { - reject(err); - }; - img.src = spriteUrl; - }); - } - /* destroy() { - // nothing - } */ -} - -// - -const _drawRectangle = (ctx, color) => { - const innerBorder = 3; - const borderWidth = 3; - ctx.fillStyle = color; - ctx.fillRect(innerBorder, innerBorder, realmSize - innerBorder * 2, borderWidth); // top - ctx.fillRect(innerBorder, realmSize - borderWidth - innerBorder, realmSize - innerBorder * 2, borderWidth); // bottom - ctx.fillRect(innerBorder, innerBorder, borderWidth, realmSize - innerBorder * 2); // left - ctx.fillRect(realmSize - borderWidth - innerBorder, innerBorder, borderWidth, realmSize - innerBorder * 2); // right -}; -export class GameRealmsCanvases { - constructor(realms) { - // realm sections - this.element = document.createElement('div'); - this.element.id = 'network-realms'; - this.element.className = 'network-realms'; - - for (let dx = -1; dx <= 1; dx++) { - for (let dz = -1; dz <= 1; dz++) { - const canvas = document.createElement('canvas'); - canvas.className = 'canvas'; - canvas.width = realmSize; - canvas.height = realmSize; - const ctx = canvas.getContext('2d'); - _drawRectangle(ctx, '#CCC'); - - const x = dx + 1; - const z = dz + 1; - - const text = document.createElement('div'); - text.className = 'text'; - const text1 = document.createElement('div'); - text1.textContent = `${x}:${z}`; - text.appendChild(text1); - const text2 = document.createElement('div'); - text.appendChild(text2); - - const div = document.createElement('div'); - div.className = 'network-realm'; - // div.style.transform = `translate3d(${x * realmSize}px, ${z * realmSize}px, 0)`; - div.style.left = `${x * realmSize}px`; - div.style.top = `${z * realmSize}px`; - div.appendChild(canvas); - div.appendChild(text); - div.min = [x * realmSize, 0, z * realmSize]; - div.size = realmSize; - div.setColor = color => { - _drawRectangle(ctx, color); - }; - div.setText = text => { - text2.innerText = text; - // console.log('update text', div.min.join(',')); - }; - let needsTextUpdate = ''; - div.updateText = dataClient => { - const playersArray = dataClient.getArray('players', { - listen: false, - }); - const worldApps = dataClient.getArray('worldApps', { - listen: false, - }); - - const _formatArray = array => { - array = array.getKeys().map(arrayIndexId => { - const playerApp = array.getMap(arrayIndexId, { - listen: false, - }); - const playerAppJson = playerApp.toObject(); - return playerAppJson; - }); - return zstringify(array); - }; - const _updateText = () => { - let playersString = ''; - if (playersArray.getSize() > 0) { - playersString = `players: [\n${zstringify(playersArray.toArray())}\n]`; - } else { - playersString = `players: []`; - } - - for (const arrayIndexId of playersArray.getKeys()) { - // player apps - let playerAppsString = ''; - const playerAppsArray = dataClient.getArray('playerApps:' + arrayIndexId, { - listen: false, - }); - if (playerAppsArray.getSize() > 0) { - playerAppsString = ` playerApps: [\n${_formatArray(playerAppsArray)}\n]`; - } else { - playerAppsString = ` playerApps: []`; - } - playersString += '\n' + playerAppsString; - - // player actions - let playerActionsString = ''; - const playerActionsArray = dataClient.getArray('playerActions:' + arrayIndexId, { - listen: false, - }); - if (playerActionsArray.getSize()) { - playerActionsString = ` playerActions: [\n${_formatArray(playerActionsArray)}\n]`; - } else { - playerActionsString = ` playerActions: []`; - } - playersString += '\n' + playerActionsString; - } - - let worldAppsString = ''; - if (worldApps.getSize() > 0) { - worldAppsString = `worldApps: [\n${zstringify(worldApps.toArray())}\n]`; - } else { - worldAppsString = `worldApps: []`; - } - - const s = [ - playersString, - worldAppsString, - ].join('\n'); - needsTextUpdate = s; - }; - _updateText(); - }; - div.update = () => { - if (needsTextUpdate) { - div.setText(needsTextUpdate); - needsTextUpdate = ''; - } - }; - - this.element.appendChild(div); - } - } - } - - update() { - for (const div of this.element.childNodes) { - div.update(); - } - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/update-types.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/update-types.mjs deleted file mode 100644 index e73f843c2..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/update-types.mjs +++ /dev/null @@ -1,26 +0,0 @@ -export const UPDATE_METHODS = { - IMPORT: 1, - SYN: 2, - SYN_ACK: 3, - SET: 4, - ADD: 5, - REMOVE: 6, - ROLLBACK: 7, - DEAD_HAND: 8, - LIVE_HAND: 9, - NETWORK_INIT: 10, - JOIN: 11, - LEAVE: 12, - REGISTER: 13, - CHAT: 14, - AUDIO: 15, - AUDIO_START: 16, - AUDIO_END: 17, - VIDEO: 18, - VIDEO_START: 19, - VIDEO_END: 20, - CRDT_UPDATE: 21, - LOCK_REQUEST: 22, - LOCK_RESPONSE: 23, - LOCK_RELEASE: 24, -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/util.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/util.mjs deleted file mode 100644 index 5678b8da7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/util.mjs +++ /dev/null @@ -1,408 +0,0 @@ -// import {MULTIPLAYER_PORT} from './constants.mjs'; -import {zbencode, zbdecode} from 'zjs'; -import {UPDATE_METHODS} from './update-types.mjs'; - -const alignN = n => index => { - const r = index % n; - return r === 0 ? index : (index + n - r); -}; -const align4 = alignN(4); - -const parseUpdateObject = uint8Array => zbdecode(uint8Array); - -function makeid(length) { - var result = ''; - var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - var charactersLength = characters.length; - for (var i = 0; i < length; i++) { - result += characters.charAt(Math.floor(Math.random() * charactersLength)); - } - return result; -} -const makeId = () => makeid(10); - -function parseMessage(m) { - const match = m.type.match(/^set\.(.+?)\.(.+?)$/); - if (match) { - const arrayId = match[1]; - const arrayIndexId = match[2]; - const {key, epoch, val} = m.data; - return { - type: 'set', - arrayId, - arrayIndexId, - key, - epoch, - val, - }; - } else { - const match = m.type.match(/^add\.(.+?)$/); - if (match) { - const arrayId = match[1]; - const {arrayIndexId, val} = m.data; - return { - type: 'add', - arrayId, - arrayIndexId, - val, - }; - } else { - const match = m.type.match(/^remove\.(.+?)$/); - if (match) { - const arrayId = match[1]; - const {arrayIndexId} = m.data; - return { - type: 'remove', - arrayId, - arrayIndexId, - }; - } else { - if (m.type === 'rollback') { - const {arrayId, arrayIndexId, key, oldEpoch, oldVal} = m.data; - return { - type: 'rollback', - arrayId, - arrayIndexId, - key, - oldEpoch, - oldVal, - }; - } else if (m.type === 'import') { - return { - type: 'import', - crdtExport: m.data.crdtExport, - }; - } else if (m.type === 'syn') { - const {synId} = m.data; - return { - type: 'syn', - synId, - }; - } else if (m.type === 'synAck') { - const {synId} = m.data; - return { - type: 'synAck', - synId, - }; - } else if (m.type === 'deadhand') { - const {keys, deadHand} = m.data; - return { - type: 'deadhand', - keys, - deadHand, - }; - } else if (m.type === 'livehand') { - const {keys, liveHand} = m.data; - return { - type: 'livehand', - keys, - liveHand, - }; - } else if (m.type === 'networkinit') { - return { - type: 'networkinit', - playerIds: m.data.playerIds, - }; - } else if (m.type === 'join') { - return { - type: 'join', - playerId: m.data.playerId, - }; - } else if (m.type === 'leave') { - return { - type: 'leave', - playerId: m.data.playerId, - }; - } else if (m.type === 'register') { - const {playerId} = m.data; - return { - type: 'register', - playerId, - }; - } else if (m.type === 'crdtUpdate') { - const {update} = m.data; - return { - type: 'crdtUpdate', - update, - }; - } else if (m.type === 'lockRequest') { - const {lockName} = m.data; - return { - type: 'lockRequest', - lockName, - }; - } else if (m.type === 'lockResponse') { - const {lockName} = m.data; - return { - type: 'lockResponse', - lockName, - }; - } else if (m.type === 'lockRelease') { - const {lockName} = m.data; - return { - type: 'lockRelease', - lockName, - }; - } else { - console.warn('failed to parse', m); - throw new Error('unrecognized message type: ' + m.type); - } - } - } - } -} - -function serializeMessage(m) { - const parsedMessage = parseMessage(m); - const {type, arrayId, arrayIndexId} = parsedMessage; - switch (type) { - case 'import': { - const {crdtExport} = parsedMessage; - return zbencode({ - method: UPDATE_METHODS.IMPORT, - args: [ - crdtExport, - ], - }); - } - case 'syn': { - const {synId} = parsedMessage; - return zbencode({ - method: UPDATE_METHODS.SYN, - args: [ - synId, - ], - }); - } - case 'synAck': { - const {synId} = parsedMessage; - return zbencode({ - method: UPDATE_METHODS.SYN_ACK, - args: [ - synId, - ], - }); - } - case 'set': { - const {key, epoch, val} = m.data; - return zbencode({ - method: UPDATE_METHODS.SET, - args: [ - arrayId, - arrayIndexId, - key, - epoch, - val, - ], - }); - } - case 'add': { - const {arrayIndexId, val, epoch} = m.data; - return zbencode({ - method: UPDATE_METHODS.ADD, - args: [ - arrayId, - arrayIndexId, - val, - epoch, - ], - }); - } - case 'remove': { - const {arrayIndexId} = m.data; - return zbencode({ - method: UPDATE_METHODS.REMOVE, - args: [ - arrayId, - arrayIndexId, - ], - }); - } - case 'removeArray': { - return zbencode({ - method: UPDATE_METHODS.REMOVE_ARRAY, - args: [ - arrayId, - ], - }); - } - case 'rollback': { - const {arrayId, arrayIndexId, key, oldEpoch, oldVal} = m.data; - return zbencode({ - method: UPDATE_METHODS.ROLLBACK, - args: [ - arrayId, - arrayIndexId, - key, - oldEpoch, - oldVal, - ], - }); - } - case 'deadhand': { - // console.log('serialize dead hand'); - const {keys, deadHand} = m.data; - return zbencode({ - method: UPDATE_METHODS.DEAD_HAND, - args: [ - keys, - deadHand, - ], - }); - } - case 'livehand': { - // console.log('serialize live hand'); - const {keys, liveHand} = m.data; - return zbencode({ - method: UPDATE_METHODS.LIVE_HAND, - args: [ - keys, - liveHand, - ], - }); - } - case 'networkinit': { - const {playerIds} = m.data; - return zbencode({ - method: UPDATE_METHODS.NETWORK_INIT, - args: [ - playerIds, - ], - }); - } - case 'join': { - const {playerId} = m.data; - return zbencode({ - method: UPDATE_METHODS.JOIN, - args: [ - playerId, - ], - }); - } - case 'leave': { - const {playerId} = m.data; - return zbencode({ - method: UPDATE_METHODS.LEAVE, - args: [ - playerId, - ], - }); - } - case 'register': { - const {playerId} = m.data; - return zbencode({ - method: UPDATE_METHODS.REGISTER, - args: [ - playerId, - ], - }); - } - case 'crdtUpdate': { - const {update} = m.data; - return zbencode({ - method: UPDATE_METHODS.CRDT_UPDATE, - args: [ - update, - ], - }); - } - case 'lockRequest': { - const {lockName} = m.data; - return zbencode({ - method: UPDATE_METHODS.LOCK_REQUEST, - args: [ - lockName, - ], - }); - } - case 'lockResponse': { - const {lockName} = m.data; - return zbencode({ - method: UPDATE_METHODS.LOCK_RESPONSE, - args: [ - lockName, - ], - }); - } - case 'lockRelease': { - const {lockName} = m.data; - return zbencode({ - method: UPDATE_METHODS.LOCK_RELEASE, - args: [ - lockName, - ], - }); - } - default: { - console.warn('unrecognized message type', type); - throw new Error('unrecognized message type: ' + type); - } - } -} - -const getEndpoint = () => { - const wss = 'wss://'; - let hostname = 'multiplayer.webaverse.workers.dev'; - - // The local development server's WebSocket is provided at ws://localhost. - const isDevelopment = location.hostname === 'local.webaverse.com'; - if (isDevelopment) { - // wss = 'ws://'; - // hostname = `localhost:${MULTIPLAYER_PORT}`; - hostname = location.host; - } - - return `${wss}${hostname}`; -}; -const createWs = (endpoint, roomname, playerId) => { - const u = `${endpoint}/api/room/${roomname}/websocket${playerId ? `?playerId=${playerId}` : ''}`; - const ws = new WebSocket(u); - return ws; -}; - -const makePromise = () => { - let resolve; - let reject; - const promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - promise.resolve = resolve; - promise.reject = reject; - return promise; -}; - -const zstringify = o => { - let result = ''; - for (const k in o) { - if (result) { - result += '\n'; - } - - const v = o[k]; - if (v instanceof Float32Array) { - result += `${JSON.stringify(k)}: Float32Array(${v.join(',')})`; - } else { - const s = JSON.stringify(v); - if (s.length >= 20 && v instanceof Object && v !== null) { - result += `${JSON.stringify(k)}:\n${zstringify(v)}`; - } else { - result += `${JSON.stringify(k)}: ${s}`; - } - } - } - return result; -}; - -export { - alignN, - align4, - parseUpdateObject, - makeId, - parseMessage, - serializeMessage, - getEndpoint, - createWs, - makePromise, - zstringify, -}; diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client-utils.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client-utils.mjs deleted file mode 100644 index 718e4006b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client-utils.mjs +++ /dev/null @@ -1,9 +0,0 @@ -import {UPDATE_METHODS} from '../update-types.mjs'; - -export const handlesMethod = method => { - return [ - UPDATE_METHODS.VIDEO, - UPDATE_METHODS.VIDEO_START, - UPDATE_METHODS.VIDEO_END, - ].includes(method); -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client.mjs deleted file mode 100644 index ee5a4e357..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/networked-video-client.mjs +++ /dev/null @@ -1,199 +0,0 @@ -import {UPDATE_METHODS} from '../update-types.mjs'; -import {handlesMethod} from './networked-video-client-utils.mjs'; -import {parseUpdateObject, makeId} from '../util.mjs'; -import {zbencode} from 'zjs'; - -export class NetworkedVideoClient extends EventTarget { - constructor({ - playerId = makeId(), - }) { - super(); - - this.playerId = playerId; - - this.ws = null; - - this.videoSourceCleanups = new Map(); // playerId:streamId -> function - } - - addVideoSource(playableVideoStream) { - // console.log('add video source', new Error().stack); - - const { - id, - // output, - type, - disposition, - } = playableVideoStream; - if (typeof id !== 'string') { - throw new Error('video source id must be a string'); - } - if (typeof type !== 'string') { - throw new Error('video source type must be a string'); - } - if (typeof disposition !== 'string') { - throw new Error('video source disposition must be a string'); - } - - // console.log('send start', [ - // this.playerId, - // id, - // type, - // disposition, - // ]); - this.ws.send(zbencode({ - method: UPDATE_METHODS.VIDEO_START, - args: [ - this.playerId, - id, - type, - disposition, - ], - })); - - // pump the reader - let live = true; - const finishPromise = (async () => { - for await (const data of playableVideoStream) { - if (live) { - console.log('send video', [ - this.playerId, - id, - data, - ]); - this.ws.send(zbencode({ - method: UPDATE_METHODS.VIDEO, - args: [ - this.playerId, - id, - data, - ], - })); - } else { - break; - } - } - })(); - - // add the cleanup fn - const cleanup = () => { - live = false; - - // console.log('send audio end', [ - // this.playerId, - // id, - // ]); - this.ws.send(zbencode({ - method: UPDATE_METHODS.VIDEO_END, - args: [ - this.playerId, - id, - ], - })); - }; - this.videoSourceCleanups.set(id, cleanup); - - return { - waitForFinish: () => finishPromise, - }; - } - - removeVideoSource(readableVideoStream) { - // console.log('remove video source'); - const cleanupFn = this.videoSourceCleanups.get(readableVideoStream.id); - cleanupFn(); - this.videoSourceCleanups.delete(readableVideoStream.id); - } - - async connect(ws) { - this.ws = ws; - - const _waitForOpen = () => new Promise((resolve, reject) => { - resolve = (resolve => () => { - resolve(); - _cleanup(); - })(resolve); - reject = (reject => () => { - reject(); - _cleanup(); - })(reject); - - this.ws.addEventListener('open', resolve); - this.ws.addEventListener('error', reject); - - const _cleanup = () => { - this.ws.removeEventListener('open', resolve); - this.ws.removeEventListener('error', reject); - }; - }); - await _waitForOpen(); - - // console.log('irc listen'); - this.ws.addEventListener('message', e => { - // console.log('got irc data', e.data); - if (e?.data?.byteLength > 0) { - const updateBuffer = e.data; - const uint8Array = new Uint8Array(updateBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method /*, args */} = updateObject; - if (handlesMethod(method)) { - this.handleUpdateObject(updateObject); - } - } else { - // debugger; - } - }); - } - handleUpdateObject(updateObject) { - const {method, args} = updateObject; - // console.log('video update object', {method, args}); - if (method === UPDATE_METHODS.VIDEO) { - // console.log('got video data', {method, args}); - const [ - playerId, - streamId, - data, - ] = args; - - this.dispatchEvent(new MessageEvent('video', { - data: { - playerId, - streamId, - data, - }, - })); - } else if (method === UPDATE_METHODS.VIDEO_START) { - const [ - playerId, - streamId, - type, - disposition, - ] = args; - - this.dispatchEvent(new MessageEvent('videostart', { - data: { - playerId, - streamId, - type, - disposition, - }, - })); - } else if (method === UPDATE_METHODS.VIDEO_END) { - const [ - playerId, - streamId, - ] = args; - - this.dispatchEvent(new MessageEvent('videoend', { - data: { - playerId, - streamId, - }, - })); - } else { - console.warn('unhandled video method: ' + method, updateObject); - throw new Error('unhandled video method: ' + method); - } - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-classes.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-classes.mjs deleted file mode 100644 index e39266011..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-classes.mjs +++ /dev/null @@ -1,31 +0,0 @@ -export class VideoOutput extends EventTarget { - constructor() { - super(); - - this.live = true; - } - write(data) { - this.dispatchEvent(new MessageEvent('data', { - data, - })); - } - end() { - this.live = false; - this.dispatchEvent(new MessageEvent('end')); - } - readAll() { - return new Promise((accept, reject) => { - const bs = []; - if (this.live) { - this.addEventListener('data', e => { - bs.push(e.data); - }); - this.addEventListener('end', () => { - accept(bs); - }); - } else { - accept(bs); - } - }); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-client.mjs deleted file mode 100644 index 1d145c972..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/public/video/video-client.mjs +++ /dev/null @@ -1,72 +0,0 @@ -import {VideoOutput} from './video-classes.mjs'; -import { makeId, makePromise } from '../util.mjs'; - -const type ='image/webp'; -const quality = 0.; - -export const createVideoSource = ({ - mediaStream, -}) => { - // get the video stream - const video = document.createElement('video'); - video.srcObject = mediaStream; - // video.style.cssText = `\ - // position: fixed; - // bottom: 0; - // right: 0; - // width: 300px; - // z-index: 1000; - // `; - // document.body.appendChild(video); - - // use the canvas 2d api to read the media stream and stream out the data and end events - const canvas = document.createElement('canvas'); - const ctx = canvas.getContext('2d'); - let live = true; - let videoFrameRequestId; - const handleVideoFrame = async () => { - ctx.drawImage(video, 0, 0, canvas.width, canvas.height); - // const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); - // const data = imageData.data; - // console.log('write data', data); - // output.write(data); // Dispatch data event to the output - - // get the canvas blob - const blob = await new Promise((accept, reject) => { - canvas.toBlob(accept, type, quality); - }); - // get the array buffer - const arrayBuffer = await blob.arrayBuffer(); - const uint8Array = new Uint8Array(arrayBuffer); - output.write(uint8Array); - - videoFrameRequestId = video.requestVideoFrameCallback(handleVideoFrame); - }; - - video.addEventListener('loadedmetadata', () => { - if (live) { - console.log('got video loadedmetadata event', video.videoWidth, video.videoHeight); - canvas.width = video.videoWidth; - canvas.height = video.videoHeight; - video.play(); - videoFrameRequestId = video.requestVideoFrameCallback(handleVideoFrame); - } - }); - - const output = new VideoOutput(); - - const id = makeId(10); - - return { - id, - output, - mediaStream, - close() { - live = false; - if (videoFrameRequestId) { - video.cancelVideoFrameCallback(videoFrameRequestId); - } - output.end(); - }, - }; -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/src/chat.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/src/chat.mjs deleted file mode 100644 index a3ca7fb0b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/src/chat.mjs +++ /dev/null @@ -1,985 +0,0 @@ -// This is the Edge Chat Demo Worker, built using Durable Objects! - -// =============================== -// Introduction to Modules -// =============================== -// -// The first thing you might notice, if you are familiar with the Workers platform, is that this -// Worker is written differently from others you may have seen. It even has a different file -// extension. The `mjs` extension means this JavaScript is an ES Module, which, among other things, -// means it has imports and exports. Unlike other Workers, this code doesn't use -// `addEventListener("fetch", handler)` to register its main HTTP handler; instead, it _exports_ -// a handler, as we'll see below. -// -// This is a new way of writing Workers that we expect to introduce more broadly in the future. We -// like this syntax because it is *composable*: You can take two workers written this way and -// merge them into one worker, by importing the two Workers' exported handlers yourself, and then -// exporting a new handler that call into the other Workers as appropriate. -// -// This new syntax is required when using Durable Objects, because your Durable Objects are -// implemented by classes, and those classes need to be exported. The new syntax can be used for -// writing regular Workers (without Durable Objects) too, but for now, you must be in the Durable -// Objects beta to be able to use the new syntax, while we work out the quirks. -// -// To see an example configuration for uploading module-based Workers, check out the wrangler.toml -// file or one of our Durable Object templates for Wrangler: -// * https://github.com/cloudflare/durable-objects-template -// * https://github.com/cloudflare/durable-objects-rollup-esm -// * https://github.com/cloudflare/durable-objects-webpack-commonjs - -// =============================== -// Required Environment -// =============================== -// -// This worker, when deployed, must be configured with two environment bindings: -// * rooms: A Durable Object namespace binding mapped to the ChatRoom class. -// * limiters: A Durable Object namespace binding mapped to the RateLimiter class. -// -// Incidentally, in pre-modules Workers syntax, "bindings" (like KV bindings, secrets, etc.) -// appeared in your script as global variables, but in the new modules syntax, this is no longer -// the case. Instead, bindings are now delivered in an "environment object" when an event handler -// (or Durable Object class constructor) is called. Look for the variable `env` below. -// -// We made this change, again, for composability: The global scope is global, but if you want to -// call into existing code that has different environment requirements, then you need to be able -// to pass the environment as a parameter instead. -// -// Once again, see the wrangler.toml file to understand how the environment is configured. - -// ======================================================================================= -// The regular Worker part... -// -// This section of the code implements a normal Worker that receives HTTP requests from external -// clients. This part is stateless. - -// With the introduction of modules, we're experimenting with allowing text/data blobs to be -// uploaded and exposed as synthetic modules. In wrangler.toml we specify a rule that files ending -// in .html should be uploaded as "Data", equivalent to content-type `application/octet-stream`. -// So when we import it as `HTML` here, we get the HTML content as an `ArrayBuffer`. This lets us -// serve our app's static asset without relying on any separate storage. (However, the space -// available for assets served this way is very limited; larger sites should continue to use Workers -// KV to serve assets.) -import HTML from "./chat.html"; -import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler' -import manifestJSON from '__STATIC_CONTENT_MANIFEST' -const assetManifest = JSON.parse(manifestJSON); -import {DataClient, NetworkedDataClient/*, DCMap, DCArray*/} from "../public/data-client.mjs"; -import {NetworkedIrcClient} from "../public/irc-client.mjs"; -import {NetworkedCrdtClient} from "../public/crdt-client.mjs"; -import {NetworkedLockClient} from "../public/lock-client.mjs"; -import {handlesMethod as networkedAudioClientHandlesMethod} from "../public/audio/networked-audio-client-utils.mjs"; -import {handlesMethod as networkedVideoClientHandlesMethod} from "../public/video/networked-video-client-utils.mjs"; -import {parseUpdateObject, serializeMessage} from "../public/util.mjs"; -import {UPDATE_METHODS} from "../public/update-types.mjs"; - -// `handleErrors()` is a little utility function that can wrap an HTTP request handler in a -// try/catch and return errors to the client. You probably wouldn't want to use this in production -// code but it is convenient when debugging and iterating. -async function handleErrors(request, func) { - try { - return await func(); - } catch (err) { - if (request.headers.get("Upgrade") == "websocket") { - // Annoyingly, if we return an HTTP error in response to a WebSocket request, Chrome devtools - // won't show us the response body! So... let's send a WebSocket response with an error - // frame instead. - let pair = new WebSocketPair(); - pair[1].accept(); - pair[1].send(JSON.stringify({error: err.stack})); - pair[1].close(1011, "Uncaught exception during session setup"); - return new Response(null, { status: 101, webSocket: pair[0] }); - } else { - return new Response(err.stack, {status: 500}); - } - } -} - -// In modules-syntax workers, we use `export default` to export our script's main event handlers. -// Here, we export one handler, `fetch`, for receiving HTTP requests. In pre-modules workers, the -// fetch handler was registered using `addEventHandler("fetch", event => { ... })`; this is just -// new syntax for essentially the same thing. -// -// `fetch` isn't the only handler. If your worker runs on a Cron schedule, it will receive calls -// to a handler named `scheduled`, which should be exported here in a similar way. We will be -// adding other handlers for other types of events over time. -export default { - async fetch(request, env, ctx) { - return await handleErrors(request, async () => { - // We have received an HTTP request! Parse the URL and route the request. - - let url = new URL(request.url); - let path = url.pathname.slice(1).split('/'); - - if (!path[0]) { - // Serve our HTML at the root path. - return new Response(HTML, {headers: {"Content-Type": "text/html;charset=UTF-8"}}); - } - - switch (path[0]) { - case "api": - // This is a request for `/api/...`, call the API handler. - return handleApiRequest(path.slice(1), request, env); - case 'public': - return handlePublicRequest(path.slice(1), request, env, ctx); - default: - return new Response("Not found", {status: 404}); - } - }); - } -} - -async function handlePublicRequest(path, request, env, ctx) { - try { - const event = { - request, - waitUntil(promise) { - return ctx.waitUntil(promise) - }, - } - const options = {}; - function handlePrefix(prefix) { - return request => { - // compute the default (e.g. / -> index.html) - let defaultAssetKey = mapRequestToAsset(request) - let url = new URL(defaultAssetKey.url) - - // strip the prefix from the path for lookup - url.pathname = url.pathname.replace(prefix, '/') - - // inherit all other props from the default request - return new Request(url.toString(), defaultAssetKey) - } - } - options.mapRequestToAsset = handlePrefix(/^\/public/); - options.ASSET_NAMESPACE = env.__STATIC_CONTENT; - options.ASSET_MANIFEST = assetManifest; - const page = await getAssetFromKV(event, options) - - // allow headers to be altered - const response = new Response(page.body, page); - - // console.log('got response', response); - - return response; - } catch(err) { - console.log('error', err); - return new Response(err.stack, { - status: 500, - }) - } -} - -async function handleApiRequest(path, request, env) { - // We've received at API request. Route the request based on the path. - - switch (path[0]) { - case "room": { - // Request for `/api/room/...`. - - if (!path[1]) { - // The request is for just "/api/room", with no ID. - if (request.method == "POST") { - // POST to /api/room creates a private room. - // - // Incidentally, this code doesn't actually store anything. It just generates a valid - // unique ID for this namespace. Each durable object namespace has its own ID space, but - // IDs from one namespace are not valid for any other. - // - // The IDs returned by `newUniqueId()` are unguessable, so are a valid way to implement - // "anyone with the link can access" sharing. Additionally, IDs generated this way have - // a performance benefit over IDs generated from names: When a unique ID is generated, - // the system knows it is unique without having to communicate with the rest of the - // world -- i.e., there is no way that someone in the UK and someone in New Zealand - // could coincidentally create the same ID at the same time, because unique IDs are, - // well, unique! - let id = env.rooms.newUniqueId(); - return new Response(id.toString(), {headers: {"Access-Control-Allow-Origin": "*"}}); - } else { - // If we wanted to support returning a list of public rooms, this might be a place to do - // it. The list of room names might be a good thing to store in KV, though a singleton - // Durable Object is also a possibility as long as the Cache API is used to cache reads. - // (A caching layer would be needed because a single Durable Object is single-threaded, - // so the amount of traffic it can handle is limited. Also, caching would improve latency - // for users who don't happen to be located close to the singleton.) - // - // For this demo, though, we're not implementing a public room list, mainly because - // inevitably some trolls would probably register a bunch of offensive room names. Sigh. - return new Response("Method not allowed", {status: 405}); - } - } - - // OK, the request is for `/api/room//...`. It's time to route to the Durable Object - // for the specific room. - let name = path[1]; - - // Each Durable Object has a 256-bit unique ID. IDs can be derived from string names, or - // chosen randomly by the system. - let id; - /* if (name.match(/^[0-9a-f]{64}$/)) { - // The name is 64 hex digits, so let's assume it actually just encodes an ID. We use this - // for private rooms. `idFromString()` simply parses the text as a hex encoding of the raw - // ID (and verifies that this is a valid ID for this namespace). - id = env.rooms.idFromString(name); - } else */if (name.length <= 128) { - // Treat as a string room name (limited to 32 characters). `idFromName()` consistently - // derives an ID from a string. - id = env.rooms.idFromName(name); - } else { - return new Response("Name too long", {status: 404}); - } - - // Get the Durable Object stub for this room! The stub is a client object that can be used - // to send messages to the remote Durable Object instance. The stub is returned immediately; - // there is no need to await it. This is important because you would not want to wait for - // a network round trip before you could start sending requests. Since Durable Objects are - // created on-demand when the ID is first used, there's nothing to wait for anyway; we know - // an object will be available somewhere to receive our requests. - let roomObject = env.rooms.get(id); - - // Compute a new URL with `/api/room/` removed. We'll forward the rest of the path - // to the Durable Object. - let newUrl = new URL(request.url); - newUrl.pathname = "/" + name + "/" + path.slice(2).join("/"); - - // Send the request to the object. The `fetch()` method of a Durable Object stub has the - // same signature as the global `fetch()` function, but the request is always sent to the - // object, regardless of the request's URL. - return roomObject.fetch(newUrl, request); - } - - default: - return new Response("Not found", {status: 404}); - } -} - -// - -const readCrdtFromStorage = async (storage, arrayNames) => { - const crdt = new Map(); - for (const arrayId of arrayNames) { - const array = await storage.get(arrayId) ?? {}; - crdt.set(arrayId, array); - - for (const arrayIndexId in array) { - const val = await storage.get(arrayIndexId) ?? [ - 0, - {}, - ]; - crdt.set(arrayIndexId, val); - } - } - return crdt; -}; -const dataClientPromises = new Map(); -const crdtClientPromises = new Map(); -const lockClientPromises = new Map(); - -// - -const schemaArrayNames = [ - 'worldApps', -]; - -const _pauseWebSocket = (ws) => { - const queue = []; - const onmessage = e => { - queue.push(e.data); - }; - ws.addEventListener('message', onmessage); - return () => { - for (const data of queue) { - ws.dispatchEvent(new MessageEvent('message', {data})); - } - queue.length = 0; - - ws.removeEventListener('message', onmessage); - }; -}; - -// ======================================================================================= -// The ChatRoom Durable Object Class - -// ChatRoom implements a Durable Object that coordinates an individual chat room. Participants -// connect to the room using WebSockets, and the room broadcasts messages from each participant -// to all others. -export class ChatRoom { - constructor(controller, env) { - // `controller.storage` provides access to our durable storage. It provides a simple KV - // get()/put() interface. - this.storage = controller.storage; - - // `env` is our environment bindings (discussed earlier). - this.env = env; - - // We will put the WebSocket objects for each client, along with some metadata, into - // `sessions`. - this.sessions = []; - - // We keep track of the last-seen message's timestamp just so that we can assign monotonically - // increasing timestamps even if multiple messages arrive simultaneously (see below). There's - // no need to store this to disk since we assume if the object is destroyed and recreated, much - // more than a millisecond will have gone by. - this.lastTimestamp = 0; - } - - // The system will call fetch() whenever an HTTP request is sent to this Object. Such requests - // can only be sent from other Worker code, such as the code above; these requests don't come - // directly from the internet. In the future, we will support other formats than HTTP for these - // communications, but we started with HTTP for its familiarity. - async fetch(request) { - return await handleErrors(request, async () => { - let url = new URL(request.url); - const match = url.pathname.match(/^\/([^\/]+?)\/([^\/]+?)$/); - const roomName = match ? match[1] : ''; - const methodName = match ? match[2] : ''; - - switch (methodName) { - case "websocket": { - // The request is to `/api/room//websocket`. A client is trying to establish a new - // WebSocket session. - if (request.headers.get("Upgrade") != "websocket") { - return new Response("expected websocket", {status: 400}); - } - - // Get the client's IP address for use with the rate limiter. - let ip = request.headers.get("CF-Connecting-IP"); - - // To accept the WebSocket request, we create a WebSocketPair (which is like a socketpair, - // i.e. two WebSockets that talk to each other), we return one end of the pair in the - // response, and we operate on the other end. Note that this API is not part of the - // Fetch API standard; unfortunately, the Fetch API / Service Workers specs do not define - // any way to act as a WebSocket server today. - let pair = new WebSocketPair(); - - // We're going to take pair[1] as our end, and return pair[0] to the client. - await this.handleSession(pair[1], ip, roomName, url); - - // Now we return the other end of the pair to the client. - return new Response(null, { status: 101, webSocket: pair[0] }); - } - - case 'get': { - break; - } - - case 'set': { - break; - } - - default: - return new Response("Not found", {status: 404}); - } - }); - } - - // handleSession() implements our WebSocket-based chat protocol. - async handleSession(webSocket, ip, roomName, url) { - // Accept our end of the WebSocket. This tells the runtime that we'll be terminating the - // WebSocket in JavaScript, not sending it elsewhere. - webSocket.accept(); - - const playerId = url.searchParams.get('playerId') ?? null; - /* if (!playerId) { - console.log('closing due to no playerId'); - webSocket.close(); - return; - } */ - - const realm = { - key: roomName, - }; - - let dataClientPromise = dataClientPromises.get(roomName); - if (!dataClientPromise) { - dataClientPromise = (async () => { - const crdt = await readCrdtFromStorage(this.storage, schemaArrayNames); - const dataClient = new DataClient({ - crdt, - userData: { - realm, - }, - }); - return dataClient; - })(); - dataClientPromises.set(roomName, dataClientPromise); - } - let crdtClientPromise = crdtClientPromises.get(roomName); - if (!crdtClientPromise) { - crdtClientPromise = (async () => { - let initialUpdate = await this.storage.get('crdt'); - console.log('get room crdt', initialUpdate); - const crdtClient = new NetworkedCrdtClient({ - initialUpdate, - }); - crdtClient.addEventListener('update', async e => { - const uint8array = crdtClient.getStateAsUpdate(); - // console.log('put room crdt', uint8array); - await this.storage.put('crdt', uint8array); - }); - return crdtClient; - })(); - crdtClientPromises.set(roomName, crdtClientPromise); - } - let lockClientPromise = lockClientPromises.get(roomName); - if (!lockClientPromise) { - lockClientPromise = (async () => { - const lockClient = new NetworkedLockClient(); - return lockClient; - })(); - lockClientPromises.set(roomName, lockClientPromise); - } - - const _resumeWebsocket = _pauseWebSocket(webSocket); - - const dataClient = await dataClientPromise; - const crdtClient = await crdtClientPromise; - const lockClient = await lockClientPromise; - const networkClient = { - /* serializeMessage(message) { - if (message.type === 'networkinit') { - const {playerIds} = message.data; - return zbencode({ - method: UPDATE_METHODS.NETWORK_INIT, - args: [ - playerIds, - ], - }); - } else { - throw new Error('invalid message type: ' + message.type); - } - }, */ - getNetworkInitMessage: () => { - return new MessageEvent('networkinit', { - data: { - playerIds: this.sessions - .map((session) => session.playerId) - .filter((playerId) => playerId !== null), - }, - }); - }, - }; - - let session = {webSocket, playerId/*, blockedMessages: []*/}; - this.sessions.push(session); - - // send import - webSocket.send(serializeMessage(dataClient.getImportMessage())); - // send initial update - webSocket.send(serializeMessage(crdtClient.getInitialUpdateMessage())); - // send network init - webSocket.send(serializeMessage(networkClient.getNetworkInitMessage())); - - // set up dead hands tracking - const deadHands = new Map(); - // let triggered = false; - const _triggerDeadHands = () => { - // console.log('trigger dead hands'); - // if (triggered) { - // throw new Error('double trigger'); - // } else { - // triggered = true; - // } - // const entries = Array.from(deadHands.entries()); - for (const [key, {arrayId, arrayIndexId}] of deadHands.entries()) { - const array = dataClient.getArray(arrayId, { - listen: false, - }); - if (arrayIndexId !== null) { // map mode - // console.log('dead hand map', arrayId, arrayIndexId); - // const map = dataClient.getArrayMap(arrayId, arrayIndexId, { - // listen: false, - // }); - if (array.hasKey(arrayIndexId)) { - const map = array.getMap(arrayIndexId, { - listen: false, - }); - const removeMapUpdate = map.removeUpdate(); - const removeMapUpdateBuffer = serializeMessage(removeMapUpdate); - proxyMessageToPeers(removeMapUpdateBuffer); - - /* const array = dataClient.getArray(arrayId, { - listen: false, - }); - for (const arrayIndexId of array.getKeys()) { - const map = array.getMap(arrayIndexId, { - listen: false, - }); - const removeMessage = map.removeUpdate(); - const removeArrayUpdateBuffer = serializeMessage(removeMessage); - proxyMessageToPeers(removeArrayUpdateBuffer); - } */ - } - } else { // array mode - // console.log('dead hand array', arrayId); - - for (const arrayIndexId of array.getKeys()) { - const map = array.getMap(arrayIndexId, { - listen: false, - }); - const removeMessage = map.removeUpdate(); - const removeArrayUpdateBuffer = serializeMessage(removeMessage); - proxyMessageToPeers(removeArrayUpdateBuffer); - } - } - // console.log('iter end'); - } - }; - const _triggerUnlocks = () => { - lockClient.serverUnlockSession(session); - }; - - dataClient.addEventListener('deadhand', e => { - const {keys, deadHand} = e.data; - if (deadHand === playerId) { - // const key = `${arrayId}:${arrayIndexId}`; - for (const key of keys) { - let match; - if (match = key.match(/^([^\.]+?)\.([^\.]+)$/)) { - const arrayId = match[1]; - const arrayIndexId = match[2]; - deadHands.set(key, { - arrayId, - arrayIndexId, - }); - } else if (match = key.match(/^([^\.]+)$/)) { - const arrayId = match[1]; - deadHands.set(key, { - arrayId, - arrayIndexId: null, - }); - } else { - throw new Error('invalid deadhand key: ' + key); - } - } - // console.log('register dead hand', e.data, {arrayId, arrayIndexId, deadHand}); - } - }); - dataClient.addEventListener('livehand', e => { - const {keys, liveHand} = e.data; - if (liveHand === playerId) { - for (const key of keys) { - deadHands.delete(key); - } - // console.log('register live hand', e.data, {arrayId, arrayIndexId, liveHand}); - } - }); - - // Set up our rate limiter client. - // let limiterId = this.env.limiters.idFromName(ip); - // let limiter = new RateLimiterClient( - // () => this.env.limiters.get(limiterId), - // err => webSocket.close(1011, err.stack)); - - // Create our session and add it to the sessions list. - // We don't send any messages to the client until it has sent us the initial user info - // message. Until then, we will queue messages in `session.blockedMessages`. - - // Queue "join" messages for all online users, to populate the client's roster. - // this.sessions.forEach(otherSession => { - // if (otherSession.name) { - // session.blockedMessages.push(JSON.stringify({joined: otherSession.name})); - // } - // }); - - // respond back to the client - const respondToSelf = message => { - session.webSocket.send(message); - }; - - // send a message to everyone on the list except us - const proxyMessageToPeers = m => { - for (const s of this.sessions) { - if (s !== session) { - s.webSocket.send(m); - } - } - }; - // send a message to all peers - const reflectMessageToPeers = m => { - for (const s of this.sessions) { - s.webSocket.send(m); - } - }; - - // Load the last 100 messages from the chat history stored on disk, and send them to the - // client. - // let storage = await this.storage.list({reverse: true, limit: 100}); - /* let backlog = [...storage.values()]; - backlog.reverse(); - backlog.forEach(value => { - session.blockedMessages.push(value); - }); */ - - const handleBinaryMessage = (arrayBuffer) => { - const uint8Array = new Uint8Array(arrayBuffer); - const updateObject = parseUpdateObject(uint8Array); - - const {method, args} = updateObject; - if (NetworkedDataClient.handlesMethod(method)) { - const {rollback, update} = dataClient.applyUint8Array(uint8Array); - if (rollback) { - const rollbackBuffer = serializeMessage(rollback); - respondToSelf(rollbackBuffer); - } - if (update) { - dataClient.emitUpdate(update); - proxyMessageToPeers(uint8Array); - } - } - if (NetworkedCrdtClient.handlesMethod(method)) { - const [update] = args; - crdtClient.update(update); - proxyMessageToPeers(uint8Array); - } - if (NetworkedLockClient.handlesMethod(method)) { - const m = (() => { - const [lockName] = args; - switch (method) { - case UPDATE_METHODS.LOCK_REQUEST: { - return new MessageEvent('lockRequest', { - data: { - playerId, - lockName, - }, - }); - } - case UPDATE_METHODS.LOCK_RESPONSE: { - return new MessageEvent('lockResponse', { - data: { - playerId, - lockName, - }, - }); - } - case UPDATE_METHODS.LOCK_RELEASE: { - return new MessageEvent('lockRelease', { - data: { - playerId, - lockName, - }, - }); - } - default: { - console.warn('unrecognized lock method', method); - break - } - } - })(); - lockClient.handle(m); - } - if (NetworkedIrcClient.handlesMethod(method)) { - // console.log('route', method, args, this.sessions); - reflectMessageToPeers(uint8Array); - } - if ( - networkedAudioClientHandlesMethod(method) || - networkedVideoClientHandlesMethod(method) - ) { - proxyMessageToPeers(uint8Array); - } - }; - - const _sendJoinMessage = (playerId) => { - if (playerId) { - const joinMessage = new MessageEvent('join', { - data: { - playerId, - }, - }); - const joinBuffer = serializeMessage(joinMessage); - dataClient.emitUpdate(joinMessage); - proxyMessageToPeers(joinBuffer); - } - }; - _sendJoinMessage(playerId); - - /* const _sendLeaveMessage = () => { - console.log('send leave message', roomName, playerId); - const leaveMessage = new MessageEvent('leave', { - data: { - playerId, - }, - }); - const leaveBuffer = serializeMessage(leaveMessage); - dataClient.emitUpdate(leaveMessage); - proxyMessageToPeers(leaveBuffer); - }; */ - - // Set event handlers to receive messages. - // let receivedUserInfo = false; - webSocket.addEventListener("message", async msg => { - try { - if (session.quit) { - // Whoops, when trying to send to this WebSocket in the past, it threw an exception and - // we marked it broken. But somehow we got another message? I guess try sending a - // close(), which might throw, in which case we'll try to send an error, which will also - // throw, and whatever, at least we won't accept the message. (This probably can't - // actually happen. This is defensive coding.) - console.log('closing due to webasocket broken'); - webSocket.close(1011, "WebSocket broken."); - return; - } - - // Check if the user is over their rate limit and reject the message if so. - /* if (!limiter.checkLimit()) { - webSocket.send(JSON.stringify({ - error: "Your IP is being rate-limited, please try again later." - })); - return; - } */ - - if (msg.data instanceof ArrayBuffer) { - const arrayBuffer = msg.data; - handleBinaryMessage(arrayBuffer); - } else { - // I guess we'll use JSON. - throw new Error('got non-binary message'); - } - - /* if (!receivedUserInfo) { - // The first message the client sends is the user info message with their name. Save it - // into their session object. - session.name = "" + (data.name || "anonymous"); - - // Don't let people use ridiculously long names. (This is also enforced on the client, - // so if they get here they are not using the intended client.) - if (session.name.length > 32) { - webSocket.send(JSON.stringify({error: "Name too long."})); - webSocket.close(1009, "Name too long."); - return; - } - - // Deliver all the messages we queued up since the user connected. - session.blockedMessages.forEach(queued => { - webSocket.send(queued); - }); - delete session.blockedMessages; - - // Broadcast to all other connections that this user has joined. - this.broadcast({joined: session.name}); - - webSocket.send(JSON.stringify({ready: true})); - - // Note that we've now received the user info message. - receivedUserInfo = true; - - return; - } - - // Construct sanitized message for storage and broadcast. - data = { name: session.name, message: "" + data.message }; - - // Block people from sending overly long messages. This is also enforced on the client, - // so to trigger this the user must be bypassing the client code. - if (data.message.length > 256) { - webSocket.send(JSON.stringify({error: "Message too long."})); - return; - } - - // Add timestamp. Here's where this.lastTimestamp comes in -- if we receive a bunch of - // messages at the same time (or if the clock somehow goes backwards????), we'll assign - // them sequential timestamps, so at least the ordering is maintained. - data.timestamp = Math.max(Date.now(), this.lastTimestamp + 1); - this.lastTimestamp = data.timestamp; - - // Broadcast the message to all other WebSockets. - let dataStr = JSON.stringify(data); - this.broadcast(dataStr); - - // Save message. - let key = new Date(data.timestamp).toISOString(); - await this.storage.put(key, dataStr); (*/ - } catch (err) { - // Report any exceptions directly back to the client. As with our handleErrors() this - // probably isn't what you'd want to do in production, but it's convenient when testing. - console.warn(err); - webSocket.send(JSON.stringify({error: err.stack})); - } - }); - - // On "close" and "error" events, remove the WebSocket from the sessions list and broadcast - // a quit message. - let closeOrErrorHandler = evt => { - try { - session.quit = true; - this.sessions = this.sessions.filter(member => member !== session); - - _triggerDeadHands(); - _triggerUnlocks(); - - // console.log('send leave', new Error().stack); - // _sendLeaveMessage(); - - /* if (session.name) { - this.broadcast({quit: session.name}); - } */ - } catch(err) { - console.warn(err.stack); - throw err; - } finally { - cleanup(); - } - }; - webSocket.addEventListener("close", closeOrErrorHandler); - webSocket.addEventListener("error", closeOrErrorHandler); - - const cleanup = () => { - webSocket.removeEventListener("close", closeOrErrorHandler); - webSocket.removeEventListener("error", closeOrErrorHandler); - }; - - _resumeWebsocket(); - } - - // broadcast() broadcasts a message to all clients. - broadcast(message) { - // Apply JSON if we weren't given a string to start with. - if (typeof message !== 'string') { - message = JSON.stringify(message); - } - - try { - for (const session of this.sessions) { - session.webSocket.send(message); - } - } catch (err) { - console.warn(err.stack); - } - - /* // Iterate over all the sessions sending them messages. - let quitters = []; - this.sessions = this.sessions.filter(session => { - if (session.name) { - try { - session.webSocket.send(message); - return true; - } catch (err) { - // Whoops, this connection is dead. Remove it from the list and arrange to notify - // everyone below. - session.quit = true; - quitters.push(session); - return false; - } - } else { - // This session hasn't sent the initial user info message yet, so we're not sending them - // messages yet (no secret lurking!). Queue the message to be sent later. - // session.blockedMessages.push(message); - return true; - } - }); - - quitters.forEach(quitter => { - if (quitter.name) { - this.broadcast({quit: quitter.name}); - } - }); */ - } -} - -// ======================================================================================= -// The RateLimiter Durable Object class. - -// RateLimiter implements a Durable Object that tracks the frequency of messages from a particular -// source and decides when messages should be dropped because the source is sending too many -// messages. -// -// We utilize this in ChatRoom, above, to apply a per-IP-address rate limit. These limits are -// global, i.e. they apply across all chat rooms, so if a user spams one chat room, they will find -// themselves rate limited in all other chat rooms simultaneously. -export class RateLimiter { - constructor(controller, env) { - // Timestamp at which this IP will next be allowed to send a message. Start in the distant - // past, i.e. the IP can send a message now. - this.nextAllowedTime = 0; - } - - // Our protocol is: POST when the IP performs an action, or GET to simply read the current limit. - // Either way, the result is the number of seconds to wait before allowing the IP to perform its - // next action. - async fetch(request) { - return await handleErrors(request, async () => { - let now = Date.now() / 1000; - - this.nextAllowedTime = Math.max(now, this.nextAllowedTime); - - if (request.method == "POST") { - // POST request means the user performed an action. - // We allow one action per 5 seconds. - this.nextAllowedTime += 5; - } - - // Return the number of seconds that the client needs to wait. - // - // We provide a "grace" period of 20 seconds, meaning that the client can make 4-5 requests - // in a quick burst before they start being limited. - let cooldown = Math.max(0, this.nextAllowedTime - now - 20); - return new Response(cooldown); - }) - } -} - -// RateLimiterClient implements rate limiting logic on the caller's side. -class RateLimiterClient { - // The constructor takes two functions: - // * getLimiterStub() returns a new Durable Object stub for the RateLimiter object that manages - // the limit. This may be called multiple times as needed to reconnect, if the connection is - // lost. - // * reportError(err) is called when something goes wrong and the rate limiter is broken. It - // should probably disconnect the client, so that they can reconnect and start over. - constructor(getLimiterStub, reportError) { - this.getLimiterStub = getLimiterStub; - this.reportError = reportError; - - // Call the callback to get the initial stub. - this.limiter = getLimiterStub(); - - // When `inCooldown` is true, the rate limit is currently applied and checkLimit() will return - // false. - this.inCooldown = false; - } - - // Call checkLimit() when a message is received to decide if it should be blocked due to the - // rate limit. Returns `true` if the message should be accepted, `false` to reject. - checkLimit() { - if (this.inCooldown) { - return false; - } - this.inCooldown = true; - this.callLimiter(); - return true; - } - - // callLimiter() is an internal method which talks to the rate limiter. - async callLimiter() { - try { - let response; - try { - // Currently, fetch() needs a valid URL even though it's not actually going to the - // internet. We may loosen this in the future to accept an arbitrary string. But for now, - // we have to provide a dummy URL that will be ignored at the other end anyway. - response = await this.limiter.fetch("https://dummy-url", {method: "POST"}); - } catch (err) { - // `fetch()` threw an exception. This is probably because the limiter has been - // disconnected. Stubs implement E-order semantics, meaning that calls to the same stub - // are delivered to the remote object in order, until the stub becomes disconnected, after - // which point all further calls fail. This guarantee makes a lot of complex interaction - // patterns easier, but it means we must be prepared for the occasional disconnect, as - // networks are inherently unreliable. - // - // Anyway, get a new limiter and try again. If it fails again, something else is probably - // wrong. - this.limiter = this.getLimiterStub(); - response = await this.limiter.fetch("https://dummy-url", {method: "POST"}); - } - - // The response indicates how long we want to pause before accepting more requests. - let cooldown = +(await response.text()); - await new Promise(resolve => setTimeout(resolve, cooldown * 1000)); - - // Done waiting. - this.inCooldown = false; - } catch (err) { - this.reportError(err); - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/start.sh b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/start.sh deleted file mode 100755 index 5d8163b78..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/start.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -# use sed to replace the line starting with "command2 = isWsl" in the file -# this is needed to fix looking for the wrong powershell.exe on non-C:\ drives -sed -i 's/command2 = isWsl.*/command2 = "powershell.exe"/' ./node_modules/wrangler/wrangler-dist/cli.js - -RESOLVED_PORT=$PORT -if [ -z "$PORT" ]; then - RESOLVED_PORT=2222 -fi -echo "http://localhost:$RESOLVED_PORT/" - -# start local development server -node ./node_modules/wrangler dev -l --port $RESOLVED_PORT diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/wrangler.toml b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/wrangler.toml deleted file mode 100644 index cb783bdfa..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer/wrangler.toml +++ /dev/null @@ -1,25 +0,0 @@ -name = "multiplayer" -workers_dev = true -compatibility_date = "2023-06-01" -# Add your account ID here - -main = "src/chat.mjs" - -[site] -bucket = "./public" - -[durable_objects] -bindings = [ - { name = "rooms", class_name = "ChatRoom" }, - { name = "limiters", class_name = "RateLimiter" } -] - -[[rules]] -type = "Data" -globs = ["**/*.html"] -fallthrough = false - -# Indicate that you want the ChatRoom and RateLimiter classes to be callable as Durable Objects. -[[migrations]] -tag = "v1" # Should be unique for each entry -new_classes = ["ChatRoom", "RateLimiter"] \ No newline at end of file From 4e84788915e8f6355c865d1c806a68771c2da761 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:18:26 -0800 Subject: [PATCH 10/31] Update deps --- apps/chat/package.json | 4 ++-- packages/usdk/package.json | 2 +- packages/usdk/packages/upstreet-agent/package.json | 2 +- .../usdk/packages/upstreet-agent/packages/codecs/package.json | 2 +- .../upstreet-agent/packages/react-agents-client/package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 53193cc48..77e2e918b 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -53,7 +53,7 @@ "@tsndr/cloudflare-worker-jwt": "^2.5.3", "@types/eventsource": "^1.1.15", "@types/three": "^0.167.1", - "@upstreet/multiplayer": "file:../../packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer", + "agent-multiplayer": "^0.0.4", "@vercel/analytics": "1.1.2", "@vercel/kv": "1.0.1", "@vercel/og": "0.6.2", @@ -104,7 +104,7 @@ "ucom": "file:../../packages/ucom/src", "usehooks-ts": "2.16.0", "web-worker": "1.2.0", - "u8-encoder": "^0.0.3", + "u8-encoder": "^0.0.5", "zod": "^3.23.8" }, "devDependencies": { diff --git a/packages/usdk/package.json b/packages/usdk/package.json index 11c6b74c3..e025134a6 100644 --- a/packages/usdk/package.json +++ b/packages/usdk/package.json @@ -133,7 +133,7 @@ "wrangler": "^3.95.0", "ws": "^8.17.0", "yjs": "^13.6.18", - "u8-encoder": "^0.0.3", + "u8-encoder": "^0.0.5", "zod": "^3.23.8", "zod-to-ts": "^1.2.0", "zod-to-json-schema": "^3.23.5" diff --git a/packages/usdk/packages/upstreet-agent/package.json b/packages/usdk/packages/upstreet-agent/package.json index d1410f09b..a809f26ce 100644 --- a/packages/usdk/packages/upstreet-agent/package.json +++ b/packages/usdk/packages/upstreet-agent/package.json @@ -36,7 +36,7 @@ "typescript": "^5.6.2", "uuid-by-string": "^4.0.0", "yjs": "^13.6.18", - "u8-encoder": "^0.0.3", + "u8-encoder": "^0.0.5", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5", "zod-to-ts": "^1.2.0" diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/package.json index 2a1bff33e..7cd97138b 100644 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/codecs/package.json @@ -6,6 +6,6 @@ "libopusjs": "file:./packages/libopusjs", "mpg123-decoder": "file:./packages/mpg123-decoder", "queue-manager-async": "^0.0.1", - "u8-encoder": "^0.0.3" + "u8-encoder": "^0.0.5" } } diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json index 7cce48b7c..2a292877a 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json @@ -4,6 +4,6 @@ "main": "react-agents-client.mjs", "dependencies": { "react-agents": "file:../react-agents", - "@upstreet/multiplayer": "file:./packages/multiplayer" + "agent-multiplayer": "^0.0.4" } } From 4879d7aa310280b82e111d119196e7f21c7b62b3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:26:28 -0800 Subject: [PATCH 11/31] Remove codecs package --- .../packages/codecs/audio-classes.mjs | 31 - .../packages/codecs/audio-client.mjs | 630 - .../packages/codecs/audio-decode.mjs | 43 - .../packages/codecs/audio-encode.mjs | 33 - .../packages/codecs/audio-util.mjs | 22 - .../packages/codecs/convert.mjs | 17 - .../upstreet-agent/packages/codecs/format.mjs | 47 - .../packages/codecs/package.json | 11 - .../codecs/packages/lamejs/.gitignore | 8 - .../packages/codecs/packages/lamejs/LICENSE | 12 - .../packages/codecs/packages/lamejs/README.md | 121 - .../codecs/packages/lamejs/bower.json | 7 - .../doc/1000px-Mp3filestructure.svg.png | Bin 39078 -> 0 bytes .../codecs/packages/lamejs/example.html | 52 - .../codecs/packages/lamejs/lame.all.js | 15520 ---------------- .../codecs/packages/lamejs/lame.min.js | 308 - .../codecs/packages/lamejs/lame.min.mjs | 308 - .../codecs/packages/lamejs/makeall.sh | 16 - .../packages/codecs/packages/lamejs/minify.sh | 3 - .../codecs/packages/lamejs/package.json | 33 - .../packages/codecs/packages/lamejs/pom.xml | 69 - .../codecs/packages/lamejs/src/js/ATH.js | 79 - .../packages/lamejs/src/js/BitStream.js | 1027 - .../lamejs/src/js/CBRNewIterationLoop.js | 92 - .../packages/lamejs/src/js/CalcNoiseData.js | 14 - .../packages/lamejs/src/js/CalcNoiseResult.js | 27 - .../codecs/packages/lamejs/src/js/Encoder.js | 663 - .../codecs/packages/lamejs/src/js/FFT.js | 246 - .../packages/lamejs/src/js/GainAnalysis.js | 552 - .../codecs/packages/lamejs/src/js/GrInfo.js | 107 - .../packages/lamejs/src/js/ID3TagSpec.js | 25 - .../packages/lamejs/src/js/IIISideInfo.js | 34 - .../packages/lamejs/src/js/III_psy_ratio.js | 10 - .../packages/lamejs/src/js/III_psy_xmin.js | 33 - .../codecs/packages/lamejs/src/js/L3Side.js | 11 - .../codecs/packages/lamejs/src/js/Lame.js | 1870 -- .../packages/lamejs/src/js/LameGlobalFlags.js | 269 - .../lamejs/src/js/LameInternalFlags.js | 390 - .../codecs/packages/lamejs/src/js/MPEGMode.js | 17 - .../codecs/packages/lamejs/src/js/MeanBits.js | 5 - .../codecs/packages/lamejs/src/js/NewMDCT.js | 1164 -- .../codecs/packages/lamejs/src/js/NsPsy.js | 41 - .../codecs/packages/lamejs/src/js/Presets.js | 488 - .../codecs/packages/lamejs/src/js/PsyModel.js | 2898 --- .../codecs/packages/lamejs/src/js/Quantize.js | 1498 -- .../packages/lamejs/src/js/QuantizePVT.js | 1037 -- .../packages/lamejs/src/js/ReplayGain.js | 59 - .../packages/lamejs/src/js/Reservoir.js | 297 - .../codecs/packages/lamejs/src/js/ScaleFac.js | 52 - .../codecs/packages/lamejs/src/js/Tables.js | 514 - .../codecs/packages/lamejs/src/js/Takehiro.js | 1175 -- .../codecs/packages/lamejs/src/js/Tests.js | 84 - .../packages/lamejs/src/js/VBRQuantize.js | 13 - .../packages/lamejs/src/js/VBRSeekInfo.js | 34 - .../codecs/packages/lamejs/src/js/VBRTag.js | 970 - .../codecs/packages/lamejs/src/js/Version.js | 90 - .../codecs/packages/lamejs/src/js/common.js | 169 - .../codecs/packages/lamejs/src/js/index.js | 196 - .../lamejs/src/main/assembly/bundle.xml | 37 - .../packages/lamejs/src/main/java/COPYING | 481 - .../packages/lamejs/src/main/java/LICENSE | 12 - .../packages/lamejs/src/main/java/README | 7 - .../packages/lamejs/src/main/java/USAGE | 707 - .../src/main/java/lowlevel/LameDecoder.java | 171 - .../src/main/java/lowlevel/LameEncoder.java | 694 - .../src/main/java/mp3/ABRIterationLoop.java | 102 - .../lamejs/src/main/java/mp3/ABRPresets.java | 40 - .../lamejs/src/main/java/mp3/ATH.java | 61 - .../lamejs/src/main/java/mp3/BRHist.java | 42 - .../lamejs/src/main/java/mp3/BitStream.java | 1019 - .../main/java/mp3/CBRNewIterationLoop.java | 91 - .../src/main/java/mp3/CalcNoiseData.java | 12 - .../src/main/java/mp3/CalcNoiseResult.java | 25 - .../lamejs/src/main/java/mp3/Enc.java | 6 - .../lamejs/src/main/java/mp3/Encoder.java | 654 - .../lamejs/src/main/java/mp3/FFT.java | 267 - .../src/main/java/mp3/FrameDataNode.java | 15 - .../src/main/java/mp3/GainAnalysis.java | 533 - .../src/main/java/mp3/GenreListHandler.java | 5 - .../lamejs/src/main/java/mp3/GetAudio.java | 1327 -- .../lamejs/src/main/java/mp3/GrInfo.java | 78 - .../lamejs/src/main/java/mp3/HuffCodeTab.java | 27 - .../lamejs/src/main/java/mp3/ID3Tag.java | 1205 -- .../lamejs/src/main/java/mp3/ID3TagSpec.java | 23 - .../lamejs/src/main/java/mp3/IIISideInfo.java | 18 - .../src/main/java/mp3/III_psy_ratio.java | 6 - .../src/main/java/mp3/III_psy_xmin.java | 15 - .../src/main/java/mp3/IIterationLoop.java | 12 - .../lamejs/src/main/java/mp3/Inf.java | 10 - .../lamejs/src/main/java/mp3/L3Side.java | 30 - .../lamejs/src/main/java/mp3/Lame.java | 2373 --- .../src/main/java/mp3/LameGlobalFlags.java | 275 - .../src/main/java/mp3/LameInternalFlags.java | 342 - .../lamejs/src/main/java/mp3/LameTest.java | 180 - .../src/main/java/mp3/LongBlockConstrain.java | 156 - .../lamejs/src/main/java/mp3/MP3Data.java | 50 - .../lamejs/src/main/java/mp3/MPEGMode.java | 10 - .../lamejs/src/main/java/mp3/Main.java | 979 - .../lamejs/src/main/java/mp3/MeanBits.java | 9 - .../lamejs/src/main/java/mp3/NewMDCT.java | 1145 -- .../lamejs/src/main/java/mp3/NsPsy.java | 21 - .../lamejs/src/main/java/mp3/PSY.java | 24 - .../lamejs/src/main/java/mp3/Parse.java | 1885 -- .../src/main/java/mp3/PlottingData.java | 97 - .../lamejs/src/main/java/mp3/Presets.java | 423 - .../lamejs/src/main/java/mp3/PsyModel.java | 2942 --- .../lamejs/src/main/java/mp3/Quantize.java | 1478 -- .../lamejs/src/main/java/mp3/QuantizePVT.java | 1009 - .../lamejs/src/main/java/mp3/ReplayGain.java | 41 - .../lamejs/src/main/java/mp3/Reservoir.java | 295 - .../lamejs/src/main/java/mp3/ScaleFac.java | 27 - .../lamejs/src/main/java/mp3/ShortBlock.java | 20 - .../main/java/mp3/ShortBlockConstrain.java | 89 - .../lamejs/src/main/java/mp3/Tables.java | 507 - .../lamejs/src/main/java/mp3/Takehiro.java | 1179 -- .../lamejs/src/main/java/mp3/Util.java | 38 - .../main/java/mp3/VBRNewIterationLoop.java | 97 - .../main/java/mp3/VBROldIterationLoop.java | 119 - .../lamejs/src/main/java/mp3/VBRPresets.java | 44 - .../lamejs/src/main/java/mp3/VBRQuantize.java | 1126 -- .../lamejs/src/main/java/mp3/VBRSeekInfo.java | 32 - .../lamejs/src/main/java/mp3/VBRTag.java | 989 - .../lamejs/src/main/java/mp3/VBRTagData.java | 50 - .../lamejs/src/main/java/mp3/VbrMode.java | 6 - .../lamejs/src/main/java/mp3/Version.java | 90 - .../lamejs/src/main/java/mpg/Common.java | 251 - .../lamejs/src/main/java/mpg/DCT64.java | 346 - .../lamejs/src/main/java/mpg/Decode.java | 325 - .../lamejs/src/main/java/mpg/Frame.java | 31 - .../lamejs/src/main/java/mpg/Huffman.java | 280 - .../lamejs/src/main/java/mpg/Interface.java | 700 - .../lamejs/src/main/java/mpg/L2Tables.java | 198 - .../lamejs/src/main/java/mpg/Layer1.java | 189 - .../lamejs/src/main/java/mpg/Layer2.java | 315 - .../lamejs/src/main/java/mpg/Layer3.java | 2019 -- .../lamejs/src/main/java/mpg/MPG123.java | 63 - .../lamejs/src/main/java/mpg/MPGLib.java | 373 - .../lamejs/src/main/java/mpg/TabInit.java | 138 - .../src/main/java/ui/InputTableModel.java | 60 - .../lamejs/src/main/java/ui/LameUI.java | 418 - .../lamejs/src/main/java/ui/Picture.java | 63 - .../lamejs/src/main/resources/LameUI.xml | 150 - .../lamejs/src/main/resources/picture.png | Bin 30667 -> 0 bytes .../lamejs/src/main/resources/run.bat | 1 - .../packages/lamejs/src/main/resources/run.sh | 2 - .../codecs/packages/lamejs/testdata/Left.wav | Bin 720044 -> 0 bytes .../packages/lamejs/testdata/Left44100.wav | Bin 661578 -> 0 bytes .../codecs/packages/lamejs/testdata/Right.wav | Bin 720044 -> 0 bytes .../packages/lamejs/testdata/Right44100.wav | Bin 661578 -> 0 bytes .../packages/lamejs/testdata/Stereo44100.wav | Bin 1323078 -> 0 bytes .../packages/lamejs/worker-example/index.html | 123 - .../packages/lamejs/worker-example/index.js | 86 - .../packages/lamejs/worker-example/mic.html | 95 - .../packages/lamejs/worker-example/mic.js | 103 - .../lamejs/worker-example/worker-realtime.js | 81 - .../packages/lamejs/worker-example/worker.js | 90 - .../codecs/packages/libopusjs/libopus.wasm | Bin 377342 -> 0 bytes .../packages/libopusjs/libopus.wasm.fetch.js | 3732 ---- .../packages/libopusjs/libopus.wasm.fs.js | 3741 ---- .../codecs/packages/libopusjs/libopus.wasm.js | 3731 ---- .../codecs/packages/libopusjs/package.json | 4 - .../codecs/packages/mpg123-decoder/README.md | 264 - .../codecs/packages/mpg123-decoder/index.js | 8 - .../packages/mpg123-decoder/package.json | 58 - .../wasm-audio-decoders-common/index.js | 5 - .../wasm-audio-decoders-common/package.json | 32 - .../src/WASMAudioDecoderCommon.js | 231 - .../src/WASMAudioDecoderWorker.js | 129 - .../src/puff/README | 67 - .../src/puff/build_puff.js | 31 - .../src/puff/puff.c | 863 - .../src/puff/puff.h | 35 - .../src/utilities.js | 3 - .../wasm-audio-decoders-common/types.d.ts | 7 - .../packages/mpg123-decoder/rollup.json | 10 - .../mpg123-decoder/src/EmscriptenWasm.js | Bin 82580 -> 0 bytes .../mpg123-decoder/src/MPEGDecoder.fetch.js | 221 - .../mpg123-decoder/src/MPEGDecoder.fs.js | 216 - .../mpg123-decoder/src/MPEGDecoder.js | 206 - .../src/MPEGDecoderWebWorker.js | 21 - .../mpg123-decoder/src/emscripten-post.js | 11 - .../mpg123-decoder/src/emscripten-pre.js | 1 - .../mpg123-decoder/src/emscripten-wasm.wasm | Bin 111742 -> 0 bytes .../mpg123-decoder/src/mpeg_frame_decoder.c | 94 - .../mpg123-decoder/src/mpeg_frame_decoder.h | 82 - .../src/wasm-audio-decoder-common.wasm | Bin 2628 -> 0 bytes .../packages/mpg123-decoder/terser.json | 46 - .../codecs/packages/mpg123-decoder/types.d.ts | 30 - .../packages/codecs/resample.mjs | 23 - .../packages/codecs/webp-codec.mjs | 83 - .../packages/codecs/webp-worker.mjs | 60 - .../packages/codecs/ws-codec-runtime-edge.mjs | 9 - .../packages/codecs/ws-codec-runtime-fs.mjs | 9 - .../codecs/ws-codec-runtime-worker.mjs | 58 - .../packages/codecs/ws-codec-util.mjs | 111 - .../packages/codecs/ws-codec.mjs | 148 - .../packages/codecs/ws-constants-server.mjs | 9 - .../packages/codecs/ws-constants.mjs | 28 - .../packages/codecs/ws-mp3-decoder-worker.mjs | 18 - .../packages/codecs/ws-mp3-decoder.mjs | 84 - .../packages/codecs/ws-mp3-encoder-worker.mjs | 18 - .../packages/codecs/ws-mp3-encoder.mjs | 65 - .../packages/codecs/ws-opus-codec-worker.js | 21 - .../packages/codecs/ws-opus-codec.mjs | 107 - .../packages/codecs/ws-util-server.mjs | 35 - 205 files changed, 80685 deletions(-) delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/audio-classes.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/audio-client.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/audio-decode.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/audio-encode.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/audio-util.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/convert.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/format.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/.gitignore delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/LICENSE delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/README.md delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/bower.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/doc/1000px-Mp3filestructure.svg.png delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/example.html delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.all.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/makeall.sh delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/minify.sh delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/pom.xml delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ATH.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/BitStream.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CBRNewIterationLoop.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseData.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseResult.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Encoder.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/FFT.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GainAnalysis.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GrInfo.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ID3TagSpec.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/IIISideInfo.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_ratio.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_xmin.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/L3Side.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Lame.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameGlobalFlags.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameInternalFlags.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MPEGMode.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MeanBits.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NewMDCT.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NsPsy.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Presets.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/PsyModel.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Quantize.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/QuantizePVT.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ReplayGain.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Reservoir.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ScaleFac.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tables.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Takehiro.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tests.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRQuantize.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRSeekInfo.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRTag.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Version.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/common.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/index.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/assembly/bundle.xml delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/COPYING delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/LICENSE delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/README delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/USAGE delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameDecoder.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameEncoder.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRIterationLoop.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRPresets.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ATH.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BRHist.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BitStream.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CBRNewIterationLoop.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseData.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseResult.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Enc.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Encoder.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FFT.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FrameDataNode.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GainAnalysis.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GenreListHandler.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GetAudio.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GrInfo.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/HuffCodeTab.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3Tag.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3TagSpec.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIISideInfo.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_ratio.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_xmin.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIterationLoop.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Inf.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/L3Side.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Lame.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameGlobalFlags.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameInternalFlags.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameTest.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LongBlockConstrain.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MP3Data.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MPEGMode.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Main.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MeanBits.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NewMDCT.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NsPsy.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PSY.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Parse.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PlottingData.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Presets.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PsyModel.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Quantize.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/QuantizePVT.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ReplayGain.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Reservoir.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ScaleFac.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlock.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlockConstrain.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Tables.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Takehiro.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Util.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRNewIterationLoop.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBROldIterationLoop.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRPresets.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRQuantize.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRSeekInfo.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTag.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTagData.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VbrMode.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Version.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Common.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/DCT64.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Decode.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Frame.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Huffman.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Interface.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/L2Tables.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer1.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer2.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer3.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPG123.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPGLib.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/TabInit.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/InputTableModel.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/LameUI.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/Picture.java delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/LameUI.xml delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/picture.png delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.bat delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.sh delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Left.wav delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Left44100.wav delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Right.wav delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Right44100.wav delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Stereo44100.wav delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.html delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.html delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker-realtime.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.fetch.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.fs.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/README.md delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/index.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/index.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/package.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderCommon.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderWorker.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/README delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/build_puff.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.c delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.h delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/utilities.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/types.d.ts delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/rollup.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/EmscriptenWasm.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fetch.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fs.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoderWebWorker.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-post.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-pre.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-wasm.wasm delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.c delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.h delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/wasm-audio-decoder-common.wasm delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/terser.json delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/types.d.ts delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/resample.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-edge.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-fs.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-worker.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-util.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants-server.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder-worker.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder-worker.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec-worker.js delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/codecs/ws-util-server.mjs diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-classes.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/audio-classes.mjs deleted file mode 100644 index 5414c8bb8..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-classes.mjs +++ /dev/null @@ -1,31 +0,0 @@ -export class AudioOutput extends EventTarget { - constructor() { - super(); - - this.live = true; - } - write(data) { - this.dispatchEvent(new MessageEvent('data', { - data, - })); - } - end() { - this.live = false; - this.dispatchEvent(new MessageEvent('end')); - } - readAll() { - return new Promise((accept, reject) => { - const bs = []; - if (this.live) { - this.addEventListener('data', e => { - bs.push(e.data); - }); - this.addEventListener('end', () => { - accept(bs); - }); - } else { - accept(bs); - } - }); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-client.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/audio-client.mjs deleted file mode 100644 index 75b2e3b6a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-client.mjs +++ /dev/null @@ -1,630 +0,0 @@ -import {OpusAudioEncoder, OpusAudioDecoder, Mp3AudioEncoder, Mp3AudioDecoder} from './ws-codec.mjs'; -import {WsMediaStreamAudioReader, FakeAudioData} from './ws-codec-util.mjs'; -import {AudioOutput} from './audio-classes.mjs'; -import {getEncodedAudioChunkBuffer, getAudioDataBuffer} from './audio-util.mjs'; - -// opus stream -> decoded output audio node -export function createOpusAudioOutputStream({ - audioContext, - codecs, -}) { - if (!audioContext) { - throw new Error('missing audio context'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - const audioWorkletNode = new AudioWorkletNode( - audioContext, - 'ws-output-worklet', - ); - audioWorkletNode.addEventListener('processorerror', e => { - console.log('audioWorkletNode processorerror', e); - }); - audioWorkletNode.port.onmessage = e => { - // console.log('audio worklet node message', e.data); - const { - method, - } = e.data; - switch (method) { - case 'finish': { - // console.log('finish', performance.now()); - audioWorkletNode.dispatchEvent(new MessageEvent('finish')); - break; - } - default: { - console.warn('opus audio stream got unknown method', method); - break; - } - } - }; - - const audioDecoder = new OpusAudioDecoder({ - sampleRate: audioContext.sampleRate, - output: data => { - if (data) { - // console.log('decoded data', structuredClone(data?.data), performance.now()); - data = getAudioDataBuffer(data); - audioWorkletNode.port.postMessage(data, [data.buffer]); - } else { - audioWorkletNode.port.postMessage(null); - } - }, - }); - - return { - outputNode: audioWorkletNode, - audioDecoder, - write(data) { - // console.log('decode data', structuredClone(data)); - audioDecoder.decode(data); - }, - end() { - // console.log('decode end'); - audioDecoder.decode(null); - } - // close() { - // audioWorkletNode.disconnect(); - // audioDecoder.close(); - // }, - }; -} - -// media stream -> encoded opus audio output -export function createOpusMicrophoneSource({ - mediaStream, - audioContext, - codecs, -}) { - if (!audioContext) { - throw new Error('missing audio context'); - } - if (!mediaStream) { - throw new Error('missing media stream'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - const output = new AudioOutput(); - - const muxAndSend = encodedChunk => { - if (encodedChunk.data) { - const data = getEncodedAudioChunkBuffer(encodedChunk); - output.write(data); - } else { - output.end(); - } - }; - function onEncoderError(err) { - console.warn('encoder error', err); - } - const audioEncoder = new OpusAudioEncoder({ - sampleRate: audioContext.sampleRate, - codecs, - output: muxAndSend, - error: onEncoderError, - }); - - const audioReader = new WsMediaStreamAudioReader(mediaStream, { - audioContext, - }); - async function readAndEncode() { - const result = await audioReader.read(); - if (!result.done) { - audioEncoder.encode(result.value); - readAndEncode(); - } else { - audioEncoder.encode(new FakeAudioData()); - } - } - readAndEncode(); - - const id = crypto.randomUUID(); - - return { - id, - output, - mediaStream, - audioReader, - audioEncoder, - close() { - audioReader.cancel(); - // note: the encoder will close itself on an end packet - // audioEncoder.close(); - }, - }; -}; - -// media stream -> pcm (Float32) 48000 audio output -export function createPcmF32MicrophoneSource({ - mediaStream, - audioContext, -}) { - if (!audioContext) { - throw new Error('missing audio context'); - } - if (!mediaStream) { - throw new Error('missing media stream'); - } - - const output = new AudioOutput(); - - const audioReader = new WsMediaStreamAudioReader(mediaStream, { - audioContext, - sampleRate: 48000, - }); - const _readLoop = async () => { - for (;;) { - const result = await audioReader.read(); - if (!result.done) { - output.write(result.value.data); - } else { - output.end(); - break; - } - } - }; - _readLoop(); - - const id = crypto.randomUUID(); - - return { - id, - output, - mediaStream, - audioReader, - // audioEncoder, - close() { - audioReader.cancel(); - // note: the encoder will close itself on an end packet - // audioEncoder.close(); - }, - }; -}; - -// samples readable stream -> encoded opus audio output -export function createOpusReadableStreamSource({ - readableStream, - // audioContext, - codecs, -}) { - if (!readableStream) { - throw new Error('missing readable stream'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - const {sampleRate} = readableStream; - if (!sampleRate) { - throw new Error('createOpusReadableStreamSource: missing sample rate on readable stream'); - } - - // create output - const output = new AudioOutput(); - - // create encoder - const muxAndSend = encodedChunk => { - if (encodedChunk.data) { - const data = getEncodedAudioChunkBuffer(encodedChunk); - output.write(data); - } else { - output.end(); - } - }; - function onEncoderError(err) { - console.warn('encoder error', err); - } - const audioEncoder = new OpusAudioEncoder({ - sampleRate, - codecs, - output: muxAndSend, - error: onEncoderError, - }); - - // read the stream - (async () => { - const fakeAudioData = new FakeAudioData(); - const reader = readableStream.getReader(); - for (;;) { - const {done, value} = await reader.read(); - if (!done) { - fakeAudioData.set(value); - audioEncoder.encode(fakeAudioData); - } else { - fakeAudioData.set(null); - audioEncoder.encode(fakeAudioData); - break; - } - } - })(); - - // return result - const id = crypto.randomUUID(); - - return { - id, - output, - audioEncoder, - close() { - audioReader.cancel(); - // note: the encoder will close itself on an end packet - // audioEncoder.close(); - }, - }; -} - -// samples readable stream -> encoded mp3 audio output -export function createMp3ReadableStreamSource({ - readableStream, - // audioContext, - codecs, -}) { - if (!readableStream) { - throw new Error('missing readable stream'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - const {sampleRate} = readableStream; - if (!sampleRate) { - throw new Error('createMp3ReadableStreamSource: missing sample rate on stream'); - } - - // create output - const output = new AudioOutput(); - - // create encoder - const muxAndSend = encodedChunk => { - if (encodedChunk.data) { - const data = getEncodedAudioChunkBuffer(encodedChunk); - output.write(data); - } else { - output.end(); - } - }; - function onEncoderError(err) { - console.warn('encoder error', err); - } - const audioEncoder = new Mp3AudioEncoder({ - sampleRate, - codecs, - output: muxAndSend, - error: onEncoderError, - }); - - // read the stream - (async () => { - const fakeAudioData = new FakeAudioData(); - const reader = readableStream.getReader(); - for (;;) { - const {done, value} = await reader.read(); - if (!done) { - fakeAudioData.set(value); - audioEncoder.encode(fakeAudioData); - } else { - fakeAudioData.set(null); - audioEncoder.encode(fakeAudioData); - break; - } - } - })(); - - // return result - const id = crypto.randomUUID(); - - return { - id, - output, - audioEncoder, - close() { - audioReader.cancel(); - // note: the encoder will close itself on an end packet - // audioEncoder.close(); - }, - }; -} - -// media stream -> encoded mp3 audio output -export function createMp3MicrophoneSource({ - mediaStream, - audioContext, - codecs, -}) { - const output = new AudioOutput(); - - const muxAndSend = encodedChunk => { - if (encodedChunk.data) { - const data = getEncodedAudioChunkBuffer(encodedChunk); - output.write(data); - } else { - output.end(); - } - }; - function onEncoderError(err) { - console.warn('mp3 encoder error', err); - } - const audioEncoder = new Mp3AudioEncoder({ - sampleRate: audioContext.sampleRate, - output: muxAndSend, - error: onEncoderError, - }); - - const audioReader = new WsMediaStreamAudioReader(mediaStream, { - audioContext, - codecs, - }); - async function readAndEncode() { - const result = await audioReader.read(); - if (!result.done) { - audioEncoder.encode(result.value); - readAndEncode(); - } else { - audioEncoder.encode(new FakeAudioData()); - } - } - readAndEncode(); - - const id = crypto.randomUUID(); - - return { - id, - output, - mediaStream, - audioReader, - audioEncoder, - close() { - audioReader.cancel(); - // note: the encoder will close itself on an end packet - // audioEncoder.close(); - }, - }; -} - -// -// DECODER STREAMS -// - -export function createMp3DecodeTransformStream({ - sampleRate, - format = 'f32', - transferBuffers, - codecs, -}) { - if (!sampleRate) { - throw new Error('missing sample rate'); - } - if (!format) { - throw new Error('missing format'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - let controller; - const { - promise: donePromise, - resolve: doneResolve, - reject: doneReject, - } = Promise.withResolvers(); - const transformStream = new TransformStream({ - start: (c) => { - controller = c; - }, - transform: (chunk) => { - // console.log('decoding data', chunk); - audioDecoder.decode(chunk); - }, - flush: async () => { - audioDecoder.decode(null); - await donePromise; - }, - }); - - const muxAndSend = encodedChunk => { - // console.log('decoded data', encodedChunk); - if (encodedChunk) { - controller.enqueue(encodedChunk.data); - } else { - doneResolve(); - } - }; - function onDecoderError(err) { - console.warn('mp3 decoder error', err); - } - const audioDecoder = new Mp3AudioDecoder({ - sampleRate, - format, - codecs, - transferBuffers, - output: muxAndSend, - error: onDecoderError, - }); - - transformStream.readable.sampleRate = sampleRate; - transformStream.readable.format = format; - transformStream.abort = (reason) => { - transformStream.readable.cancel(reason); - transformStream.writable.abort(reason); - audioDecoder.close(); - }; - - return transformStream; -} - -export function createOpusDecodeTransformStream({ - sampleRate, - format = 'f32', - codecs, -}) { - if (!sampleRate) { - throw new Error('missing sample rate'); - } - if (!format) { - throw new Error('missing format'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - let controller; - const { - promise: donePromise, - resolve: doneResolve, - reject: doneReject, - } = Promise.withResolvers(); - const transformStream = new TransformStream({ - start: (c) => { - controller = c; - }, - transform: (chunk) => { - // console.log('decode data 1', chunk); - audioDecoder.decode(chunk); - }, - flush: async () => { - audioDecoder.decode(null); - await donePromise; - }, - }); - - const muxAndSend = encodedChunk => { - if (encodedChunk) { - // console.log('decode data', encodedChunk.data); - controller.enqueue(encodedChunk.data); - } else { - doneResolve(); - } - }; - function onDecoderError(err) { - console.warn('opus decoder error', err); - } - const audioDecoder = new OpusAudioDecoder({ - sampleRate, - format, - codecs, - output: muxAndSend, - error: onDecoderError, - }); - - transformStream.readable.sampleRate = sampleRate; - transformStream.readable.format = format; - transformStream.abort = (reason) => { - transformStream.readable.cancel(reason); - transformStream.writable.abort(reason); - audioDecoder.close(); - }; - - return transformStream; -} - -export function createPcmF32TransformStream({ - sampleRate, - format = 'f32', -}) { - if (!sampleRate) { - throw new Error('missing sample rate'); - } - if (!format) { - throw new Error('missing format'); - } - - throw new Error('not implemented'); - - // let controller; - const transformStream = new TransformStream({ - start: c => { - controller = c; - }, - transform: (chunk, controller) => { - console.log('decode pcm', chunk); - // const formatted = formatSamples(output, format, 'i16'); - }, - flush: async controller => { - console.log('flush pcm'); - // await donePromise; - }, - }); - - transformStream.readable.sampleRate = sampleRate; - transformStream.readable.format = format; - transformStream.abort = (reason) => { - transformStream.readable.cancel(reason); - transformStream.writable.abort(reason); - }; - - return transformStream; -} - -// -// ENCODER STREAMS -// - -export function createMp3EncodeTransformStream({ - sampleRate, - transferBuffers, - codecs, -}) { - if (!sampleRate) { - throw new Error('missing sample rate'); - } - if (!codecs) { - throw new Error('missing codecs'); - } - - let controller; - const { - promise: donePromise, - resolve: doneResolve, - reject: doneReject, - } = Promise.withResolvers(); - const transformStream = new TransformStream({ - start: (c) => { - controller = c; - }, - transform: (chunk) => { - const audioData = new FakeAudioData(); - audioData.data = new Float32Array(chunk.buffer, chunk.byteOffset, chunk.byteLength / Float32Array.BYTES_PER_ELEMENT); - audioEncoder.encode(audioData); - }, - flush: async () => { - // console.log('flush'); - audioEncoder.encode(new FakeAudioData()); - await donePromise; - }, - }); - - // create encoder - const muxAndSend = encodedChunk => { - // console.log('mux and send', encodedChunk); - if (encodedChunk.data) { - const data = getEncodedAudioChunkBuffer(encodedChunk); - // output.write(data); - controller.enqueue(data); - } else { - // output.end(); - doneResolve(); - } - }; - function onEncoderError(err) { - console.warn('mp3 encoder error', err); - } - const audioEncoder = new Mp3AudioEncoder({ - sampleRate, - transferBuffers, - codecs, - output: muxAndSend, - error: onEncoderError, - }); - - transformStream.readable.sampleRate = sampleRate; - transformStream.abort = (reason) => { - transformStream.readable.cancel(reason); - transformStream.writable.abort(reason); - audioEncoder.close(); - }; - - return transformStream; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-decode.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/audio-decode.mjs deleted file mode 100644 index db231366c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-decode.mjs +++ /dev/null @@ -1,43 +0,0 @@ -import { - createMp3DecodeTransformStream, - createOpusDecodeTransformStream, - createPcmF32TransformStream, -} from './audio-client.mjs'; - -export class AudioDecodeStream { - constructor({ - type, - sampleRate, - format, - codecs, - }) { - if (!codecs) { - throw new Error('no codecs'); - } - - switch (type) { - case 'audio/mpeg': { - return createMp3DecodeTransformStream({ - sampleRate, - format, - codecs, - }); - } - case 'audio/opus': { - return createOpusDecodeTransformStream({ - sampleRate, - format, - }); - } - case 'audio/pcm-f32': { - return createPcmF32TransformStream({ - sampleRate, - format, - }); - } - default: { - throw new Error(`unhandled audio mime type: ${type}`); - } - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-encode.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/audio-encode.mjs deleted file mode 100644 index c8152c0ba..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-encode.mjs +++ /dev/null @@ -1,33 +0,0 @@ -import { createMp3EncodeTransformStream } from './audio-client.mjs'; - -export class AudioEncodeStream { - constructor({ - type, - sampleRate, - codecs, - transferBuffers, - }) { - if (!type) { - throw new Error('no type'); - } - if (!sampleRate) { - throw new Error('no sample rate'); - } - if (!codecs) { - throw new Error('no codecs'); - } - - switch (type) { - case 'audio/mpeg': { - return createMp3EncodeTransformStream({ - sampleRate, - codecs, - transferBuffers, - }); - } - default: { - throw new Error(`unhandled audio mime type: ${type}`); - } - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-util.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/audio-util.mjs deleted file mode 100644 index 857b6e36c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/audio-util.mjs +++ /dev/null @@ -1,22 +0,0 @@ -export const getAudioDataBuffer = audioData => { - let channelData; - if (audioData.copyTo) { // new api - channelData = new Float32Array(audioData.numberOfFrames); - audioData.copyTo(channelData, { - planeIndex: 0, - frameCount: audioData.numberOfFrames, - }); - } else { // old api - channelData = audioData.buffer.getChannelData(0); - } - return channelData; -}; -export const getEncodedAudioChunkBuffer = encodedAudioChunk => { - if (encodedAudioChunk.copyTo) { // new api - const data = new Uint8Array(encodedAudioChunk.byteLength); - encodedAudioChunk.copyTo(data); - return data; - } else { // old api - return new Uint8Array(encodedAudioChunk.data); - } -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/convert.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/convert.mjs deleted file mode 100644 index 2f31f11a9..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/convert.mjs +++ /dev/null @@ -1,17 +0,0 @@ -export function floatTo16Bit(inputArray){ - const output = new Int16Array(inputArray.length); - for (let i = 0; i < inputArray.length; i++){ - const s = Math.max(-1, Math.min(1, inputArray[i])); - output[i] = s < 0 ? s * 0x8000 : s * 0x7FFF; - } - return output; -} -export function int16ToFloat32(inputArray) { - const output = new Float32Array(inputArray.length); - for (let i = 0; i < inputArray.length; i++) { - const int = inputArray[i]; - const float = (int >= 0x8000) ? -(0x10000 - int) / 0x8000 : int / 0x7FFF; - output[i] = float; - } - return output; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/format.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/format.mjs deleted file mode 100644 index cd5d560da..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/format.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import { int16ToFloat32, floatTo16Bit } from './convert.mjs'; - -const validFormats = ['f32', 'i16']; - -export const formatSamples = (samples, dstFormat, srcFormat) => { - if (!samples || !dstFormat || !srcFormat) { - throw new Error('missing arguments: ' + JSON.stringify({ - samples: !!samples, - dstFormat: !!dstFormat, - srcFormat: !!srcFormat, - })); - } - if (!validFormats.includes(srcFormat)) { - throw new Error('invalid srcFormat: ' + srcFormat); - } - if (!validFormats.includes(dstFormat)) { - throw new Error('invalid dstFormat: ' + dstFormat); - } - - if (dstFormat === srcFormat) { - return samples; - } else { - switch (dstFormat) { - case 'f32': { - if (srcFormat === 'i16') { - const i16 = samples; - const f32 = int16ToFloat32(i16); - return f32; - } else { - return samples; - } - } - case 'i16': { - if (srcFormat === 'f32') { - const f32 = samples; - const i16 = floatTo16Bit(f32); - return i16; - } else { - return samples; - } - } - default: { - throw new Error('invalid format: ' + format); - } - } - } -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/package.json deleted file mode 100644 index 7cd97138b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "codecs", - "type": "module", - "dependencies": { - "lamejs": "file:./packages/lamejs", - "libopusjs": "file:./packages/libopusjs", - "mpg123-decoder": "file:./packages/mpg123-decoder", - "queue-manager-async": "^0.0.1", - "u8-encoder": "^0.0.5" - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/.gitignore b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/.gitignore deleted file mode 100644 index 737f08e0d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.idea/* -.settings/* -target/* -*.iml -*.jar -.project -.classpath -node_modules diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/LICENSE b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/LICENSE deleted file mode 100644 index e456b65d3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/LICENSE +++ /dev/null @@ -1,12 +0,0 @@ -Can I use LAME in my commercial program? - -Yes, you can, under the restrictions of the LGPL. The easiest -way to do this is to: - -1. Link to LAME as separate jar (lame.min.js or lame.all.js) - -2. Fully acknowledge that you are using LAME, and give a link - to our web site, lame.sourceforge.net - -3. If you make modifications to LAME, you *must* release these - these modifications back to the LAME project, under the LGPL. diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/README.md b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/README.md deleted file mode 100644 index 8301ade5c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# lamejs -Fast mp3 encoder written in JavaScript. -On my machine it works 20x faster than realtime (it will encode 132 second long sample in 6.5 seconds) both on node and chrome. -lamejs is a rewrite of jump3r-code which is a rewrite of libmp3lame. - -## Installation - -To install via Bower or npm, simply do the following: - -```bash -$ bower install lamejs --save -``` - -```bash -$ npm install lamejs -``` - -# Quick Start - -```javascript - - -``` - -To use lamejs in Node.js build, you can install it from `npm`: - -``` -npm install lamejs -``` - -Then use it: - -``` -var lamejs = require("lamejs"); -``` - -# Real Example - -Either see [example.html](https://github.com/zhuker/lamejs/blob/master/example.html) for full example of wav file encoding in browser or use this: - -```javascript - - -``` - -# Stereo - -If you want to encode stereo mp3 use separate sample buffers for left and right channel - -```javascript - - -``` diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/bower.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/bower.json deleted file mode 100644 index 7f7bb1727..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/bower.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "lamejs", - "homepage": "https://github.com/zhuker/lamejs", - "description": "Fast mp3 encoder written in JavaScript. On my machine it works 20x faster than realtime (it will encode 132 second long sample in 6.5 seconds) both on node and chrome. lamejs is a rewrite of jump3r-code which is a rewrite of libmp3lame", - "source": "https://github.com/zhuker/lamejs.git", - "main": "lame.min.js" -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/doc/1000px-Mp3filestructure.svg.png b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/doc/1000px-Mp3filestructure.svg.png deleted file mode 100644 index 1715335fa34a775026e24f7a286a5ba08252c0c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39078 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 LapTi<{m1_Ye9*dU diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/example.html b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/example.html deleted file mode 100644 index 8f4baa775..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/example.html +++ /dev/null @@ -1,52 +0,0 @@ - -Encoding mp3 from testdata/Left44100.wav - - - - diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.all.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.all.js deleted file mode 100644 index f73a1d1a9..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.all.js +++ /dev/null @@ -1,15520 +0,0 @@ -function lamejs() { -function new_byte(count) { - return new Int8Array(count); -} - -function new_short(count) { - return new Int16Array(count); -} - -function new_int(count) { - return new Int32Array(count); -} - -function new_float(count) { - return new Float32Array(count); -} - -function new_double(count) { - return new Float64Array(count); -} - -function new_float_n(args) { - if (args.length == 1) { - return new_float(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_float_n(args)); - } - return A; -} -function new_int_n(args) { - if (args.length == 1) { - return new_int(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_int_n(args)); - } - return A; -} - -function new_short_n(args) { - if (args.length == 1) { - return new_short(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_short_n(args)); - } - return A; -} - -function new_array_n(args) { - if (args.length == 1) { - return new Array(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_array_n(args)); - } - return A; -} - - -var Arrays = {}; - -Arrays.fill = function (a, fromIndex, toIndex, val) { - if (arguments.length == 2) { - for (var i = 0; i < a.length; i++) { - a[i] = arguments[1]; - } - } else { - for (var i = fromIndex; i < toIndex; i++) { - a[i] = val; - } - } -}; - -var System = {}; - -System.arraycopy = function (src, srcPos, dest, destPos, length) { - var srcEnd = srcPos + length; - while (srcPos < srcEnd) - dest[destPos++] = src[srcPos++]; -}; - - -var Util = {}; -Util.SQRT2 = 1.41421356237309504880; -Util.FAST_LOG10 = function (x) { - return Math.log10(x); -}; - -Util.FAST_LOG10_X = function (x, y) { - return Math.log10(x) * y; -}; - -function ShortBlock(ordinal) { - this.ordinal = ordinal; -} -/** - * LAME may use them, even different block types for L/R. - */ -ShortBlock.short_block_allowed = new ShortBlock(0); -/** - * LAME may use them, but always same block types in L/R. - */ -ShortBlock.short_block_coupled = new ShortBlock(1); -/** - * LAME will not use short blocks, long blocks only. - */ -ShortBlock.short_block_dispensed = new ShortBlock(2); -/** - * LAME will not use long blocks, short blocks only. - */ -ShortBlock.short_block_forced = new ShortBlock(3); - -var Float = {}; -Float.MAX_VALUE = 3.4028235e+38; - -function VbrMode(ordinal) { - this.ordinal = ordinal; -} -VbrMode.vbr_off = new VbrMode(0); -VbrMode.vbr_mt = new VbrMode(1); -VbrMode.vbr_rh = new VbrMode(2); -VbrMode.vbr_abr = new VbrMode(3); -VbrMode.vbr_mtrh = new VbrMode(4); -VbrMode.vbr_default = VbrMode.vbr_mtrh; - -var assert = function (x) { - //console.assert(x); -}; - -var module_exports = { - "System": System, - "VbrMode": VbrMode, - "Float": Float, - "ShortBlock": ShortBlock, - "Util": Util, - "Arrays": Arrays, - "new_array_n": new_array_n, - "new_byte": new_byte, - "new_double": new_double, - "new_float": new_float, - "new_float_n": new_float_n, - "new_int": new_int, - "new_int_n": new_int_n, - "new_short": new_short, - "new_short_n": new_short_n, - "assert": assert -}; -//package mp3; - -/* MPEG modes */ -function MPEGMode(ordinal) { - var _ordinal = ordinal; - this.ordinal = function () { - return _ordinal; - } -} - -MPEGMode.STEREO = new MPEGMode(0); -MPEGMode.JOINT_STEREO = new MPEGMode(1); -MPEGMode.DUAL_CHANNEL = new MPEGMode(2); -MPEGMode.MONO = new MPEGMode(3); -MPEGMode.NOT_SET = new MPEGMode(4); - -function Version() { - - /** - * URL for the LAME website. - */ - var LAME_URL = "http://www.mp3dev.org/"; - - /** - * Major version number. - */ - var LAME_MAJOR_VERSION = 3; - /** - * Minor version number. - */ - var LAME_MINOR_VERSION = 98; - /** - * Patch level. - */ - var LAME_PATCH_VERSION = 4; - - /** - * Major version number. - */ - var PSY_MAJOR_VERSION = 0; - /** - * Minor version number. - */ - var PSY_MINOR_VERSION = 93; - - /** - * A string which describes the version of LAME. - * - * @return string which describes the version of LAME - */ - this.getLameVersion = function () { - // primary to write screen reports - return (LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "." + LAME_PATCH_VERSION); - } - - /** - * The short version of the LAME version string. - * - * @return short version of the LAME version string - */ - this.getLameShortVersion = function () { - // Adding date and time to version string makes it harder for output - // validation - return (LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "." + LAME_PATCH_VERSION); - } - - /** - * The shortest version of the LAME version string. - * - * @return shortest version of the LAME version string - */ - this.getLameVeryShortVersion = function () { - // Adding date and time to version string makes it harder for output - return ("LAME" + LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "r"); - } - - /** - * String which describes the version of GPSYCHO - * - * @return string which describes the version of GPSYCHO - */ - this.getPsyVersion = function () { - return (PSY_MAJOR_VERSION + "." + PSY_MINOR_VERSION); - } - - /** - * String which is a URL for the LAME website. - * - * @return string which is a URL for the LAME website - */ - this.getLameUrl = function () { - return LAME_URL; - } - - /** - * Quite useless for a java version, however we are compatible ;-) - * - * @return "32bits" - */ - this.getLameOsBitness = function () { - return "32bits"; - } - -} - -/* - * ReplayGainAnalysis - analyzes input samples and give the recommended dB change - * Copyright (C) 2001 David Robinson and Glen Sawyer - * Improvements and optimizations added by Frank Klemm, and by Marcel Muller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * concept and filter values by David Robinson (David@Robinson.org) - * -- blame him if you think the idea is flawed - * original coding by Glen Sawyer (mp3gain@hotmail.com) - * -- blame him if you think this runs too slowly, or the coding is otherwise flawed - * - * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ ) - * -- credit him for all the _good_ programming ;) - * - * - * For an explanation of the concepts and the basic algorithms involved, go to: - * http://www.replaygain.org/ - */ - -/* - * Here's the deal. Call - * - * InitGainAnalysis ( long samplefreq ); - * - * to initialize everything. Call - * - * AnalyzeSamples ( var Float_t* left_samples, - * var Float_t* right_samples, - * size_t num_samples, - * int num_channels ); - * - * as many times as you want, with as many or as few samples as you want. - * If mono, pass the sample buffer in through left_samples, leave - * right_samples NULL, and make sure num_channels = 1. - * - * GetTitleGain() - * - * will return the recommended dB level change for all samples analyzed - * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis(). - * - * GetAlbumGain() - * - * will return the recommended dB level change for all samples analyzed - * since InitGainAnalysis() was called and finalized with GetTitleGain(). - * - * Pseudo-code to process an album: - * - * Float_t l_samples [4096]; - * Float_t r_samples [4096]; - * size_t num_samples; - * unsigned int num_songs; - * unsigned int i; - * - * InitGainAnalysis ( 44100 ); - * for ( i = 1; i <= num_songs; i++ ) { - * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 ) - * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 ); - * fprintf ("Recommended dB change for song %2d: %+6.2 dB\n", i, GetTitleGain() ); - * } - * fprintf ("Recommended dB change for whole album: %+6.2 dB\n", GetAlbumGain() ); - */ - -/* - * So here's the main source of potential code confusion: - * - * The filters applied to the incoming samples are IIR filters, - * meaning they rely on up to number of previous samples - * AND up to number of previous filtered samples. - * - * I set up the AnalyzeSamples routine to minimize memory usage and interface - * complexity. The speed isn't compromised too much (I don't think), but the - * internal complexity is higher than it should be for such a relatively - * simple routine. - * - * Optimization/clarity suggestions are welcome. - */ - -/** - * Table entries per dB - */ -GainAnalysis.STEPS_per_dB = 100.; -/** - * Table entries for 0...MAX_dB (normal max. values are 70...80 dB) - */ -GainAnalysis.MAX_dB = 120.; -GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES = -24601; -GainAnalysis.GAIN_ANALYSIS_ERROR = 0; -GainAnalysis.GAIN_ANALYSIS_OK = 1; -GainAnalysis.INIT_GAIN_ANALYSIS_ERROR = 0; -GainAnalysis.INIT_GAIN_ANALYSIS_OK = 1; - -GainAnalysis.YULE_ORDER = 10; -GainAnalysis.MAX_ORDER = GainAnalysis.YULE_ORDER; - -GainAnalysis.MAX_SAMP_FREQ = 48000; -GainAnalysis.RMS_WINDOW_TIME_NUMERATOR = 1; -GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR = 20; -GainAnalysis.MAX_SAMPLES_PER_WINDOW = ((GainAnalysis.MAX_SAMP_FREQ * GainAnalysis.RMS_WINDOW_TIME_NUMERATOR) / GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR + 1); - -function GainAnalysis() { - /** - * calibration value for 89dB - */ - var PINK_REF = 64.82; - - var YULE_ORDER = GainAnalysis.YULE_ORDER; - /** - * percentile which is louder than the proposed level - */ - var RMS_PERCENTILE = 0.95; - /** - * maximum allowed sample frequency [Hz] - */ - var MAX_SAMP_FREQ = GainAnalysis.MAX_SAMP_FREQ; - var RMS_WINDOW_TIME_NUMERATOR = GainAnalysis.RMS_WINDOW_TIME_NUMERATOR; - /** - * numerator / denominator = time slice size [s] - */ - var RMS_WINDOW_TIME_DENOMINATOR = GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR; - /** - * max. Samples per Time slice - */ - var MAX_SAMPLES_PER_WINDOW = GainAnalysis.MAX_SAMPLES_PER_WINDOW; - - - var ABYule = [ - [0.03857599435200, -3.84664617118067, -0.02160367184185, - 7.81501653005538, -0.00123395316851, -11.34170355132042, - -0.00009291677959, 13.05504219327545, -0.01655260341619, - -12.28759895145294, 0.02161526843274, 9.48293806319790, - -0.02074045215285, -5.87257861775999, 0.00594298065125, - 2.75465861874613, 0.00306428023191, -0.86984376593551, - 0.00012025322027, 0.13919314567432, 0.00288463683916], - [0.05418656406430, -3.47845948550071, -0.02911007808948, - 6.36317777566148, -0.00848709379851, -8.54751527471874, - -0.00851165645469, 9.47693607801280, -0.00834990904936, - -8.81498681370155, 0.02245293253339, 6.85401540936998, - -0.02596338512915, -4.39470996079559, 0.01624864962975, - 2.19611684890774, -0.00240879051584, -0.75104302451432, - 0.00674613682247, 0.13149317958808, -0.00187763777362], - [0.15457299681924, -2.37898834973084, -0.09331049056315, - 2.84868151156327, -0.06247880153653, -2.64577170229825, - 0.02163541888798, 2.23697657451713, -0.05588393329856, - -1.67148153367602, 0.04781476674921, 1.00595954808547, - 0.00222312597743, -0.45953458054983, 0.03174092540049, - 0.16378164858596, -0.01390589421898, -0.05032077717131, - 0.00651420667831, 0.02347897407020, -0.00881362733839], - [0.30296907319327, -1.61273165137247, -0.22613988682123, - 1.07977492259970, -0.08587323730772, -0.25656257754070, - 0.03282930172664, -0.16276719120440, -0.00915702933434, - -0.22638893773906, -0.02364141202522, 0.39120800788284, - -0.00584456039913, -0.22138138954925, 0.06276101321749, - 0.04500235387352, -0.00000828086748, 0.02005851806501, - 0.00205861885564, 0.00302439095741, -0.02950134983287], - [0.33642304856132, -1.49858979367799, -0.25572241425570, - 0.87350271418188, -0.11828570177555, 0.12205022308084, - 0.11921148675203, -0.80774944671438, -0.07834489609479, - 0.47854794562326, -0.00469977914380, -0.12453458140019, - -0.00589500224440, -0.04067510197014, 0.05724228140351, - 0.08333755284107, 0.00832043980773, -0.04237348025746, - -0.01635381384540, 0.02977207319925, -0.01760176568150], - [0.44915256608450, -0.62820619233671, -0.14351757464547, - 0.29661783706366, -0.22784394429749, -0.37256372942400, - -0.01419140100551, 0.00213767857124, 0.04078262797139, - -0.42029820170918, -0.12398163381748, 0.22199650564824, - 0.04097565135648, 0.00613424350682, 0.10478503600251, - 0.06747620744683, -0.01863887810927, 0.05784820375801, - -0.03193428438915, 0.03222754072173, 0.00541907748707], - [0.56619470757641, -1.04800335126349, -0.75464456939302, - 0.29156311971249, 0.16242137742230, -0.26806001042947, - 0.16744243493672, 0.00819999645858, -0.18901604199609, - 0.45054734505008, 0.30931782841830, -0.33032403314006, - -0.27562961986224, 0.06739368333110, 0.00647310677246, - -0.04784254229033, 0.08647503780351, 0.01639907836189, - -0.03788984554840, 0.01807364323573, -0.00588215443421], - [0.58100494960553, -0.51035327095184, -0.53174909058578, - -0.31863563325245, -0.14289799034253, -0.20256413484477, - 0.17520704835522, 0.14728154134330, 0.02377945217615, - 0.38952639978999, 0.15558449135573, -0.23313271880868, - -0.25344790059353, -0.05246019024463, 0.01628462406333, - -0.02505961724053, 0.06920467763959, 0.02442357316099, - -0.03721611395801, 0.01818801111503, -0.00749618797172], - [0.53648789255105, -0.25049871956020, -0.42163034350696, - -0.43193942311114, -0.00275953611929, -0.03424681017675, - 0.04267842219415, -0.04678328784242, -0.10214864179676, - 0.26408300200955, 0.14590772289388, 0.15113130533216, - -0.02459864859345, -0.17556493366449, -0.11202315195388, - -0.18823009262115, -0.04060034127000, 0.05477720428674, - 0.04788665548180, 0.04704409688120, -0.02217936801134]]; - - var ABButter = [ - [0.98621192462708, -1.97223372919527, -1.97242384925416, - 0.97261396931306, 0.98621192462708], - [0.98500175787242, -1.96977855582618, -1.97000351574484, - 0.97022847566350, 0.98500175787242], - [0.97938932735214, -1.95835380975398, -1.95877865470428, - 0.95920349965459, 0.97938932735214], - [0.97531843204928, -1.95002759149878, -1.95063686409857, - 0.95124613669835, 0.97531843204928], - [0.97316523498161, -1.94561023566527, -1.94633046996323, - 0.94705070426118, 0.97316523498161], - [0.96454515552826, -1.92783286977036, -1.92909031105652, - 0.93034775234268, 0.96454515552826], - [0.96009142950541, -1.91858953033784, -1.92018285901082, - 0.92177618768381, 0.96009142950541], - [0.95856916599601, -1.91542108074780, -1.91713833199203, - 0.91885558323625, 0.95856916599601], - [0.94597685600279, -1.88903307939452, -1.89195371200558, - 0.89487434461664, 0.94597685600279]]; - - - /** - * When calling this procedure, make sure that ip[-order] and op[-order] - * point to real data - */ - //private void filterYule(final float[] input, int inputPos, float[] output, - //int outputPos, int nSamples, final float[] kernel) { - function filterYule(input, inputPos, output, outputPos, nSamples, kernel) { - - while ((nSamples--) != 0) { - /* 1e-10 is a hack to avoid slowdown because of denormals */ - output[outputPos] = 1e-10 + input[inputPos + 0] * kernel[0] - - output[outputPos - 1] * kernel[1] + input[inputPos - 1] - * kernel[2] - output[outputPos - 2] * kernel[3] - + input[inputPos - 2] * kernel[4] - output[outputPos - 3] - * kernel[5] + input[inputPos - 3] * kernel[6] - - output[outputPos - 4] * kernel[7] + input[inputPos - 4] - * kernel[8] - output[outputPos - 5] * kernel[9] - + input[inputPos - 5] * kernel[10] - output[outputPos - 6] - * kernel[11] + input[inputPos - 6] * kernel[12] - - output[outputPos - 7] * kernel[13] + input[inputPos - 7] - * kernel[14] - output[outputPos - 8] * kernel[15] - + input[inputPos - 8] * kernel[16] - output[outputPos - 9] - * kernel[17] + input[inputPos - 9] * kernel[18] - - output[outputPos - 10] * kernel[19] - + input[inputPos - 10] * kernel[20]; - ++outputPos; - ++inputPos; - } - } - -//private void filterButter(final float[] input, int inputPos, -// float[] output, int outputPos, int nSamples, final float[] kernel) { - function filterButter(input, inputPos, output, outputPos, nSamples, kernel) { - - while ((nSamples--) != 0) { - output[outputPos] = input[inputPos + 0] * kernel[0] - - output[outputPos - 1] * kernel[1] + input[inputPos - 1] - * kernel[2] - output[outputPos - 2] * kernel[3] - + input[inputPos - 2] * kernel[4]; - ++outputPos; - ++inputPos; - } - } - - /** - * @return INIT_GAIN_ANALYSIS_OK if successful, INIT_GAIN_ANALYSIS_ERROR if - * not - */ - function ResetSampleFrequency(rgData, samplefreq) { - /* zero out initial values */ - for (var i = 0; i < MAX_ORDER; i++) - rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.; - - switch (0 | (samplefreq)) { - case 48000: - rgData.reqindex = 0; - break; - case 44100: - rgData.reqindex = 1; - break; - case 32000: - rgData.reqindex = 2; - break; - case 24000: - rgData.reqindex = 3; - break; - case 22050: - rgData.reqindex = 4; - break; - case 16000: - rgData.reqindex = 5; - break; - case 12000: - rgData.reqindex = 6; - break; - case 11025: - rgData.reqindex = 7; - break; - case 8000: - rgData.reqindex = 8; - break; - default: - return INIT_GAIN_ANALYSIS_ERROR; - } - - rgData.sampleWindow = 0 | ((samplefreq * RMS_WINDOW_TIME_NUMERATOR - + RMS_WINDOW_TIME_DENOMINATOR - 1) / RMS_WINDOW_TIME_DENOMINATOR); - - rgData.lsum = 0.; - rgData.rsum = 0.; - rgData.totsamp = 0; - - Arrays.ill(rgData.A, 0); - - return INIT_GAIN_ANALYSIS_OK; - } - - this.InitGainAnalysis = function (rgData, samplefreq) { - if (ResetSampleFrequency(rgData, samplefreq) != INIT_GAIN_ANALYSIS_OK) { - return INIT_GAIN_ANALYSIS_ERROR; - } - - rgData.linpre = MAX_ORDER; - rgData.rinpre = MAX_ORDER; - rgData.lstep = MAX_ORDER; - rgData.rstep = MAX_ORDER; - rgData.lout = MAX_ORDER; - rgData.rout = MAX_ORDER; - - Arrays.fill(rgData.B, 0); - - return INIT_GAIN_ANALYSIS_OK; - }; - - /** - * square - */ - function fsqr(d) { - return d * d; - } - - this.AnalyzeSamples = function (rgData, left_samples, left_samplesPos, right_samples, right_samplesPos, num_samples, - num_channels) { - var curleft; - var curleftBase; - var curright; - var currightBase; - var batchsamples; - var cursamples; - var cursamplepos; - - if (num_samples == 0) - return GAIN_ANALYSIS_OK; - - cursamplepos = 0; - batchsamples = num_samples; - - switch (num_channels) { - case 1: - right_samples = left_samples; - right_samplesPos = left_samplesPos; - break; - case 2: - break; - default: - return GAIN_ANALYSIS_ERROR; - } - - if (num_samples < MAX_ORDER) { - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER, num_samples); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER, num_samples); - } else { - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER, MAX_ORDER); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER, MAX_ORDER); - } - - while (batchsamples > 0) { - cursamples = batchsamples > rgData.sampleWindow - rgData.totsamp ? rgData.sampleWindow - - rgData.totsamp - : batchsamples; - if (cursamplepos < MAX_ORDER) { - curleft = rgData.linpre + cursamplepos; - curleftBase = rgData.linprebuf; - curright = rgData.rinpre + cursamplepos; - currightBase = rgData.rinprebuf; - if (cursamples > MAX_ORDER - cursamplepos) - cursamples = MAX_ORDER - cursamplepos; - } else { - curleft = left_samplesPos + cursamplepos; - curleftBase = left_samples; - curright = right_samplesPos + cursamplepos; - currightBase = right_samples; - } - - filterYule(curleftBase, curleft, rgData.lstepbuf, rgData.lstep - + rgData.totsamp, cursamples, ABYule[rgData.reqindex]); - filterYule(currightBase, curright, rgData.rstepbuf, rgData.rstep - + rgData.totsamp, cursamples, ABYule[rgData.reqindex]); - - filterButter(rgData.lstepbuf, rgData.lstep + rgData.totsamp, - rgData.loutbuf, rgData.lout + rgData.totsamp, cursamples, - ABButter[rgData.reqindex]); - filterButter(rgData.rstepbuf, rgData.rstep + rgData.totsamp, - rgData.routbuf, rgData.rout + rgData.totsamp, cursamples, - ABButter[rgData.reqindex]); - - curleft = rgData.lout + rgData.totsamp; - /* Get the squared values */ - curleftBase = rgData.loutbuf; - curright = rgData.rout + rgData.totsamp; - currightBase = rgData.routbuf; - - var i = cursamples % 8; - while ((i--) != 0) { - rgData.lsum += fsqr(curleftBase[curleft++]); - rgData.rsum += fsqr(currightBase[curright++]); - } - i = cursamples / 8; - while ((i--) != 0) { - rgData.lsum += fsqr(curleftBase[curleft + 0]) - + fsqr(curleftBase[curleft + 1]) - + fsqr(curleftBase[curleft + 2]) - + fsqr(curleftBase[curleft + 3]) - + fsqr(curleftBase[curleft + 4]) - + fsqr(curleftBase[curleft + 5]) - + fsqr(curleftBase[curleft + 6]) - + fsqr(curleftBase[curleft + 7]); - curleft += 8; - rgData.rsum += fsqr(currightBase[curright + 0]) - + fsqr(currightBase[curright + 1]) - + fsqr(currightBase[curright + 2]) - + fsqr(currightBase[curright + 3]) - + fsqr(currightBase[curright + 4]) - + fsqr(currightBase[curright + 5]) - + fsqr(currightBase[curright + 6]) - + fsqr(currightBase[curright + 7]); - curright += 8; - } - - batchsamples -= cursamples; - cursamplepos += cursamples; - rgData.totsamp += cursamples; - if (rgData.totsamp == rgData.sampleWindow) { - /* Get the Root Mean Square (RMS) for this set of samples */ - var val = GainAnalysis.STEPS_per_dB - * 10. - * Math.log10((rgData.lsum + rgData.rsum) - / rgData.totsamp * 0.5 + 1.e-37); - var ival = (val <= 0) ? 0 : 0 | val; - if (ival >= rgData.A.length) - ival = rgData.A.length - 1; - rgData.A[ival]++; - rgData.lsum = rgData.rsum = 0.; - - System.arraycopy(rgData.loutbuf, rgData.totsamp, - rgData.loutbuf, 0, MAX_ORDER); - System.arraycopy(rgData.routbuf, rgData.totsamp, - rgData.routbuf, 0, MAX_ORDER); - System.arraycopy(rgData.lstepbuf, rgData.totsamp, - rgData.lstepbuf, 0, MAX_ORDER); - System.arraycopy(rgData.rstepbuf, rgData.totsamp, - rgData.rstepbuf, 0, MAX_ORDER); - rgData.totsamp = 0; - } - if (rgData.totsamp > rgData.sampleWindow) { - /* - * somehow I really screwed up: Error in programming! Contact - * author about totsamp > sampleWindow - */ - return GAIN_ANALYSIS_ERROR; - } - } - if (num_samples < MAX_ORDER) { - System.arraycopy(rgData.linprebuf, num_samples, rgData.linprebuf, - 0, MAX_ORDER - num_samples); - System.arraycopy(rgData.rinprebuf, num_samples, rgData.rinprebuf, - 0, MAX_ORDER - num_samples); - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER - num_samples, num_samples); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER - num_samples, num_samples); - } else { - System.arraycopy(left_samples, left_samplesPos + num_samples - - MAX_ORDER, rgData.linprebuf, 0, MAX_ORDER); - System.arraycopy(right_samples, right_samplesPos + num_samples - - MAX_ORDER, rgData.rinprebuf, 0, MAX_ORDER); - } - - return GAIN_ANALYSIS_OK; - }; - - function analyzeResult(Array, len) { - var i; - - var elems = 0; - for (i = 0; i < len; i++) - elems += Array[i]; - if (elems == 0) - return GAIN_NOT_ENOUGH_SAMPLES; - - var upper = 0 | Math.ceil(elems * (1. - RMS_PERCENTILE)); - for (i = len; i-- > 0;) { - if ((upper -= Array[i]) <= 0) - break; - } - - //return (float) ((float) PINK_REF - (float) i / (float) STEPS_per_dB); - return (PINK_REF - i / GainAnalysis.STEPS_per_dB); - } - - this.GetTitleGain = function (rgData) { - var retval = analyzeResult(rgData.A, rgData.A.length); - - for (var i = 0; i < rgData.A.length; i++) { - rgData.B[i] += rgData.A[i]; - rgData.A[i] = 0; - } - - for (var i = 0; i < MAX_ORDER; i++) - rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.; - - rgData.totsamp = 0; - rgData.lsum = rgData.rsum = 0.; - return retval; - } - -} - - -function Presets() { - function VBRPresets(qual, comp, compS, - y, shThreshold, shThresholdS, - adj, adjShort, lower, - curve, sens, inter, - joint, mod, fix) { - this.vbr_q = qual; - this.quant_comp = comp; - this.quant_comp_s = compS; - this.expY = y; - this.st_lrm = shThreshold; - this.st_s = shThresholdS; - this.masking_adj = adj; - this.masking_adj_short = adjShort; - this.ath_lower = lower; - this.ath_curve = curve; - this.ath_sensitivity = sens; - this.interch = inter; - this.safejoint = joint; - this.sfb21mod = mod; - this.msfix = fix; - } - - function ABRPresets(kbps, comp, compS, - joint, fix, shThreshold, - shThresholdS, bass, sc, - mask, lower, curve, - interCh, sfScale) { - this.quant_comp = comp; - this.quant_comp_s = compS; - this.safejoint = joint; - this.nsmsfix = fix; - this.st_lrm = shThreshold; - this.st_s = shThresholdS; - this.nsbass = bass; - this.scale = sc; - this.masking_adj = mask; - this.ath_lower = lower; - this.ath_curve = curve; - this.interch = interCh; - this.sfscale = sfScale; - } - - var lame; - - this.setModules = function (_lame) { - lame = _lame; - }; - - /** - *
-     * Switch mappings for VBR mode VBR_RH
-     *             vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix
-     * 
- */ - var vbr_old_switch_map = [ - new VBRPresets(0, 9, 9, 0, 5.20, 125.0, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97), - new VBRPresets(1, 9, 9, 0, 5.30, 125.0, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35), - new VBRPresets(2, 9, 9, 0, 5.60, 125.0, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49), - new VBRPresets(3, 9, 9, 1, 5.80, 130.0, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64), - new VBRPresets(4, 9, 9, 1, 6.00, 135.0, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79), - new VBRPresets(5, 9, 9, 1, 6.40, 140.0, 0.5, 0.4, -7.5, 4, -12, 0.0002, 0, 0, 1.95), - new VBRPresets(6, 9, 9, 1, 6.60, 145.0, 0.67, 0.65, -14.7, 6.5, -19, 0.0004, 0, 0, 2.30), - new VBRPresets(7, 9, 9, 1, 6.60, 145.0, 0.8, 0.75, -19.7, 8, -22, 0.0006, 0, 0, 2.70), - new VBRPresets(8, 9, 9, 1, 6.60, 145.0, 1.2, 1.15, -27.5, 10, -23, 0.0007, 0, 0, 0), - new VBRPresets(9, 9, 9, 1, 6.60, 145.0, 1.6, 1.6, -36, 11, -25, 0.0008, 0, 0, 0), - new VBRPresets(10, 9, 9, 1, 6.60, 145.0, 2.0, 2.0, -36, 12, -25, 0.0008, 0, 0, 0) - ]; - - /** - *
-     *                 vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix
-     * 
- */ - var vbr_psy_switch_map = [ - new VBRPresets(0, 9, 9, 0, 4.20, 25.0, -7.0, -4.0, 7.5, 1, 0, 0, 2, 26, 0.97), - new VBRPresets(1, 9, 9, 0, 4.20, 25.0, -5.6, -3.6, 4.5, 1.5, 0, 0, 2, 21, 1.35), - new VBRPresets(2, 9, 9, 0, 4.20, 25.0, -4.4, -1.8, 2, 2, 0, 0, 2, 18, 1.49), - new VBRPresets(3, 9, 9, 1, 4.20, 25.0, -3.4, -1.25, 1.1, 3, -4, 0, 2, 15, 1.64), - new VBRPresets(4, 9, 9, 1, 4.20, 25.0, -2.2, 0.1, 0, 3.5, -8, 0, 2, 0, 1.79), - new VBRPresets(5, 9, 9, 1, 4.20, 25.0, -1.0, 1.65, -7.7, 4, -12, 0.0002, 0, 0, 1.95), - new VBRPresets(6, 9, 9, 1, 4.20, 25.0, -0.0, 2.47, -7.7, 6.5, -19, 0.0004, 0, 0, 2), - new VBRPresets(7, 9, 9, 1, 4.20, 25.0, 0.5, 2.0, -14.5, 8, -22, 0.0006, 0, 0, 2), - new VBRPresets(8, 9, 9, 1, 4.20, 25.0, 1.0, 2.4, -22.0, 10, -23, 0.0007, 0, 0, 2), - new VBRPresets(9, 9, 9, 1, 4.20, 25.0, 1.5, 2.95, -30.0, 11, -25, 0.0008, 0, 0, 2), - new VBRPresets(10, 9, 9, 1, 4.20, 25.0, 2.0, 2.95, -36.0, 12, -30, 0.0008, 0, 0, 2) - ]; - - function apply_vbr_preset(gfp, a, enforce) { - var vbr_preset = gfp.VBR == VbrMode.vbr_rh ? vbr_old_switch_map - : vbr_psy_switch_map; - - var x = gfp.VBR_q_frac; - var p = vbr_preset[a]; - var q = vbr_preset[a + 1]; - var set = p; - - // NOOP(vbr_q); - // NOOP(quant_comp); - // NOOP(quant_comp_s); - // NOOP(expY); - p.st_lrm = p.st_lrm + x * (q.st_lrm - p.st_lrm); - // LERP(st_lrm); - p.st_s = p.st_s + x * (q.st_s - p.st_s); - // LERP(st_s); - p.masking_adj = p.masking_adj + x * (q.masking_adj - p.masking_adj); - // LERP(masking_adj); - p.masking_adj_short = p.masking_adj_short + x - * (q.masking_adj_short - p.masking_adj_short); - // LERP(masking_adj_short); - p.ath_lower = p.ath_lower + x * (q.ath_lower - p.ath_lower); - // LERP(ath_lower); - p.ath_curve = p.ath_curve + x * (q.ath_curve - p.ath_curve); - // LERP(ath_curve); - p.ath_sensitivity = p.ath_sensitivity + x - * (q.ath_sensitivity - p.ath_sensitivity); - // LERP(ath_sensitivity); - p.interch = p.interch + x * (q.interch - p.interch); - // LERP(interch); - // NOOP(safejoint); - // NOOP(sfb21mod); - p.msfix = p.msfix + x * (q.msfix - p.msfix); - // LERP(msfix); - - lame_set_VBR_q(gfp, set.vbr_q); - - if (enforce != 0) - gfp.quant_comp = set.quant_comp; - else if (!(Math.abs(gfp.quant_comp - -1) > 0)) - gfp.quant_comp = set.quant_comp; - // SET_OPTION(quant_comp, set.quant_comp, -1); - if (enforce != 0) - gfp.quant_comp_short = set.quant_comp_s; - else if (!(Math.abs(gfp.quant_comp_short - -1) > 0)) - gfp.quant_comp_short = set.quant_comp_s; - // SET_OPTION(quant_comp_short, set.quant_comp_s, -1); - if (set.expY != 0) { - gfp.experimentalY = set.expY != 0; - } - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre = set.st_lrm; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre = set.st_lrm; - // SET_OPTION(short_threshold_lrm, set.st_lrm, -1); - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre_s = set.st_s; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre_s = set.st_s; - // SET_OPTION(short_threshold_s, set.st_s, -1); - if (enforce != 0) - gfp.maskingadjust = set.masking_adj; - else if (!(Math.abs(gfp.maskingadjust - 0) > 0)) - gfp.maskingadjust = set.masking_adj; - // SET_OPTION(maskingadjust, set.masking_adj, 0); - if (enforce != 0) - gfp.maskingadjust_short = set.masking_adj_short; - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = set.masking_adj_short; - // SET_OPTION(maskingadjust_short, set.masking_adj_short, 0); - if (enforce != 0) - gfp.ATHlower = -set.ath_lower / 10.0; - else if (!(Math.abs((-gfp.ATHlower * 10.0) - 0) > 0)) - gfp.ATHlower = -set.ath_lower / 10.0; - // SET_OPTION(ATHlower, set.ath_lower, 0); - if (enforce != 0) - gfp.ATHcurve = set.ath_curve; - else if (!(Math.abs(gfp.ATHcurve - -1) > 0)) - gfp.ATHcurve = set.ath_curve; - // SET_OPTION(ATHcurve, set.ath_curve, -1); - if (enforce != 0) - gfp.athaa_sensitivity = set.ath_sensitivity; - else if (!(Math.abs(gfp.athaa_sensitivity - -1) > 0)) - gfp.athaa_sensitivity = set.ath_sensitivity; - // SET_OPTION(athaa_sensitivity, set.ath_sensitivity, 0); - if (set.interch > 0) { - if (enforce != 0) - gfp.interChRatio = set.interch; - else if (!(Math.abs(gfp.interChRatio - -1) > 0)) - gfp.interChRatio = set.interch; - // SET_OPTION(interChRatio, set.interch, -1); - } - - /* parameters for which there is no proper set/get interface */ - if (set.safejoint > 0) { - gfp.exp_nspsytune = gfp.exp_nspsytune | set.safejoint; - } - if (set.sfb21mod > 0) { - gfp.exp_nspsytune = gfp.exp_nspsytune | (set.sfb21mod << 20); - } - if (enforce != 0) - gfp.msfix = set.msfix; - else if (!(Math.abs(gfp.msfix - -1) > 0)) - gfp.msfix = set.msfix; - // SET_OPTION(msfix, set.msfix, -1); - - if (enforce == 0) { - gfp.VBR_q = a; - gfp.VBR_q_frac = x; - } - } - - /** - *
-     *  Switch mappings for ABR mode
-     *
-     *              kbps  quant q_s safejoint nsmsfix st_lrm  st_s  ns-bass scale   msk ath_lwr ath_curve  interch , sfscale
-     * 
- */ - var abr_switch_map = [ - new ABRPresets(8, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -30.0, 11, 0.0012, 1), /* 8, impossible to use in stereo */ - new ABRPresets(16, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -25.0, 11, 0.0010, 1), /* 16 */ - new ABRPresets(24, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -20.0, 11, 0.0010, 1), /* 24 */ - new ABRPresets(32, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -15.0, 11, 0.0010, 1), /* 32 */ - new ABRPresets(40, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 40 */ - new ABRPresets(48, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 48 */ - new ABRPresets(56, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -6.0, 11, 0.0008, 1), /* 56 */ - new ABRPresets(64, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -2.0, 11, 0.0008, 1), /* 64 */ - new ABRPresets(80, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, .0, 8, 0.0007, 1), /* 80 */ - new ABRPresets(96, 9, 9, 0, 2.50, 6.60, 145, 0, 0.95, 0, 1.0, 5.5, 0.0006, 1), /* 96 */ - new ABRPresets(112, 9, 9, 0, 2.25, 6.60, 145, 0, 0.95, 0, 2.0, 4.5, 0.0005, 1), /* 112 */ - new ABRPresets(128, 9, 9, 0, 1.95, 6.40, 140, 0, 0.95, 0, 3.0, 4, 0.0002, 1), /* 128 */ - new ABRPresets(160, 9, 9, 1, 1.79, 6.00, 135, 0, 0.95, -2, 5.0, 3.5, 0, 1), /* 160 */ - new ABRPresets(192, 9, 9, 1, 1.49, 5.60, 125, 0, 0.97, -4, 7.0, 3, 0, 0), /* 192 */ - new ABRPresets(224, 9, 9, 1, 1.25, 5.20, 125, 0, 0.98, -6, 9.0, 2, 0, 0), /* 224 */ - new ABRPresets(256, 9, 9, 1, 0.97, 5.20, 125, 0, 1.00, -8, 10.0, 1, 0, 0), /* 256 */ - new ABRPresets(320, 9, 9, 1, 0.90, 5.20, 125, 0, 1.00, -10, 12.0, 0, 0, 0) /* 320 */ - ]; - - function apply_abr_preset(gfp, preset, enforce) { - /* Variables for the ABR stuff */ - var actual_bitrate = preset; - - var r = lame.nearestBitrateFullIndex(preset); - - gfp.VBR = VbrMode.vbr_abr; - gfp.VBR_mean_bitrate_kbps = actual_bitrate; - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, 320); - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, 8); - gfp.brate = gfp.VBR_mean_bitrate_kbps; - if (gfp.VBR_mean_bitrate_kbps > 320) { - gfp.disable_reservoir = true; - } - - /* parameters for which there is no proper set/get interface */ - if (abr_switch_map[r].safejoint > 0) - gfp.exp_nspsytune = gfp.exp_nspsytune | 2; - /* safejoint */ - - if (abr_switch_map[r].sfscale > 0) { - gfp.internal_flags.noise_shaping = 2; - } - /* ns-bass tweaks */ - if (Math.abs(abr_switch_map[r].nsbass) > 0) { - var k = (int)(abr_switch_map[r].nsbass * 4); - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2); - } - - if (enforce != 0) - gfp.quant_comp = abr_switch_map[r].quant_comp; - else if (!(Math.abs(gfp.quant_comp - -1) > 0)) - gfp.quant_comp = abr_switch_map[r].quant_comp; - // SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1); - if (enforce != 0) - gfp.quant_comp_short = abr_switch_map[r].quant_comp_s; - else if (!(Math.abs(gfp.quant_comp_short - -1) > 0)) - gfp.quant_comp_short = abr_switch_map[r].quant_comp_s; - // SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1); - - if (enforce != 0) - gfp.msfix = abr_switch_map[r].nsmsfix; - else if (!(Math.abs(gfp.msfix - -1) > 0)) - gfp.msfix = abr_switch_map[r].nsmsfix; - // SET_OPTION(msfix, abr_switch_map[r].nsmsfix, -1); - - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm; - // SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1); - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s; - // SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1); - - /* - * ABR seems to have big problems with clipping, especially at low - * bitrates - */ - /* - * so we compensate for that here by using a scale value depending on - * bitrate - */ - if (enforce != 0) - gfp.scale = abr_switch_map[r].scale; - else if (!(Math.abs(gfp.scale - -1) > 0)) - gfp.scale = abr_switch_map[r].scale; - // SET_OPTION(scale, abr_switch_map[r].scale, -1); - - if (enforce != 0) - gfp.maskingadjust = abr_switch_map[r].masking_adj; - else if (!(Math.abs(gfp.maskingadjust - 0) > 0)) - gfp.maskingadjust = abr_switch_map[r].masking_adj; - // SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0); - if (abr_switch_map[r].masking_adj > 0) { - if (enforce != 0) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9); - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9); - // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * - // .9, 0); - } else { - if (enforce != 0) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1); - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1); - // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * - // 1.1, 0); - } - - if (enforce != 0) - gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.; - else if (!(Math.abs((-gfp.ATHlower * 10.) - 0) > 0)) - gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.; - // SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0); - if (enforce != 0) - gfp.ATHcurve = abr_switch_map[r].ath_curve; - else if (!(Math.abs(gfp.ATHcurve - -1) > 0)) - gfp.ATHcurve = abr_switch_map[r].ath_curve; - // SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1); - - if (enforce != 0) - gfp.interChRatio = abr_switch_map[r].interch; - else if (!(Math.abs(gfp.interChRatio - -1) > 0)) - gfp.interChRatio = abr_switch_map[r].interch; - // SET_OPTION(interChRatio, abr_switch_map[r].interch, -1); - - return preset; - } - - this.apply_preset = function(gfp, preset, enforce) { - /* translate legacy presets */ - switch (preset) { - case Lame.R3MIX: - { - preset = Lame.V3; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.MEDIUM: - { - preset = Lame.V4; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.MEDIUM_FAST: - { - preset = Lame.V4; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.STANDARD: - { - preset = Lame.V2; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.STANDARD_FAST: - { - preset = Lame.V2; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.EXTREME: - { - preset = Lame.V0; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.EXTREME_FAST: - { - preset = Lame.V0; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.INSANE: - { - preset = 320; - gfp.preset = preset; - apply_abr_preset(gfp, preset, enforce); - gfp.VBR = VbrMode.vbr_off; - return preset; - } - } - - gfp.preset = preset; - { - switch (preset) { - case Lame.V9: - apply_vbr_preset(gfp, 9, enforce); - return preset; - case Lame.V8: - apply_vbr_preset(gfp, 8, enforce); - return preset; - case Lame.V7: - apply_vbr_preset(gfp, 7, enforce); - return preset; - case Lame.V6: - apply_vbr_preset(gfp, 6, enforce); - return preset; - case Lame.V5: - apply_vbr_preset(gfp, 5, enforce); - return preset; - case Lame.V4: - apply_vbr_preset(gfp, 4, enforce); - return preset; - case Lame.V3: - apply_vbr_preset(gfp, 3, enforce); - return preset; - case Lame.V2: - apply_vbr_preset(gfp, 2, enforce); - return preset; - case Lame.V1: - apply_vbr_preset(gfp, 1, enforce); - return preset; - case Lame.V0: - apply_vbr_preset(gfp, 0, enforce); - return preset; - default: - break; - } - } - if (8 <= preset && preset <= 320) { - return apply_abr_preset(gfp, preset, enforce); - } - - /* no corresponding preset found */ - gfp.preset = 0; - return preset; - } - - // Rest from getset.c: - - /** - * VBR quality level.
- * 0 = highest
- * 9 = lowest - */ - function lame_set_VBR_q(gfp, VBR_q) { - var ret = 0; - - if (0 > VBR_q) { - /* Unknown VBR quality level! */ - ret = -1; - VBR_q = 0; - } - if (9 < VBR_q) { - ret = -1; - VBR_q = 9; - } - - gfp.VBR_q = VBR_q; - gfp.VBR_q_frac = 0; - return ret; - } - -} - -/* - * MP3 huffman table selecting and bit counting - * - * Copyright (c) 1999-2005 Takehiro TOMINAGA - * Copyright (c) 2002-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Takehiro.java,v 1.26 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -//import java.util.Arrays; - - - -function Takehiro() { - - var qupvt = null; - this.qupvt = null; - - this.setModules = function (_qupvt) { - this.qupvt = _qupvt; - qupvt = _qupvt; - } - - function Bits(b) { - this.bits = 0 | b; - } - - var subdv_table = [[0, 0], /* 0 bands */ - [0, 0], /* 1 bands */ - [0, 0], /* 2 bands */ - [0, 0], /* 3 bands */ - [0, 0], /* 4 bands */ - [0, 1], /* 5 bands */ - [1, 1], /* 6 bands */ - [1, 1], /* 7 bands */ - [1, 2], /* 8 bands */ - [2, 2], /* 9 bands */ - [2, 3], /* 10 bands */ - [2, 3], /* 11 bands */ - [3, 4], /* 12 bands */ - [3, 4], /* 13 bands */ - [3, 4], /* 14 bands */ - [4, 5], /* 15 bands */ - [4, 5], /* 16 bands */ - [4, 6], /* 17 bands */ - [5, 6], /* 18 bands */ - [5, 6], /* 19 bands */ - [5, 7], /* 20 bands */ - [6, 7], /* 21 bands */ - [6, 7], /* 22 bands */ - ]; - - /** - * nonlinear quantization of xr More accurate formula than the ISO formula. - * Takes into account the fact that we are quantizing xr . ix, but we want - * ix^4/3 to be as close as possible to x^4/3. (taking the nearest int would - * mean ix is as close as possible to xr, which is different.) - * - * From Segher Boessenkool 11/1999 - * - * 09/2000: ASM code removed in favor of IEEE754 hack by Takehiro Tominaga. - * If you need the ASM code, check CVS circa Aug 2000. - * - * 01/2004: Optimizations by Gabriel Bouvigne - */ - function quantize_lines_xrpow_01(l, istep, xr, xrPos, ix, ixPos) { - var compareval0 = (1.0 - 0.4054) / istep; - - l = l >> 1; - while ((l--) != 0) { - ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1; - ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1; - } - } - - /** - * XRPOW_FTOI is a macro to convert floats to ints.
- * if XRPOW_FTOI(x) = nearest_int(x), then QUANTFAC(x)=adj43asm[x]
- * ROUNDFAC= -0.0946
- * - * if XRPOW_FTOI(x) = floor(x), then QUANTFAC(x)=asj43[x]
- * ROUNDFAC=0.4054
- * - * Note: using floor() or 0| is extremely slow. On machines where the - * TAKEHIRO_IEEE754_HACK code above does not work, it is worthwile to write - * some ASM for XRPOW_FTOI(). - */ - function quantize_lines_xrpow(l, istep, xr, xrPos, ix, ixPos) { - - l = l >> 1; - var remaining = l % 2; - l = l >> 1; - while (l-- != 0) { - var x0, x1, x2, x3; - var rx0, rx1, rx2, rx3; - - x0 = xr[xrPos++] * istep; - x1 = xr[xrPos++] * istep; - rx0 = 0 | x0; - x2 = xr[xrPos++] * istep; - rx1 = 0 | x1; - x3 = xr[xrPos++] * istep; - rx2 = 0 | x2; - x0 += qupvt.adj43[rx0]; - rx3 = 0 | x3; - x1 += qupvt.adj43[rx1]; - ix[ixPos++] = 0 | x0; - x2 += qupvt.adj43[rx2]; - ix[ixPos++] = 0 | x1; - x3 += qupvt.adj43[rx3]; - ix[ixPos++] = 0 | x2; - ix[ixPos++] = 0 | x3; - } - if (remaining != 0) { - var x0, x1; - var rx0, rx1; - - x0 = xr[xrPos++] * istep; - x1 = xr[xrPos++] * istep; - rx0 = 0 | x0; - rx1 = 0 | x1; - x0 += qupvt.adj43[rx0]; - x1 += qupvt.adj43[rx1]; - ix[ixPos++] = 0 | x0; - ix[ixPos++] = 0 | x1; - } - } - - /** - * Quantization function This function will select which lines to quantize - * and call the proper quantization function - */ - function quantize_xrpow(xp, pi, istep, codInfo, prevNoise) { - /* quantize on xr^(3/4) instead of xr */ - var sfb; - var sfbmax; - var j = 0; - var prev_data_use; - var accumulate = 0; - var accumulate01 = 0; - var xpPos = 0; - var iData = pi; - var iDataPos = 0; - var acc_iData = iData; - var acc_iDataPos = 0; - var acc_xp = xp; - var acc_xpPos = 0; - - /* - * Reusing previously computed data does not seems to work if global - * gain is changed. Finding why it behaves this way would allow to use a - * cache of previously computed values (let's 10 cached values per sfb) - * that would probably provide a noticeable speedup - */ - prev_data_use = (prevNoise != null && (codInfo.global_gain == prevNoise.global_gain)); - - if (codInfo.block_type == Encoder.SHORT_TYPE) - sfbmax = 38; - else - sfbmax = 21; - - for (sfb = 0; sfb <= sfbmax; sfb++) { - var step = -1; - - if (prev_data_use || codInfo.block_type == Encoder.NORM_TYPE) { - step = codInfo.global_gain - - ((codInfo.scalefac[sfb] + (codInfo.preflag != 0 ? qupvt.pretab[sfb] - : 0)) << (codInfo.scalefac_scale + 1)) - - codInfo.subblock_gain[codInfo.window[sfb]] * 8; - } - if (prev_data_use && (prevNoise.step[sfb] == step)) { - /* - * do not recompute this part, but compute accumulated lines - */ - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate = 0; - } - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - } - } else { /* should compute this part */ - var l = codInfo.width[sfb]; - - if ((j + codInfo.width[sfb]) > codInfo.max_nonzero_coeff) { - /* do not compute upper zero part */ - var usefullsize; - usefullsize = codInfo.max_nonzero_coeff - j + 1; - Arrays.fill(pi, codInfo.max_nonzero_coeff, 576, 0); - l = usefullsize; - - if (l < 0) { - l = 0; - } - - /* no need to compute higher sfb values */ - sfb = sfbmax + 1; - } - - /* accumulate lines to quantize */ - if (0 == accumulate && 0 == accumulate01) { - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - if (prevNoise != null && prevNoise.sfb_count1 > 0 - && sfb >= prevNoise.sfb_count1 - && prevNoise.step[sfb] > 0 - && step >= prevNoise.step[sfb]) { - - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate = 0; - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - accumulate01 += l; - } else { - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - accumulate += l; - } - - if (l <= 0) { - /* - * rh: 20040215 may happen due to "prev_data_use" - * optimization - */ - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - } - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate = 0; - } - - break; - /* ends for-loop */ - } - } - if (sfb <= sfbmax) { - iDataPos += codInfo.width[sfb]; - xpPos += codInfo.width[sfb]; - j += codInfo.width[sfb]; - } - } - if (accumulate != 0) { /* last data part */ - quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate = 0; - } - if (accumulate01 != 0) { /* last data part */ - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate01 = 0; - } - - } - - /** - * ix_max - */ - function ix_max(ix, ixPos, endPos) { - var max1 = 0, max2 = 0; - - do { - var x1 = ix[ixPos++]; - var x2 = ix[ixPos++]; - if (max1 < x1) - max1 = x1; - - if (max2 < x2) - max2 = x2; - } while (ixPos < endPos); - if (max1 < max2) - max1 = max2; - return max1; - } - - function count_bit_ESC(ix, ixPos, end, t1, t2, s) { - /* ESC-table is used */ - var linbits = Tables.ht[t1].xlen * 65536 + Tables.ht[t2].xlen; - var sum = 0, sum2; - - do { - var x = ix[ixPos++]; - var y = ix[ixPos++]; - - if (x != 0) { - if (x > 14) { - x = 15; - sum += linbits; - } - x *= 16; - } - - if (y != 0) { - if (y > 14) { - y = 15; - sum += linbits; - } - x += y; - } - - sum += Tables.largetbl[x]; - } while (ixPos < end); - - sum2 = sum & 0xffff; - sum >>= 16; - - if (sum > sum2) { - sum = sum2; - t1 = t2; - } - - s.bits += sum; - return t1; - } - - function count_bit_noESC(ix, ixPos, end, s) { - /* No ESC-words */ - var sum1 = 0; - var hlen1 = Tables.ht[1].hlen; - - do { - var x = ix[ixPos + 0] * 2 + ix[ixPos + 1]; - ixPos += 2; - sum1 += hlen1[x]; - } while (ixPos < end); - - s.bits += sum1; - return 1; - } - - function count_bit_noESC_from2(ix, ixPos, end, t1, s) { - /* No ESC-words */ - var sum = 0, sum2; - var xlen = Tables.ht[t1].xlen; - var hlen; - if (t1 == 2) - hlen = Tables.table23; - else - hlen = Tables.table56; - - do { - var x = ix[ixPos + 0] * xlen + ix[ixPos + 1]; - ixPos += 2; - sum += hlen[x]; - } while (ixPos < end); - - sum2 = sum & 0xffff; - sum >>= 16; - - if (sum > sum2) { - sum = sum2; - t1++; - } - - s.bits += sum; - return t1; - } - - function count_bit_noESC_from3(ix, ixPos, end, t1, s) { - /* No ESC-words */ - var sum1 = 0; - var sum2 = 0; - var sum3 = 0; - var xlen = Tables.ht[t1].xlen; - var hlen1 = Tables.ht[t1].hlen; - var hlen2 = Tables.ht[t1 + 1].hlen; - var hlen3 = Tables.ht[t1 + 2].hlen; - - do { - var x = ix[ixPos + 0] * xlen + ix[ixPos + 1]; - ixPos += 2; - sum1 += hlen1[x]; - sum2 += hlen2[x]; - sum3 += hlen3[x]; - } while (ixPos < end); - var t = t1; - if (sum1 > sum2) { - sum1 = sum2; - t++; - } - if (sum1 > sum3) { - sum1 = sum3; - t = t1 + 2; - } - s.bits += sum1; - - return t; - } - - /*************************************************************************/ - /* choose table */ - /*************************************************************************/ - - var huf_tbl_noESC = [1, 2, 5, 7, 7, 10, 10, 13, 13, - 13, 13, 13, 13, 13, 13]; - - /** - * Choose the Huffman table that will encode ix[begin..end] with the fewest - * bits. - * - * Note: This code contains knowledge about the sizes and characteristics of - * the Huffman tables as defined in the IS (Table B.7), and will not work - * with any arbitrary tables. - */ - function choose_table(ix, ixPos, endPos, s) { - var max = ix_max(ix, ixPos, endPos); - - switch (max) { - case 0: - return max; - - case 1: - return count_bit_noESC(ix, ixPos, endPos, s); - - case 2: - case 3: - return count_bit_noESC_from2(ix, ixPos, endPos, - huf_tbl_noESC[max - 1], s); - - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - return count_bit_noESC_from3(ix, ixPos, endPos, - huf_tbl_noESC[max - 1], s); - - default: - /* try tables with linbits */ - if (max > QuantizePVT.IXMAX_VAL) { - s.bits = QuantizePVT.LARGE_BITS; - return -1; - } - max -= 15; - var choice2; - for (choice2 = 24; choice2 < 32; choice2++) { - if (Tables.ht[choice2].linmax >= max) { - break; - } - } - var choice; - for (choice = choice2 - 8; choice < 24; choice++) { - if (Tables.ht[choice].linmax >= max) { - break; - } - } - return count_bit_ESC(ix, ixPos, endPos, choice, choice2, s); - } - } - - /** - * count_bit - */ - this.noquant_count_bits = function (gfc, gi, prev_noise) { - var ix = gi.l3_enc; - var i = Math.min(576, ((gi.max_nonzero_coeff + 2) >> 1) << 1); - - if (prev_noise != null) - prev_noise.sfb_count1 = 0; - - /* Determine count1 region */ - for (; i > 1; i -= 2) - if ((ix[i - 1] | ix[i - 2]) != 0) - break; - gi.count1 = i; - - /* Determines the number of bits to encode the quadruples. */ - var a1 = 0; - var a2 = 0; - for (; i > 3; i -= 4) { - var p; - /* hack to check if all values <= 1 */ - //throw "TODO: HACK if ((((long) ix[i - 1] | (long) ix[i - 2] | (long) ix[i - 3] | (long) ix[i - 4]) & 0xffffffffL) > 1L " - //if (true) { - if (((ix[i - 1] | ix[i - 2] | ix[i - 3] | ix[i - 4]) & 0x7fffffff) > 1) { - break; - } - p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 + ix[i - 1]; - a1 += Tables.t32l[p]; - a2 += Tables.t33l[p]; - } - var bits = a1; - gi.count1table_select = 0; - if (a1 > a2) { - bits = a2; - gi.count1table_select = 1; - } - - gi.count1bits = bits; - gi.big_values = i; - if (i == 0) - return bits; - - if (gi.block_type == Encoder.SHORT_TYPE) { - a1 = 3 * gfc.scalefac_band.s[3]; - if (a1 > gi.big_values) - a1 = gi.big_values; - a2 = gi.big_values; - - } else if (gi.block_type == Encoder.NORM_TYPE) { - /* bv_scf has 576 entries (0..575) */ - a1 = gi.region0_count = gfc.bv_scf[i - 2]; - a2 = gi.region1_count = gfc.bv_scf[i - 1]; - - a2 = gfc.scalefac_band.l[a1 + a2 + 2]; - a1 = gfc.scalefac_band.l[a1 + 1]; - if (a2 < i) { - var bi = new Bits(bits); - gi.table_select[2] = choose_table(ix, a2, i, bi); - bits = bi.bits; - } - } else { - gi.region0_count = 7; - /* gi.region1_count = SBPSY_l - 7 - 1; */ - gi.region1_count = Encoder.SBMAX_l - 1 - 7 - 1; - a1 = gfc.scalefac_band.l[7 + 1]; - a2 = i; - if (a1 > a2) { - a1 = a2; - } - } - - /* have to allow for the case when bigvalues < region0 < region1 */ - /* (and region0, region1 are ignored) */ - a1 = Math.min(a1, i); - a2 = Math.min(a2, i); - - - /* Count the number of bits necessary to code the bigvalues region. */ - if (0 < a1) { - var bi = new Bits(bits); - gi.table_select[0] = choose_table(ix, 0, a1, bi); - bits = bi.bits; - } - if (a1 < a2) { - var bi = new Bits(bits); - gi.table_select[1] = choose_table(ix, a1, a2, bi); - bits = bi.bits; - } - if (gfc.use_best_huffman == 2) { - gi.part2_3_length = bits; - best_huffman_divide(gfc, gi); - bits = gi.part2_3_length; - } - - if (prev_noise != null) { - if (gi.block_type == Encoder.NORM_TYPE) { - var sfb = 0; - while (gfc.scalefac_band.l[sfb] < gi.big_values) { - sfb++; - } - prev_noise.sfb_count1 = sfb; - } - } - - return bits; - } - - this.count_bits = function (gfc, xr, gi, prev_noise) { - var ix = gi.l3_enc; - - /* since quantize_xrpow uses table lookup, we need to check this first: */ - var w = (QuantizePVT.IXMAX_VAL) / qupvt.IPOW20(gi.global_gain); - - if (gi.xrpow_max > w) - return QuantizePVT.LARGE_BITS; - - quantize_xrpow(xr, ix, qupvt.IPOW20(gi.global_gain), gi, prev_noise); - - if ((gfc.substep_shaping & 2) != 0) { - var j = 0; - /* 0.634521682242439 = 0.5946*2**(.5*0.1875) */ - var gain = gi.global_gain + gi.scalefac_scale; - var roundfac = 0.634521682242439 / qupvt.IPOW20(gain); - for (var sfb = 0; sfb < gi.sfbmax; sfb++) { - var width = gi.width[sfb]; - if (0 == gfc.pseudohalf[sfb]) { - j += width; - } else { - var k; - for (k = j, j += width; k < j; ++k) { - ix[k] = (xr[k] >= roundfac) ? ix[k] : 0; - } - } - } - } - return this.noquant_count_bits(gfc, gi, prev_noise); - } - - /** - * re-calculate the best scalefac_compress using scfsi the saved bits are - * kept in the bit reservoir. - */ - function recalc_divide_init(gfc, cod_info, ix, r01_bits, r01_div, r0_tbl, r1_tbl) { - var bigv = cod_info.big_values; - - for (var r0 = 0; r0 <= 7 + 15; r0++) { - r01_bits[r0] = QuantizePVT.LARGE_BITS; - } - - for (var r0 = 0; r0 < 16; r0++) { - var a1 = gfc.scalefac_band.l[r0 + 1]; - if (a1 >= bigv) - break; - var r0bits = 0; - var bi = new Bits(r0bits); - var r0t = choose_table(ix, 0, a1, bi); - r0bits = bi.bits; - - for (var r1 = 0; r1 < 8; r1++) { - var a2 = gfc.scalefac_band.l[r0 + r1 + 2]; - if (a2 >= bigv) - break; - var bits = r0bits; - bi = new Bits(bits); - var r1t = choose_table(ix, a1, a2, bi); - bits = bi.bits; - if (r01_bits[r0 + r1] > bits) { - r01_bits[r0 + r1] = bits; - r01_div[r0 + r1] = r0; - r0_tbl[r0 + r1] = r0t; - r1_tbl[r0 + r1] = r1t; - } - } - } - } - - function recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl) { - var bigv = cod_info2.big_values; - - for (var r2 = 2; r2 < Encoder.SBMAX_l + 1; r2++) { - var a2 = gfc.scalefac_band.l[r2]; - if (a2 >= bigv) - break; - var bits = r01_bits[r2 - 2] + cod_info2.count1bits; - if (gi.part2_3_length <= bits) - break; - - var bi = new Bits(bits); - var r2t = choose_table(ix, a2, bigv, bi); - bits = bi.bits; - if (gi.part2_3_length <= bits) - continue; - - gi.assign(cod_info2); - gi.part2_3_length = bits; - gi.region0_count = r01_div[r2 - 2]; - gi.region1_count = r2 - 2 - r01_div[r2 - 2]; - gi.table_select[0] = r0_tbl[r2 - 2]; - gi.table_select[1] = r1_tbl[r2 - 2]; - gi.table_select[2] = r2t; - } - } - - this.best_huffman_divide = function (gfc, gi) { - var cod_info2 = new GrInfo(); - var ix = gi.l3_enc; - var r01_bits = new_int(7 + 15 + 1); - var r01_div = new_int(7 + 15 + 1); - var r0_tbl = new_int(7 + 15 + 1); - var r1_tbl = new_int(7 + 15 + 1); - - /* SHORT BLOCK stuff fails for MPEG2 */ - if (gi.block_type == Encoder.SHORT_TYPE && gfc.mode_gr == 1) - return; - - cod_info2.assign(gi); - if (gi.block_type == Encoder.NORM_TYPE) { - recalc_divide_init(gfc, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl); - recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, - r0_tbl, r1_tbl); - } - var i = cod_info2.big_values; - if (i == 0 || (ix[i - 2] | ix[i - 1]) > 1) - return; - - i = gi.count1 + 2; - if (i > 576) - return; - - /* Determines the number of bits to encode the quadruples. */ - cod_info2.assign(gi); - cod_info2.count1 = i; - var a1 = 0; - var a2 = 0; - - - for (; i > cod_info2.big_values; i -= 4) { - var p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 - + ix[i - 1]; - a1 += Tables.t32l[p]; - a2 += Tables.t33l[p]; - } - cod_info2.big_values = i; - - cod_info2.count1table_select = 0; - if (a1 > a2) { - a1 = a2; - cod_info2.count1table_select = 1; - } - - cod_info2.count1bits = a1; - - if (cod_info2.block_type == Encoder.NORM_TYPE) - recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, - r0_tbl, r1_tbl); - else { - /* Count the number of bits necessary to code the bigvalues region. */ - cod_info2.part2_3_length = a1; - a1 = gfc.scalefac_band.l[7 + 1]; - if (a1 > i) { - a1 = i; - } - if (a1 > 0) { - var bi = new Bits(cod_info2.part2_3_length); - cod_info2.table_select[0] = choose_table(ix, 0, a1, bi); - cod_info2.part2_3_length = bi.bits; - } - if (i > a1) { - var bi = new Bits(cod_info2.part2_3_length); - cod_info2.table_select[1] = choose_table(ix, a1, i, bi); - cod_info2.part2_3_length = bi.bits; - } - if (gi.part2_3_length > cod_info2.part2_3_length) - gi.assign(cod_info2); - } - } - - var slen1_n = [1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16]; - var slen2_n = [1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8]; - var slen1_tab = [0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4]; - var slen2_tab = [0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3]; - Takehiro.slen1_tab = slen1_tab; - Takehiro.slen2_tab = slen2_tab; - - function scfsi_calc(ch, l3_side) { - var sfb; - var gi = l3_side.tt[1][ch]; - var g0 = l3_side.tt[0][ch]; - - for (var i = 0; i < Tables.scfsi_band.length - 1; i++) { - for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) { - if (g0.scalefac[sfb] != gi.scalefac[sfb] - && gi.scalefac[sfb] >= 0) - break; - } - if (sfb == Tables.scfsi_band[i + 1]) { - for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) { - gi.scalefac[sfb] = -1; - } - l3_side.scfsi[ch][i] = 1; - } - } - var s1 = 0; - var c1 = 0; - for (sfb = 0; sfb < 11; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - c1++; - if (s1 < gi.scalefac[sfb]) - s1 = gi.scalefac[sfb]; - } - var s2 = 0; - var c2 = 0; - for (; sfb < Encoder.SBPSY_l; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - c2++; - if (s2 < gi.scalefac[sfb]) - s2 = gi.scalefac[sfb]; - } - - for (var i = 0; i < 16; i++) { - if (s1 < slen1_n[i] && s2 < slen2_n[i]) { - var c = slen1_tab[i] * c1 + slen2_tab[i] * c2; - if (gi.part2_length > c) { - gi.part2_length = c; - gi.scalefac_compress = i; - } - } - } - } - - /** - * Find the optimal way to store the scalefactors. Only call this routine - * after final scalefactors have been chosen and the channel/granule will - * not be re-encoded. - */ - this.best_scalefac_store = function (gfc, gr, ch, l3_side) { - /* use scalefac_scale if we can */ - var gi = l3_side.tt[gr][ch]; - var sfb, i, j, l; - var recalc = 0; - - /* - * remove scalefacs from bands with ix=0. This idea comes from the AAC - * ISO docs. added mt 3/00 - */ - /* check if l3_enc=0 */ - j = 0; - for (sfb = 0; sfb < gi.sfbmax; sfb++) { - var width = gi.width[sfb]; - j += width; - for (l = -width; l < 0; l++) { - if (gi.l3_enc[l + j] != 0) - break; - } - if (l == 0) - gi.scalefac[sfb] = recalc = -2; - /* anything goes. */ - /* - * only best_scalefac_store and calc_scfsi know--and only they - * should know--about the magic number -2. - */ - } - - if (0 == gi.scalefac_scale && 0 == gi.preflag) { - var s = 0; - for (sfb = 0; sfb < gi.sfbmax; sfb++) - if (gi.scalefac[sfb] > 0) - s |= gi.scalefac[sfb]; - - if (0 == (s & 1) && s != 0) { - for (sfb = 0; sfb < gi.sfbmax; sfb++) - if (gi.scalefac[sfb] > 0) - gi.scalefac[sfb] >>= 1; - - gi.scalefac_scale = recalc = 1; - } - } - - if (0 == gi.preflag && gi.block_type != Encoder.SHORT_TYPE - && gfc.mode_gr == 2) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (gi.scalefac[sfb] < qupvt.pretab[sfb] - && gi.scalefac[sfb] != -2) - break; - if (sfb == Encoder.SBPSY_l) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (gi.scalefac[sfb] > 0) - gi.scalefac[sfb] -= qupvt.pretab[sfb]; - - gi.preflag = recalc = 1; - } - } - - for (i = 0; i < 4; i++) - l3_side.scfsi[ch][i] = 0; - - if (gfc.mode_gr == 2 && gr == 1 - && l3_side.tt[0][ch].block_type != Encoder.SHORT_TYPE - && l3_side.tt[1][ch].block_type != Encoder.SHORT_TYPE) { - scfsi_calc(ch, l3_side); - recalc = 0; - } - for (sfb = 0; sfb < gi.sfbmax; sfb++) { - if (gi.scalefac[sfb] == -2) { - gi.scalefac[sfb] = 0; - /* if anything goes, then 0 is a good choice */ - } - } - if (recalc != 0) { - if (gfc.mode_gr == 2) { - this.scale_bitcount(gi); - } else { - this.scale_bitcount_lsf(gfc, gi); - } - } - } - - function all_scalefactors_not_negative(scalefac, n) { - for (var i = 0; i < n; ++i) { - if (scalefac[i] < 0) - return false; - } - return true; - } - - /** - * number of bits used to encode scalefacs. - * - * 18*slen1_tab[i] + 18*slen2_tab[i] - */ - var scale_short = [0, 18, 36, 54, 54, 36, 54, 72, - 54, 72, 90, 72, 90, 108, 108, 126]; - - /** - * number of bits used to encode scalefacs. - * - * 17*slen1_tab[i] + 18*slen2_tab[i] - */ - var scale_mixed = [0, 18, 36, 54, 51, 35, 53, 71, - 52, 70, 88, 69, 87, 105, 104, 122]; - - /** - * number of bits used to encode scalefacs. - * - * 11*slen1_tab[i] + 10*slen2_tab[i] - */ - var scale_long = [0, 10, 20, 30, 33, 21, 31, 41, 32, 42, - 52, 43, 53, 63, 64, 74]; - - /** - * Also calculates the number of bits necessary to code the scalefactors. - */ - this.scale_bitcount = function (cod_info) { - var k, sfb, max_slen1 = 0, max_slen2 = 0; - - /* maximum values */ - var tab; - var scalefac = cod_info.scalefac; - - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - tab = scale_short; - if (cod_info.mixed_block_flag != 0) - tab = scale_mixed; - } else { /* block_type == 1,2,or 3 */ - tab = scale_long; - if (0 == cod_info.preflag) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (scalefac[sfb] < qupvt.pretab[sfb]) - break; - - if (sfb == Encoder.SBPSY_l) { - cod_info.preflag = 1; - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - scalefac[sfb] -= qupvt.pretab[sfb]; - } - } - } - - for (sfb = 0; sfb < cod_info.sfbdivide; sfb++) - if (max_slen1 < scalefac[sfb]) - max_slen1 = scalefac[sfb]; - - for (; sfb < cod_info.sfbmax; sfb++) - if (max_slen2 < scalefac[sfb]) - max_slen2 = scalefac[sfb]; - - /* - * from Takehiro TOMINAGA 10/99 loop over *all* - * posible values of scalefac_compress to find the one which uses the - * smallest number of bits. ISO would stop at first valid index - */ - cod_info.part2_length = QuantizePVT.LARGE_BITS; - for (k = 0; k < 16; k++) { - if (max_slen1 < slen1_n[k] && max_slen2 < slen2_n[k] - && cod_info.part2_length > tab[k]) { - cod_info.part2_length = tab[k]; - cod_info.scalefac_compress = k; - } - } - return cod_info.part2_length == QuantizePVT.LARGE_BITS; - } - - /** - * table of largest scalefactor values for MPEG2 - */ - var max_range_sfac_tab = [[15, 15, 7, 7], - [15, 15, 7, 0], [7, 3, 0, 0], [15, 31, 31, 0], - [7, 7, 7, 0], [3, 3, 0, 0]]; - - /** - * Also counts the number of bits to encode the scalefacs but for MPEG 2 - * Lower sampling frequencies (24, 22.05 and 16 kHz.) - * - * This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS, - * "Audio Decoding Layer III" - */ - this.scale_bitcount_lsf = function (gfc, cod_info) { - var table_number, row_in_table, partition, nr_sfb, window; - var over; - var i, sfb; - var max_sfac = new_int(4); -//var partition_table; - var scalefac = cod_info.scalefac; - - /* - * Set partition table. Note that should try to use table one, but do - * not yet... - */ - if (cod_info.preflag != 0) - table_number = 2; - else - table_number = 0; - - for (i = 0; i < 4; i++) - max_sfac[i] = 0; - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - row_in_table = 1; - var partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (sfb = 0, partition = 0; partition < 4; partition++) { - nr_sfb = partition_table[partition] / 3; - for (i = 0; i < nr_sfb; i++, sfb++) - for (window = 0; window < 3; window++) - if (scalefac[sfb * 3 + window] > max_sfac[partition]) - max_sfac[partition] = scalefac[sfb * 3 + window]; - } - } else { - row_in_table = 0; - var partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (sfb = 0, partition = 0; partition < 4; partition++) { - nr_sfb = partition_table[partition]; - for (i = 0; i < nr_sfb; i++, sfb++) - if (scalefac[sfb] > max_sfac[partition]) - max_sfac[partition] = scalefac[sfb]; - } - } - - for (over = false, partition = 0; partition < 4; partition++) { - if (max_sfac[partition] > max_range_sfac_tab[table_number][partition]) - over = true; - } - if (!over) { - var slen1, slen2, slen3, slen4; - - cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (partition = 0; partition < 4; partition++) - cod_info.slen[partition] = log2tab[max_sfac[partition]]; - - /* set scalefac_compress */ - slen1 = cod_info.slen[0]; - slen2 = cod_info.slen[1]; - slen3 = cod_info.slen[2]; - slen4 = cod_info.slen[3]; - - switch (table_number) { - case 0: - cod_info.scalefac_compress = (((slen1 * 5) + slen2) << 4) - + (slen3 << 2) + slen4; - break; - - case 1: - cod_info.scalefac_compress = 400 + (((slen1 * 5) + slen2) << 2) - + slen3; - break; - - case 2: - cod_info.scalefac_compress = 500 + (slen1 * 3) + slen2; - break; - - default: - System.err.printf("intensity stereo not implemented yet\n"); - break; - } - } - if (!over) { - cod_info.part2_length = 0; - for (partition = 0; partition < 4; partition++) - cod_info.part2_length += cod_info.slen[partition] - * cod_info.sfb_partition_table[partition]; - } - return over; - } - - /* - * Since no bands have been over-amplified, we can set scalefac_compress and - * slen[] for the formatter - */ - var log2tab = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, - 4, 4, 4, 4]; - - this.huffman_init = function (gfc) { - for (var i = 2; i <= 576; i += 2) { - var scfb_anz = 0, bv_index; - while (gfc.scalefac_band.l[++scfb_anz] < i) - ; - - bv_index = subdv_table[scfb_anz][0]; // .region0_count - while (gfc.scalefac_band.l[bv_index + 1] > i) - bv_index--; - - if (bv_index < 0) { - /* - * this is an indication that everything is going to be encoded - * as region0: bigvalues < region0 < region1 so lets set - * region0, region1 to some value larger than bigvalues - */ - bv_index = subdv_table[scfb_anz][0]; // .region0_count - } - - gfc.bv_scf[i - 2] = bv_index; - - bv_index = subdv_table[scfb_anz][1]; // .region1_count - while (gfc.scalefac_band.l[bv_index + gfc.bv_scf[i - 2] + 2] > i) - bv_index--; - - if (bv_index < 0) { - bv_index = subdv_table[scfb_anz][1]; // .region1_count - } - - gfc.bv_scf[i - 1] = bv_index; - } - } -} - -/* - * bit reservoir source file - * - * Copyright (c) 1999-2000 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Reservoir.java,v 1.9 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -/** - * ResvFrameBegin:
- * Called (repeatedly) at the beginning of a frame. Updates the maximum size of - * the reservoir, and checks to make sure main_data_begin was set properly by - * the formatter
- * Background information: - * - * This is the original text from the ISO standard. Because of sooo many bugs - * and irritations correcting comments are added in brackets []. A '^W' means - * you should remove the last word. - * - *
- *  1. The following rule can be used to calculate the maximum
- *     number of bits used for one granule [^W frame]:
- * At the highest possible bitrate of Layer III (320 kbps - * per stereo signal [^W^W^W], 48 kHz) the frames must be of - * [^W^W^W are designed to have] constant length, i.e. - * one buffer [^W^W the frame] length is:
- * - * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte - * - * This value is used as the maximum buffer per channel [^W^W] at - * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps - * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit - * [per granule and channel] at 48 kHz sampling frequency. - * This means that there is a maximum deviation (short time buffer - * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps. - * The actual deviation is equal to the number of bytes [with the - * meaning of octets] denoted by the main_data_end offset pointer. - * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits - * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits]. - * ... The xchange of buffer bits between the left and right channel - * is allowed without restrictions [exception: dual channel]. - * Because of the [constructed] constraint on the buffer size - * main_data_end is always set to 0 in the case of bit_rate_index==14, - * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case - * all data are allocated between adjacent header [^W sync] words - * [, i.e. there is no buffering at all]. - *
- */ - - -function Reservoir() { - var bs; - - this.setModules = function(_bs) { - bs = _bs; - } - - this.ResvFrameBegin = function(gfp, mean_bits) { - var gfc = gfp.internal_flags; - var maxmp3buf; - var l3_side = gfc.l3_side; - - var frameLength = bs.getframebits(gfp); - mean_bits.bits = (frameLength - gfc.sideinfo_len * 8) / gfc.mode_gr; - - /** - *
-		 *  Meaning of the variables:
-		 *      resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1))
-		 *          Number of bits can be stored in previous frame(s) due to
-		 *          counter size constaints
-		 *      maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5))
-		 *          Number of bits allowed to encode one frame (you can take 8*511 bit
-		 *          from the bit reservoir and at most 8*1440 bit from the current
-		 *          frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible
-		 *          value for MPEG-1 and -2)
-		 * 
-		 *          maximum allowed granule/channel size times 4 = 8*2047 bits.,
-		 *          so this is the absolute maximum supported by the format.
-		 * 
-		 * 
-		 *      fullFrameBits:  maximum number of bits available for encoding
-		 *                      the current frame.
-		 * 
-		 *      mean_bits:      target number of bits per granule.
-		 * 
-		 *      frameLength:
-		 * 
-		 *      gfc.ResvMax:   maximum allowed reservoir
-		 * 
-		 *      gfc.ResvSize:  current reservoir size
-		 * 
-		 *      l3_side.resvDrain_pre:
-		 *         ancillary data to be added to previous frame:
-		 *         (only usefull in VBR modes if it is possible to have
-		 *         maxmp3buf < fullFrameBits)).  Currently disabled,
-		 *         see #define NEW_DRAIN
-		 *         2010-02-13: RH now enabled, it seems to be needed for CBR too,
-		 *                     as there exists one example, where the FhG decoder
-		 *                     can't decode a -b320 CBR file anymore.
-		 * 
-		 *      l3_side.resvDrain_post:
-		 *         ancillary data to be added to this frame:
-		 * 
-		 * 
- */ - - /* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */ - var resvLimit = (8 * 256) * gfc.mode_gr - 8; - - /* - * maximum allowed frame size. dont use more than this number of bits, - * even if the frame has the space for them: - */ - if (gfp.brate > 320) { - /* in freeformat the buffer is constant */ - maxmp3buf = 8 * ((int) ((gfp.brate * 1000) - / (gfp.out_samplerate / 1152) / 8 + .5)); - } else { - /* - * all mp3 decoders should have enough buffer to handle this value: - * size of a 320kbps 32kHz frame - */ - maxmp3buf = 8 * 1440; - - /* - * Bouvigne suggests this more lax interpretation of the ISO doc - * instead of using 8*960. - */ - - if (gfp.strict_ISO) { - maxmp3buf = 8 * ((int) (320000 / (gfp.out_samplerate / 1152) / 8 + .5)); - } - } - - gfc.ResvMax = maxmp3buf - frameLength; - if (gfc.ResvMax > resvLimit) - gfc.ResvMax = resvLimit; - if (gfc.ResvMax < 0 || gfp.disable_reservoir) - gfc.ResvMax = 0; - - var fullFrameBits = mean_bits.bits * gfc.mode_gr - + Math.min(gfc.ResvSize, gfc.ResvMax); - - if (fullFrameBits > maxmp3buf) - fullFrameBits = maxmp3buf; - - - l3_side.resvDrain_pre = 0; - - // frame analyzer code - if (gfc.pinfo != null) { - /* - * expected bits per channel per granule [is this also right for - * mono/stereo, MPEG-1/2 ?] - */ - gfc.pinfo.mean_bits = mean_bits.bits / 2; - gfc.pinfo.resvsize = gfc.ResvSize; - } - - return fullFrameBits; - } - - /** - * returns targ_bits: target number of bits to use for 1 granule
- * extra_bits: amount extra available from reservoir
- * Mark Taylor 4/99 - */ - this.ResvMaxBits = function(gfp, mean_bits, targ_bits, cbr) { - var gfc = gfp.internal_flags; - var add_bits; - var ResvSize = gfc.ResvSize, ResvMax = gfc.ResvMax; - - /* compensate the saved bits used in the 1st granule */ - if (cbr != 0) - ResvSize += mean_bits; - - if ((gfc.substep_shaping & 1) != 0) - ResvMax *= 0.9; - - targ_bits.bits = mean_bits; - - /* extra bits if the reservoir is almost full */ - if (ResvSize * 10 > ResvMax * 9) { - add_bits = ResvSize - (ResvMax * 9) / 10; - targ_bits.bits += add_bits; - gfc.substep_shaping |= 0x80; - } else { - add_bits = 0; - gfc.substep_shaping &= 0x7f; - /* - * build up reservoir. this builds the reservoir a little slower - * than FhG. It could simple be mean_bits/15, but this was rigged to - * always produce 100 (the old value) at 128kbs - */ - if (!gfp.disable_reservoir && 0 == (gfc.substep_shaping & 1)) - targ_bits.bits -= .1 * mean_bits; - } - - /* amount from the reservoir we are allowed to use. ISO says 6/10 */ - var extra_bits = (ResvSize < (gfc.ResvMax * 6) / 10 ? ResvSize - : (gfc.ResvMax * 6) / 10); - extra_bits -= add_bits; - - if (extra_bits < 0) - extra_bits = 0; - return extra_bits; - } - - /** - * Called after a granule's bit allocation. Readjusts the size of the - * reservoir to reflect the granule's usage. - */ - this.ResvAdjust = function(gfc, gi) { - gfc.ResvSize -= gi.part2_3_length + gi.part2_length; - } - - /** - * Called after all granules in a frame have been allocated. Makes sure that - * the reservoir size is within limits, possibly by adding stuffing bits. - */ - this.ResvFrameEnd = function(gfc, mean_bits) { - var over_bits; - var l3_side = gfc.l3_side; - - gfc.ResvSize += mean_bits * gfc.mode_gr; - var stuffingBits = 0; - l3_side.resvDrain_post = 0; - l3_side.resvDrain_pre = 0; - - /* we must be byte aligned */ - if ((over_bits = gfc.ResvSize % 8) != 0) - stuffingBits += over_bits; - - over_bits = (gfc.ResvSize - stuffingBits) - gfc.ResvMax; - if (over_bits > 0) { - stuffingBits += over_bits; - } - - /* - * NOTE: enabling the NEW_DRAIN code fixes some problems with FhG - * decoder shipped with MS Windows operating systems. Using this, it is - * even possible to use Gabriel's lax buffer consideration again, which - * assumes, any decoder should have a buffer large enough for a 320 kbps - * frame at 32 kHz sample rate. - * - * old drain code: lame -b320 BlackBird.wav --. does not play with - * GraphEdit.exe using FhG decoder V1.5 Build 50 - * - * new drain code: lame -b320 BlackBird.wav --. plays fine with - * GraphEdit.exe using FhG decoder V1.5 Build 50 - * - * Robert Hegemann, 2010-02-13. - */ - /* - * drain as many bits as possible into previous frame ancillary data In - * particular, in VBR mode ResvMax may have changed, and we have to make - * sure main_data_begin does not create a reservoir bigger than ResvMax - * mt 4/00 - */ - { - var mdb_bytes = Math.min(l3_side.main_data_begin * 8, stuffingBits) / 8; - l3_side.resvDrain_pre += 8 * mdb_bytes; - stuffingBits -= 8 * mdb_bytes; - gfc.ResvSize -= 8 * mdb_bytes; - l3_side.main_data_begin -= mdb_bytes; - } - /* drain the rest into this frames ancillary data */ - l3_side.resvDrain_post += stuffingBits; - gfc.ResvSize -= stuffingBits; - } -} - - - -BitStream.EQ = function (a, b) { - return (Math.abs(a) > Math.abs(b)) ? (Math.abs((a) - (b)) <= (Math - .abs(a) * 1e-6)) - : (Math.abs((a) - (b)) <= (Math.abs(b) * 1e-6)); -}; - -BitStream.NEQ = function (a, b) { - return !BitStream.EQ(a, b); -}; - -function BitStream() { - var self = this; - var CRC16_POLYNOMIAL = 0x8005; - - /* - * we work with ints, so when doing bit manipulation, we limit ourselves to - * MAX_LENGTH-2 just to be on the safe side - */ - var MAX_LENGTH = 32; - - //GainAnalysis ga; - //MPGLib mpg; - //Version ver; - //VBRTag vbr; - var ga = null; - var mpg = null; - var ver = null; - var vbr = null; - - //public final void setModules(GainAnalysis ga, MPGLib mpg, Version ver, - // VBRTag vbr) { - - this.setModules = function (_ga, _mpg, _ver, _vbr) { - ga = _ga; - mpg = _mpg; - ver = _ver; - vbr = _vbr; - }; - - /** - * Bit stream buffer. - */ - //private byte[] buf; - var buf = null; - /** - * Bit counter of bit stream. - */ - var totbit = 0; - /** - * Pointer to top byte in buffer. - */ - var bufByteIdx = 0; - /** - * Pointer to top bit of top byte in buffer. - */ - var bufBitIdx = 0; - - /** - * compute bitsperframe and mean_bits for a layer III frame - */ - this.getframebits = function (gfp) { - var gfc = gfp.internal_flags; - var bit_rate; - - /* get bitrate in kbps [?] */ - if (gfc.bitrate_index != 0) - bit_rate = Tables.bitrate_table[gfp.version][gfc.bitrate_index]; - else - bit_rate = gfp.brate; - - /* main encoding routine toggles padding on and off */ - /* one Layer3 Slot consists of 8 bits */ - var bytes = 0 | (gfp.version + 1) * 72000 * bit_rate / gfp.out_samplerate + gfc.padding; - return 8 * bytes; - }; - - function putheader_bits(gfc) { - System.arraycopy(gfc.header[gfc.w_ptr].buf, 0, buf, bufByteIdx, gfc.sideinfo_len); - bufByteIdx += gfc.sideinfo_len; - totbit += gfc.sideinfo_len * 8; - gfc.w_ptr = (gfc.w_ptr + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1); - } - - /** - * write j bits into the bit stream - */ - function putbits2(gfc, val, j) { - - while (j > 0) { - var k; - if (bufBitIdx == 0) { - bufBitIdx = 8; - bufByteIdx++; - if (gfc.header[gfc.w_ptr].write_timing == totbit) { - putheader_bits(gfc); - } - buf[bufByteIdx] = 0; - } - - k = Math.min(j, bufBitIdx); - j -= k; - - bufBitIdx -= k; - - /* 32 too large on 32 bit machines */ - - buf[bufByteIdx] |= ((val >> j) << bufBitIdx); - totbit += k; - } - } - - /** - * write j bits into the bit stream, ignoring frame headers - */ - function putbits_noheaders(gfc, val, j) { - - while (j > 0) { - var k; - if (bufBitIdx == 0) { - bufBitIdx = 8; - bufByteIdx++; - buf[bufByteIdx] = 0; - } - - k = Math.min(j, bufBitIdx); - j -= k; - - bufBitIdx -= k; - - /* 32 too large on 32 bit machines */ - - buf[bufByteIdx] |= ((val >> j) << bufBitIdx); - totbit += k; - } - } - - /** - * Some combinations of bitrate, Fs, and stereo make it impossible to stuff - * out a frame using just main_data, due to the limited number of bits to - * indicate main_data_length. In these situations, we put stuffing bits into - * the ancillary data... - */ - function drain_into_ancillary(gfp, remainingBits) { - var gfc = gfp.internal_flags; - var i; - - if (remainingBits >= 8) { - putbits2(gfc, 0x4c, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x41, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x4d, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x45, 8); - remainingBits -= 8; - } - - if (remainingBits >= 32) { - var version = ver.getLameShortVersion(); - if (remainingBits >= 32) - for (i = 0; i < version.length && remainingBits >= 8; ++i) { - remainingBits -= 8; - putbits2(gfc, version.charAt(i), 8); - } - } - - for (; remainingBits >= 1; remainingBits -= 1) { - putbits2(gfc, gfc.ancillary_flag, 1); - gfc.ancillary_flag ^= (!gfp.disable_reservoir ? 1 : 0); - } - - - } - - /** - * write N bits into the header - */ - function writeheader(gfc, val, j) { - var ptr = gfc.header[gfc.h_ptr].ptr; - - while (j > 0) { - var k = Math.min(j, 8 - (ptr & 7)); - j -= k; - /* >> 32 too large for 32 bit machines */ - - gfc.header[gfc.h_ptr].buf[ptr >> 3] |= ((val >> j)) << (8 - (ptr & 7) - k); - ptr += k; - } - gfc.header[gfc.h_ptr].ptr = ptr; - } - - function CRC_update(value, crc) { - value <<= 8; - for (var i = 0; i < 8; i++) { - value <<= 1; - crc <<= 1; - - if ((((crc ^ value) & 0x10000) != 0)) - crc ^= CRC16_POLYNOMIAL; - } - return crc; - } - - this.CRC_writeheader = function (gfc, header) { - var crc = 0xffff; - /* (jo) init crc16 for error_protection */ - - crc = CRC_update(header[2] & 0xff, crc); - crc = CRC_update(header[3] & 0xff, crc); - for (var i = 6; i < gfc.sideinfo_len; i++) { - crc = CRC_update(header[i] & 0xff, crc); - } - - header[4] = (byte)(crc >> 8); - header[5] = (byte)(crc & 255); - }; - - function encodeSideInfo2(gfp, bitsPerFrame) { - var gfc = gfp.internal_flags; - var l3_side; - var gr, ch; - - l3_side = gfc.l3_side; - gfc.header[gfc.h_ptr].ptr = 0; - Arrays.fill(gfc.header[gfc.h_ptr].buf, 0, gfc.sideinfo_len, 0); - if (gfp.out_samplerate < 16000) - writeheader(gfc, 0xffe, 12); - else - writeheader(gfc, 0xfff, 12); - writeheader(gfc, (gfp.version), 1); - writeheader(gfc, 4 - 3, 2); - writeheader(gfc, (!gfp.error_protection ? 1 : 0), 1); - writeheader(gfc, (gfc.bitrate_index), 4); - writeheader(gfc, (gfc.samplerate_index), 2); - writeheader(gfc, (gfc.padding), 1); - writeheader(gfc, (gfp.extension), 1); - writeheader(gfc, (gfp.mode.ordinal()), 2); - writeheader(gfc, (gfc.mode_ext), 2); - writeheader(gfc, (gfp.copyright), 1); - writeheader(gfc, (gfp.original), 1); - writeheader(gfc, (gfp.emphasis), 2); - if (gfp.error_protection) { - writeheader(gfc, 0, 16); - /* dummy */ - } - - if (gfp.version == 1) { - /* MPEG1 */ - writeheader(gfc, (l3_side.main_data_begin), 9); - - if (gfc.channels_out == 2) - writeheader(gfc, l3_side.private_bits, 3); - else - writeheader(gfc, l3_side.private_bits, 5); - - for (ch = 0; ch < gfc.channels_out; ch++) { - var band; - for (band = 0; band < 4; band++) { - writeheader(gfc, l3_side.scfsi[ch][band], 1); - } - } - - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - writeheader(gfc, gi.part2_3_length + gi.part2_length, 12); - writeheader(gfc, gi.big_values / 2, 9); - writeheader(gfc, gi.global_gain, 8); - writeheader(gfc, gi.scalefac_compress, 4); - - if (gi.block_type != Encoder.NORM_TYPE) { - writeheader(gfc, 1, 1); - /* window_switching_flag */ - writeheader(gfc, gi.block_type, 2); - writeheader(gfc, gi.mixed_block_flag, 1); - - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - - writeheader(gfc, gi.subblock_gain[0], 3); - writeheader(gfc, gi.subblock_gain[1], 3); - writeheader(gfc, gi.subblock_gain[2], 3); - } else { - writeheader(gfc, 0, 1); - /* window_switching_flag */ - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - if (gi.table_select[2] == 14) - gi.table_select[2] = 16; - writeheader(gfc, gi.table_select[2], 5); - - writeheader(gfc, gi.region0_count, 4); - writeheader(gfc, gi.region1_count, 3); - } - writeheader(gfc, gi.preflag, 1); - writeheader(gfc, gi.scalefac_scale, 1); - writeheader(gfc, gi.count1table_select, 1); - } - } - } else { - /* MPEG2 */ - writeheader(gfc, (l3_side.main_data_begin), 8); - writeheader(gfc, l3_side.private_bits, gfc.channels_out); - - gr = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - writeheader(gfc, gi.part2_3_length + gi.part2_length, 12); - writeheader(gfc, gi.big_values / 2, 9); - writeheader(gfc, gi.global_gain, 8); - writeheader(gfc, gi.scalefac_compress, 9); - - if (gi.block_type != Encoder.NORM_TYPE) { - writeheader(gfc, 1, 1); - /* window_switching_flag */ - writeheader(gfc, gi.block_type, 2); - writeheader(gfc, gi.mixed_block_flag, 1); - - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - - writeheader(gfc, gi.subblock_gain[0], 3); - writeheader(gfc, gi.subblock_gain[1], 3); - writeheader(gfc, gi.subblock_gain[2], 3); - } else { - writeheader(gfc, 0, 1); - /* window_switching_flag */ - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - if (gi.table_select[2] == 14) - gi.table_select[2] = 16; - writeheader(gfc, gi.table_select[2], 5); - - writeheader(gfc, gi.region0_count, 4); - writeheader(gfc, gi.region1_count, 3); - } - - writeheader(gfc, gi.scalefac_scale, 1); - writeheader(gfc, gi.count1table_select, 1); - } - } - - if (gfp.error_protection) { - /* (jo) error_protection: add crc16 information to header */ - CRC_writeheader(gfc, gfc.header[gfc.h_ptr].buf); - } - - { - var old = gfc.h_ptr; - - gfc.h_ptr = (old + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1); - gfc.header[gfc.h_ptr].write_timing = gfc.header[old].write_timing - + bitsPerFrame; - - if (gfc.h_ptr == gfc.w_ptr) { - /* yikes! we are out of header buffer space */ - System.err - .println("Error: MAX_HEADER_BUF too small in bitstream.c \n"); - } - - } - } - - function huffman_coder_count1(gfc, gi) { - /* Write count1 area */ - var h = Tables.ht[gi.count1table_select + 32]; - var i, bits = 0; - - var ix = gi.big_values; - var xr = gi.big_values; - - for (i = (gi.count1 - gi.big_values) / 4; i > 0; --i) { - var huffbits = 0; - var p = 0, v; - - v = gi.l3_enc[ix + 0]; - if (v != 0) { - p += 8; - if (gi.xr[xr + 0] < 0) - huffbits++; - } - - v = gi.l3_enc[ix + 1]; - if (v != 0) { - p += 4; - huffbits *= 2; - if (gi.xr[xr + 1] < 0) - huffbits++; - } - - v = gi.l3_enc[ix + 2]; - if (v != 0) { - p += 2; - huffbits *= 2; - if (gi.xr[xr + 2] < 0) - huffbits++; - } - - v = gi.l3_enc[ix + 3]; - if (v != 0) { - p++; - huffbits *= 2; - if (gi.xr[xr + 3] < 0) - huffbits++; - } - - ix += 4; - xr += 4; - putbits2(gfc, huffbits + h.table[p], h.hlen[p]); - bits += h.hlen[p]; - } - return bits; - } - - /** - * Implements the pseudocode of page 98 of the IS - */ - function Huffmancode(gfc, tableindex, start, end, gi) { - var h = Tables.ht[tableindex]; - var bits = 0; - - if (0 == tableindex) - return bits; - - for (var i = start; i < end; i += 2) { - var cbits = 0; - var xbits = 0; - var linbits = h.xlen; - var xlen = h.xlen; - var ext = 0; - var x1 = gi.l3_enc[i]; - var x2 = gi.l3_enc[i + 1]; - - if (x1 != 0) { - if (gi.xr[i] < 0) - ext++; - cbits--; - } - - if (tableindex > 15) { - /* use ESC-words */ - if (x1 > 14) { - var linbits_x1 = x1 - 15; - ext |= linbits_x1 << 1; - xbits = linbits; - x1 = 15; - } - - if (x2 > 14) { - var linbits_x2 = x2 - 15; - ext <<= linbits; - ext |= linbits_x2; - xbits += linbits; - x2 = 15; - } - xlen = 16; - } - - if (x2 != 0) { - ext <<= 1; - if (gi.xr[i + 1] < 0) - ext++; - cbits--; - } - - - x1 = x1 * xlen + x2; - xbits -= cbits; - cbits += h.hlen[x1]; - - - putbits2(gfc, h.table[x1], cbits); - putbits2(gfc, ext, xbits); - bits += cbits + xbits; - } - return bits; - } - - /** - * Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as - * well as the definitions of the side information on pages 26 and 27. - */ - function ShortHuffmancodebits(gfc, gi) { - var region1Start = 3 * gfc.scalefac_band.s[3]; - if (region1Start > gi.big_values) - region1Start = gi.big_values; - - /* short blocks do not have a region2 */ - var bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi); - bits += Huffmancode(gfc, gi.table_select[1], region1Start, - gi.big_values, gi); - return bits; - } - - function LongHuffmancodebits(gfc, gi) { - var bigvalues, bits; - var region1Start, region2Start; - - bigvalues = gi.big_values; - - var i = gi.region0_count + 1; - region1Start = gfc.scalefac_band.l[i]; - i += gi.region1_count + 1; - region2Start = gfc.scalefac_band.l[i]; - - if (region1Start > bigvalues) - region1Start = bigvalues; - - if (region2Start > bigvalues) - region2Start = bigvalues; - - bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi); - bits += Huffmancode(gfc, gi.table_select[1], region1Start, - region2Start, gi); - bits += Huffmancode(gfc, gi.table_select[2], region2Start, bigvalues, - gi); - return bits; - } - - function writeMainData(gfp) { - var gr, ch, sfb, data_bits, tot_bits = 0; - var gfc = gfp.internal_flags; - var l3_side = gfc.l3_side; - - if (gfp.version == 1) { - /* MPEG 1 */ - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - var slen1 = Takehiro.slen1_tab[gi.scalefac_compress]; - var slen2 = Takehiro.slen2_tab[gi.scalefac_compress]; - data_bits = 0; - for (sfb = 0; sfb < gi.sfbdivide; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - /* scfsi is used */ - putbits2(gfc, gi.scalefac[sfb], slen1); - data_bits += slen1; - } - for (; sfb < gi.sfbmax; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - /* scfsi is used */ - putbits2(gfc, gi.scalefac[sfb], slen2); - data_bits += slen2; - } - - if (gi.block_type == Encoder.SHORT_TYPE) { - data_bits += ShortHuffmancodebits(gfc, gi); - } else { - data_bits += LongHuffmancodebits(gfc, gi); - } - data_bits += huffman_coder_count1(gfc, gi); - /* does bitcount in quantize.c agree with actual bit count? */ - tot_bits += data_bits; - } - /* for ch */ - } - /* for gr */ - } else { - /* MPEG 2 */ - gr = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - var i, sfb_partition, scale_bits = 0; - data_bits = 0; - sfb = 0; - sfb_partition = 0; - - if (gi.block_type == Encoder.SHORT_TYPE) { - for (; sfb_partition < 4; sfb_partition++) { - var sfbs = gi.sfb_partition_table[sfb_partition] / 3; - var slen = gi.slen[sfb_partition]; - for (i = 0; i < sfbs; i++, sfb++) { - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 0], 0), slen); - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 1], 0), slen); - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 2], 0), slen); - scale_bits += 3 * slen; - } - } - data_bits += ShortHuffmancodebits(gfc, gi); - } else { - for (; sfb_partition < 4; sfb_partition++) { - var sfbs = gi.sfb_partition_table[sfb_partition]; - var slen = gi.slen[sfb_partition]; - for (i = 0; i < sfbs; i++, sfb++) { - putbits2(gfc, Math.max(gi.scalefac[sfb], 0), slen); - scale_bits += slen; - } - } - data_bits += LongHuffmancodebits(gfc, gi); - } - data_bits += huffman_coder_count1(gfc, gi); - /* does bitcount in quantize.c agree with actual bit count? */ - tot_bits += scale_bits + data_bits; - } - /* for ch */ - } - /* for gf */ - return tot_bits; - } - - /* main_data */ - - function TotalBytes() { - this.total = 0; - } - - /* - * compute the number of bits required to flush all mp3 frames currently in - * the buffer. This should be the same as the reservoir size. Only call this - * routine between frames - i.e. only after all headers and data have been - * added to the buffer by format_bitstream(). - * - * Also compute total_bits_output = size of mp3 buffer (including frame - * headers which may not have yet been send to the mp3 buffer) + number of - * bits needed to flush all mp3 frames. - * - * total_bytes_output is the size of the mp3 output buffer if - * lame_encode_flush_nogap() was called right now. - */ - function compute_flushbits(gfp, total_bytes_output) { - var gfc = gfp.internal_flags; - var flushbits, remaining_headers; - var bitsPerFrame; - var last_ptr, first_ptr; - first_ptr = gfc.w_ptr; - /* first header to add to bitstream */ - last_ptr = gfc.h_ptr - 1; - /* last header to add to bitstream */ - if (last_ptr == -1) - last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1; - - /* add this many bits to bitstream so we can flush all headers */ - flushbits = gfc.header[last_ptr].write_timing - totbit; - total_bytes_output.total = flushbits; - - if (flushbits >= 0) { - /* if flushbits >= 0, some headers have not yet been written */ - /* reduce flushbits by the size of the headers */ - remaining_headers = 1 + last_ptr - first_ptr; - if (last_ptr < first_ptr) - remaining_headers = 1 + last_ptr - first_ptr - + LameInternalFlags.MAX_HEADER_BUF; - flushbits -= remaining_headers * 8 * gfc.sideinfo_len; - } - - /* - * finally, add some bits so that the last frame is complete these bits - * are not necessary to decode the last frame, but some decoders will - * ignore last frame if these bits are missing - */ - bitsPerFrame = self.getframebits(gfp); - flushbits += bitsPerFrame; - total_bytes_output.total += bitsPerFrame; - /* round up: */ - if ((total_bytes_output.total % 8) != 0) - total_bytes_output.total = 1 + (total_bytes_output.total / 8); - else - total_bytes_output.total = (total_bytes_output.total / 8); - total_bytes_output.total += bufByteIdx + 1; - - if (flushbits < 0) { - System.err.println("strange error flushing buffer ... \n"); - } - return flushbits; - } - - this.flush_bitstream = function (gfp) { - var gfc = gfp.internal_flags; - var l3_side; - var flushbits; - var last_ptr = gfc.h_ptr - 1; - /* last header to add to bitstream */ - if (last_ptr == -1) - last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1; - l3_side = gfc.l3_side; - - if ((flushbits = compute_flushbits(gfp, new TotalBytes())) < 0) - return; - drain_into_ancillary(gfp, flushbits); - - /* check that the 100% of the last frame has been written to bitstream */ - - /* - * we have padded out all frames with ancillary data, which is the same - * as filling the bitreservoir with ancillary data, so : - */ - gfc.ResvSize = 0; - l3_side.main_data_begin = 0; - - /* save the ReplayGain value */ - if (gfc.findReplayGain) { - var RadioGain = ga.GetTitleGain(gfc.rgdata); - gfc.RadioGain = Math.floor(RadioGain * 10.0 + 0.5) | 0; - /* round to nearest */ - } - - /* find the gain and scale change required for no clipping */ - if (gfc.findPeakSample) { - gfc.noclipGainChange = Math.ceil(Math - .log10(gfc.PeakSample / 32767.0) * 20.0 * 10.0) | 0; - /* round up */ - - if (gfc.noclipGainChange > 0) { - /* clipping occurs */ - if (EQ(gfp.scale, 1.0) || EQ(gfp.scale, 0.0)) - gfc.noclipScale = (Math - .floor((32767.0 / gfc.PeakSample) * 100.0) / 100.0); - /* round down */ - else { - /* - * the user specified his own scaling factor. We could - * suggest the scaling factor of - * (32767.0/gfp.PeakSample)*(gfp.scale) but it's usually - * very inaccurate. So we'd rather not advice him on the - * scaling factor. - */ - gfc.noclipScale = -1; - } - } else - /* no clipping */ - gfc.noclipScale = -1; - } - }; - - this.add_dummy_byte = function (gfp, val, n) { - var gfc = gfp.internal_flags; - var i; - - while (n-- > 0) { - putbits_noheaders(gfc, val, 8); - - for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i) - gfc.header[i].write_timing += 8; - } - }; - - /** - * This is called after a frame of audio has been quantized and coded. It - * will write the encoded audio to the bitstream. Note that from a layer3 - * encoder's perspective the bit stream is primarily a series of main_data() - * blocks, with header and side information inserted at the proper locations - * to maintain framing. (See Figure A.7 in the IS). - */ - this.format_bitstream = function (gfp) { - var gfc = gfp.internal_flags; - var l3_side; - l3_side = gfc.l3_side; - - var bitsPerFrame = this.getframebits(gfp); - drain_into_ancillary(gfp, l3_side.resvDrain_pre); - - encodeSideInfo2(gfp, bitsPerFrame); - var bits = 8 * gfc.sideinfo_len; - bits += writeMainData(gfp); - drain_into_ancillary(gfp, l3_side.resvDrain_post); - bits += l3_side.resvDrain_post; - - l3_side.main_data_begin += (bitsPerFrame - bits) / 8; - - /* - * compare number of bits needed to clear all buffered mp3 frames with - * what we think the resvsize is: - */ - if (compute_flushbits(gfp, new TotalBytes()) != gfc.ResvSize) { - System.err.println("Internal buffer inconsistency. flushbits <> ResvSize"); - } - - /* - * compare main_data_begin for the next frame with what we think the - * resvsize is: - */ - if ((l3_side.main_data_begin * 8) != gfc.ResvSize) { - System.err.printf("bit reservoir error: \n" - + "l3_side.main_data_begin: %d \n" - + "Resvoir size: %d \n" - + "resv drain (post) %d \n" - + "resv drain (pre) %d \n" - + "header and sideinfo: %d \n" - + "data bits: %d \n" - + "total bits: %d (remainder: %d) \n" - + "bitsperframe: %d \n", - 8 * l3_side.main_data_begin, gfc.ResvSize, - l3_side.resvDrain_post, l3_side.resvDrain_pre, - 8 * gfc.sideinfo_len, bits - l3_side.resvDrain_post - 8 - * gfc.sideinfo_len, bits, bits % 8, bitsPerFrame); - - System.err.println("This is a fatal error. It has several possible causes:"); - System.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"); - System.err.println(" 9%% Your system is overclocked"); - System.err.println(" 1%% bug in LAME encoding library"); - - gfc.ResvSize = l3_side.main_data_begin * 8; - } - //; - - if (totbit > 1000000000) { - /* - * to avoid totbit overflow, (at 8h encoding at 128kbs) lets reset - * bit counter - */ - var i; - for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i) - gfc.header[i].write_timing -= totbit; - totbit = 0; - } - - return 0; - }; - - /** - *
-     * copy data out of the internal MP3 bit buffer into a user supplied
-     *       unsigned char buffer.
-     *
-     *       mp3data=0      indicates data in buffer is an id3tags and VBR tags
-     *       mp3data=1      data is real mp3 frame data.
-     * 
- */ - this.copy_buffer = function (gfc, buffer, bufferPos, size, mp3data) { - var minimum = bufByteIdx + 1; - if (minimum <= 0) - return 0; - if (size != 0 && minimum > size) { - /* buffer is too small */ - return -1; - } - System.arraycopy(buf, 0, buffer, bufferPos, minimum); - bufByteIdx = -1; - bufBitIdx = 0; - - if (mp3data != 0) { - var crc = new_int(1); - crc[0] = gfc.nMusicCRC; - vbr.updateMusicCRC(crc, buffer, bufferPos, minimum); - gfc.nMusicCRC = crc[0]; - - /** - * sum number of bytes belonging to the mp3 stream this info will be - * written into the Xing/LAME header for seeking - */ - if (minimum > 0) { - gfc.VBR_seek_table.nBytesWritten += minimum; - } - - if (gfc.decode_on_the_fly) { /* decode the frame */ - var pcm_buf = new_float_n([2, 1152]); - var mp3_in = minimum; - var samples_out = -1; - var i; - - /* re-synthesis to pcm. Repeat until we get a samples_out=0 */ - while (samples_out != 0) { - - samples_out = mpg.hip_decode1_unclipped(gfc.hip, buffer, - bufferPos, mp3_in, pcm_buf[0], pcm_buf[1]); - /* - * samples_out = 0: need more data to decode samples_out = - * -1: error. Lets assume 0 pcm output samples_out = number - * of samples output - */ - - /* - * set the lenght of the mp3 input buffer to zero, so that - * in the next iteration of the loop we will be querying - * mpglib about buffered data - */ - mp3_in = 0; - - if (samples_out == -1) { - /* - * error decoding. Not fatal, but might screw up the - * ReplayGain tag. What should we do? Ignore for now - */ - samples_out = 0; - } - if (samples_out > 0) { - /* process the PCM data */ - - /* - * this should not be possible, and indicates we have - * overflown the pcm_buf buffer - */ - - if (gfc.findPeakSample) { - for (i = 0; i < samples_out; i++) { - if (pcm_buf[0][i] > gfc.PeakSample) - gfc.PeakSample = pcm_buf[0][i]; - else if (-pcm_buf[0][i] > gfc.PeakSample) - gfc.PeakSample = -pcm_buf[0][i]; - } - if (gfc.channels_out > 1) - for (i = 0; i < samples_out; i++) { - if (pcm_buf[1][i] > gfc.PeakSample) - gfc.PeakSample = pcm_buf[1][i]; - else if (-pcm_buf[1][i] > gfc.PeakSample) - gfc.PeakSample = -pcm_buf[1][i]; - } - } - - if (gfc.findReplayGain) - if (ga.AnalyzeSamples(gfc.rgdata, pcm_buf[0], 0, - pcm_buf[1], 0, samples_out, - gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR) - return -6; - - } - /* if (samples_out>0) */ - } - /* while (samples_out!=0) */ - } - /* if (gfc.decode_on_the_fly) */ - - } - /* if (mp3data) */ - return minimum; - }; - - this.init_bit_stream_w = function (gfc) { - buf = new_byte(Lame.LAME_MAXMP3BUFFER); - - gfc.h_ptr = gfc.w_ptr = 0; - gfc.header[gfc.h_ptr].write_timing = 0; - bufByteIdx = -1; - bufBitIdx = 0; - totbit = 0; - }; - - // From machine.h - - -} - - -/** - * A Vbr header may be present in the ancillary data field of the first frame of - * an mp3 bitstream
- * The Vbr header (optionally) contains - *
    - *
  • frames total number of audio frames in the bitstream - *
  • bytes total number of bytes in the bitstream - *
  • toc table of contents - *
- * - * toc (table of contents) gives seek points for random access.
- * The ith entry determines the seek point for i-percent duration.
- * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
- * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes - */ -VBRTag.NUMTOCENTRIES = 100; -VBRTag.MAXFRAMESIZE = 2880; - -function VBRTag() { - - var lame; - var bs; - var v; - - this.setModules = function (_lame, _bs, _v) { - lame = _lame; - bs = _bs; - v = _v; - }; - - var FRAMES_FLAG = 0x0001; - var BYTES_FLAG = 0x0002; - var TOC_FLAG = 0x0004; - var VBR_SCALE_FLAG = 0x0008; - - var NUMTOCENTRIES = VBRTag.NUMTOCENTRIES; - - /** - * (0xB40) the max freeformat 640 32kHz framesize. - */ - var MAXFRAMESIZE = VBRTag.MAXFRAMESIZE; - - /** - *
-     *    4 bytes for Header Tag
-     *    4 bytes for Header Flags
-     *  100 bytes for entry (toc)
-     *    4 bytes for frame size
-     *    4 bytes for stream size
-     *    4 bytes for VBR scale. a VBR quality indicator: 0=best 100=worst
-     *   20 bytes for LAME tag.  for example, "LAME3.12 (beta 6)"
-     * ___________
-     *  140 bytes
-     * 
- */ - var VBRHEADERSIZE = (NUMTOCENTRIES + 4 + 4 + 4 + 4 + 4); - - var LAMEHEADERSIZE = (VBRHEADERSIZE + 9 + 1 + 1 + 8 - + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2); - - /** - * The size of the Xing header MPEG-1, bit rate in kbps. - */ - var XING_BITRATE1 = 128; - /** - * The size of the Xing header MPEG-2, bit rate in kbps. - */ - var XING_BITRATE2 = 64; - /** - * The size of the Xing header MPEG-2.5, bit rate in kbps. - */ - var XING_BITRATE25 = 32; - - /** - * ISO-8859-1 charset for byte to string operations. - */ - var ISO_8859_1 = null; //Charset.forName("ISO-8859-1"); - - /** - * VBR header magic string. - */ - var VBRTag0 = "Xing"; - /** - * VBR header magic string (VBR == VBRMode.vbr_off). - */ - var VBRTag1 = "Info"; - - /** - * Lookup table for fast CRC-16 computation. Uses the polynomial - * x^16+x^15+x^2+1 - */ - var crc16Lookup = [0x0000, 0xC0C1, 0xC181, 0x0140, - 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, - 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, - 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, - 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, - 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, - 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, - 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, - 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, - 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, - 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, - 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, - 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, - 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, - 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, - 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, - 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, - 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, - 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, - 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, - 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, - 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, - 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, - 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, - 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, - 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, - 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, - 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, - 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, - 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, - 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, - 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, - 0x4100, 0x81C1, 0x8081, 0x4040]; - - /*********************************************************************** - * Robert Hegemann 2001-01-17 - ***********************************************************************/ - - function addVbr(v, bitrate) { - v.nVbrNumFrames++; - v.sum += bitrate; - v.seen++; - - if (v.seen < v.want) { - return; - } - - if (v.pos < v.size) { - v.bag[v.pos] = v.sum; - v.pos++; - v.seen = 0; - } - if (v.pos == v.size) { - for (var i = 1; i < v.size; i += 2) { - v.bag[i / 2] = v.bag[i]; - } - v.want *= 2; - v.pos /= 2; - } - } - - function xingSeekTable(v, t) { - if (v.pos <= 0) - return; - - for (var i = 1; i < NUMTOCENTRIES; ++i) { - var j = i / NUMTOCENTRIES, act, sum; - var indx = 0 | (Math.floor(j * v.pos)); - if (indx > v.pos - 1) - indx = v.pos - 1; - act = v.bag[indx]; - sum = v.sum; - var seek_point = 0 | (256. * act / sum); - if (seek_point > 255) - seek_point = 255; - t[i] = 0xff & seek_point; - } - } - - /** - * Add VBR entry, used to fill the VBR TOC entries. - * - * @param gfp - * global flags - */ - this.addVbrFrame = function (gfp) { - var gfc = gfp.internal_flags; - var kbps = Tables.bitrate_table[gfp.version][gfc.bitrate_index]; - addVbr(gfc.VBR_seek_table, kbps); - } - - /** - * Read big endian integer (4-bytes) from header. - * - * @param buf - * header containing the integer - * @param bufPos - * offset into the header - * @return extracted integer - */ - function extractInteger(buf, bufPos) { - var x = buf[bufPos + 0] & 0xff; - x <<= 8; - x |= buf[bufPos + 1] & 0xff; - x <<= 8; - x |= buf[bufPos + 2] & 0xff; - x <<= 8; - x |= buf[bufPos + 3] & 0xff; - return x; - } - - /** - * Write big endian integer (4-bytes) in the header. - * - * @param buf - * header to write the integer into - * @param bufPos - * offset into the header - * @param value - * integer value to write - */ - function createInteger(buf, bufPos, value) { - buf[bufPos + 0] = 0xff & ((value >> 24) & 0xff); - buf[bufPos + 1] = 0xff & ((value >> 16) & 0xff); - buf[bufPos + 2] = 0xff & ((value >> 8) & 0xff); - buf[bufPos + 3] = 0xff & (value & 0xff); - } - - /** - * Write big endian short (2-bytes) in the header. - * - * @param buf - * header to write the integer into - * @param bufPos - * offset into the header - * @param value - * integer value to write - */ - function createShort(buf, bufPos, value) { - buf[bufPos + 0] = 0xff & ((value >> 8) & 0xff); - buf[bufPos + 1] = 0xff & (value & 0xff); - } - - /** - * Check for magic strings (Xing/Info). - * - * @param buf - * header to check - * @param bufPos - * header offset to check - * @return magic string found - */ - function isVbrTag(buf, bufPos) { - return new String(buf, bufPos, VBRTag0.length(), ISO_8859_1) - .equals(VBRTag0) - || new String(buf, bufPos, VBRTag1.length(), ISO_8859_1) - .equals(VBRTag1); - } - - function shiftInBitsValue(x, n, v) { - return 0xff & ((x << n) | (v & ~(-1 << n))); - } - - /** - * Construct the MP3 header using the settings of the global flags. - * - * - * - * @param gfp - * global flags - * @param buffer - * header - */ - function setLameTagFrameHeader(gfp, buffer) { - var gfc = gfp.internal_flags; - - // MP3 Sync Word - buffer[0] = shiftInBitsValue(buffer[0], 8, 0xff); - - buffer[1] = shiftInBitsValue(buffer[1], 3, 7); - buffer[1] = shiftInBitsValue(buffer[1], 1, - (gfp.out_samplerate < 16000) ? 0 : 1); - // Version - buffer[1] = shiftInBitsValue(buffer[1], 1, gfp.version); - // 01 == Layer 3 - buffer[1] = shiftInBitsValue(buffer[1], 2, 4 - 3); - // Error protection - buffer[1] = shiftInBitsValue(buffer[1], 1, (!gfp.error_protection) ? 1 - : 0); - - // Bit rate - buffer[2] = shiftInBitsValue(buffer[2], 4, gfc.bitrate_index); - // Frequency - buffer[2] = shiftInBitsValue(buffer[2], 2, gfc.samplerate_index); - // Pad. Bit - buffer[2] = shiftInBitsValue(buffer[2], 1, 0); - // Priv. Bit - buffer[2] = shiftInBitsValue(buffer[2], 1, gfp.extension); - - // Mode - buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.mode.ordinal()); - // Mode extension (Used with Joint Stereo) - buffer[3] = shiftInBitsValue(buffer[3], 2, gfc.mode_ext); - // Copy - buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.copyright); - // Original - buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.original); - // Emphasis - buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.emphasis); - - /* the default VBR header. 48 kbps layer III, no padding, no crc */ - /* but sampling freq, mode and copyright/copy protection taken */ - /* from first valid frame */ - buffer[0] = 0xff; - var abyte = 0xff & (buffer[1] & 0xf1); - var bitrate; - if (1 == gfp.version) { - bitrate = XING_BITRATE1; - } else { - if (gfp.out_samplerate < 16000) - bitrate = XING_BITRATE25; - else - bitrate = XING_BITRATE2; - } - - if (gfp.VBR == VbrMode.vbr_off) - bitrate = gfp.brate; - - var bbyte; - if (gfp.free_format) - bbyte = 0x00; - else - bbyte = 0xff & (16 * lame.BitrateIndex(bitrate, gfp.version, - gfp.out_samplerate)); - - /* - * Use as much of the info from the real frames in the Xing header: - * samplerate, channels, crc, etc... - */ - if (gfp.version == 1) { - /* MPEG1 */ - buffer[1] = 0xff & (abyte | 0x0a); - /* was 0x0b; */ - abyte = 0xff & (buffer[2] & 0x0d); - /* AF keep also private bit */ - buffer[2] = 0xff & (bbyte | abyte); - /* 64kbs MPEG1 frame */ - } else { - /* MPEG2 */ - buffer[1] = 0xff & (abyte | 0x02); - /* was 0x03; */ - abyte = 0xff & (buffer[2] & 0x0d); - /* AF keep also private bit */ - buffer[2] = 0xff & (bbyte | abyte); - /* 64kbs MPEG2 frame */ - } - } - - /** - * Get VBR tag information - * - * @param buf - * header to analyze - * @param bufPos - * offset into the header - * @return VBR tag data - */ - this.getVbrTag = function (buf) { - var pTagData = new VBRTagData(); - var bufPos = 0; - - /* get Vbr header data */ - pTagData.flags = 0; - - /* get selected MPEG header data */ - var hId = (buf[bufPos + 1] >> 3) & 1; - var hSrIndex = (buf[bufPos + 2] >> 2) & 3; - var hMode = (buf[bufPos + 3] >> 6) & 3; - var hBitrate = ((buf[bufPos + 2] >> 4) & 0xf); - hBitrate = Tables.bitrate_table[hId][hBitrate]; - - /* check for FFE syncword */ - if ((buf[bufPos + 1] >> 4) == 0xE) - pTagData.samprate = Tables.samplerate_table[2][hSrIndex]; - else - pTagData.samprate = Tables.samplerate_table[hId][hSrIndex]; - - /* determine offset of header */ - if (hId != 0) { - /* mpeg1 */ - if (hMode != 3) - bufPos += (32 + 4); - else - bufPos += (17 + 4); - } else { - /* mpeg2 */ - if (hMode != 3) - bufPos += (17 + 4); - else - bufPos += (9 + 4); - } - - if (!isVbrTag(buf, bufPos)) - return null; - - bufPos += 4; - - pTagData.hId = hId; - - /* get flags */ - var head_flags = pTagData.flags = extractInteger(buf, bufPos); - bufPos += 4; - - if ((head_flags & FRAMES_FLAG) != 0) { - pTagData.frames = extractInteger(buf, bufPos); - bufPos += 4; - } - - if ((head_flags & BYTES_FLAG) != 0) { - pTagData.bytes = extractInteger(buf, bufPos); - bufPos += 4; - } - - if ((head_flags & TOC_FLAG) != 0) { - if (pTagData.toc != null) { - for (var i = 0; i < NUMTOCENTRIES; i++) - pTagData.toc[i] = buf[bufPos + i]; - } - bufPos += NUMTOCENTRIES; - } - - pTagData.vbrScale = -1; - - if ((head_flags & VBR_SCALE_FLAG) != 0) { - pTagData.vbrScale = extractInteger(buf, bufPos); - bufPos += 4; - } - - pTagData.headersize = ((hId + 1) * 72000 * hBitrate) - / pTagData.samprate; - - bufPos += 21; - var encDelay = buf[bufPos + 0] << 4; - encDelay += buf[bufPos + 1] >> 4; - var encPadding = (buf[bufPos + 1] & 0x0F) << 8; - encPadding += buf[bufPos + 2] & 0xff; - /* check for reasonable values (this may be an old Xing header, */ - /* not a INFO tag) */ - if (encDelay < 0 || encDelay > 3000) - encDelay = -1; - if (encPadding < 0 || encPadding > 3000) - encPadding = -1; - - pTagData.encDelay = encDelay; - pTagData.encPadding = encPadding; - - /* success */ - return pTagData; - } - - /** - * Initializes the header - * - * @param gfp - * global flags - */ - this.InitVbrTag = function (gfp) { - var gfc = gfp.internal_flags; - - /** - *
-         * Xing VBR pretends to be a 48kbs layer III frame.  (at 44.1kHz).
-         * (at 48kHz they use 56kbs since 48kbs frame not big enough for
-         * table of contents)
-         * let's always embed Xing header inside a 64kbs layer III frame.
-         * this gives us enough room for a LAME version string too.
-         * size determined by sampling frequency (MPEG1)
-         * 32kHz:    216 bytes@48kbs    288bytes@ 64kbs
-         * 44.1kHz:  156 bytes          208bytes@64kbs     (+1 if padding = 1)
-         * 48kHz:    144 bytes          192
-         *
-         * MPEG 2 values are the same since the framesize and samplerate
-         * are each reduced by a factor of 2.
-         * 
- */ - var kbps_header; - if (1 == gfp.version) { - kbps_header = XING_BITRATE1; - } else { - if (gfp.out_samplerate < 16000) - kbps_header = XING_BITRATE25; - else - kbps_header = XING_BITRATE2; - } - - if (gfp.VBR == VbrMode.vbr_off) - kbps_header = gfp.brate; - - // make sure LAME Header fits into Frame - var totalFrameSize = ((gfp.version + 1) * 72000 * kbps_header) - / gfp.out_samplerate; - var headerSize = (gfc.sideinfo_len + LAMEHEADERSIZE); - gfc.VBR_seek_table.TotalFrameSize = totalFrameSize; - if (totalFrameSize < headerSize || totalFrameSize > MAXFRAMESIZE) { - /* disable tag, it wont fit */ - gfp.bWriteVbrTag = false; - return; - } - - gfc.VBR_seek_table.nVbrNumFrames = 0; - gfc.VBR_seek_table.nBytesWritten = 0; - gfc.VBR_seek_table.sum = 0; - - gfc.VBR_seek_table.seen = 0; - gfc.VBR_seek_table.want = 1; - gfc.VBR_seek_table.pos = 0; - - if (gfc.VBR_seek_table.bag == null) { - gfc.VBR_seek_table.bag = new int[400]; - gfc.VBR_seek_table.size = 400; - } - - // write dummy VBR tag of all 0's into bitstream - var buffer = new_byte(MAXFRAMESIZE); - - setLameTagFrameHeader(gfp, buffer); - var n = gfc.VBR_seek_table.TotalFrameSize; - for (var i = 0; i < n; ++i) { - bs.add_dummy_byte(gfp, buffer[i] & 0xff, 1); - } - } - - /** - * Fast CRC-16 computation (uses table crc16Lookup). - * - * @param value - * @param crc - * @return - */ - function crcUpdateLookup(value, crc) { - var tmp = crc ^ value; - crc = (crc >> 8) ^ crc16Lookup[tmp & 0xff]; - return crc; - } - - this.updateMusicCRC = function (crc, buffer, bufferPos, size) { - for (var i = 0; i < size; ++i) - crc[0] = crcUpdateLookup(buffer[bufferPos + i], crc[0]); - } - - /** - * Write LAME info: mini version + info on various switches used (Jonathan - * Dee 2001/08/31). - * - * @param gfp - * global flags - * @param musicLength - * music length - * @param streamBuffer - * pointer to output buffer - * @param streamBufferPos - * offset into the output buffer - * @param crc - * computation of CRC-16 of Lame Tag so far (starting at frame - * sync) - * @return number of bytes written to the stream - */ - function putLameVBR(gfp, musicLength, streamBuffer, streamBufferPos, crc) { - var gfc = gfp.internal_flags; - var bytesWritten = 0; - - /* encoder delay */ - var encDelay = gfp.encoder_delay; - /* encoder padding */ - var encPadding = gfp.encoder_padding; - - /* recall: gfp.VBR_q is for example set by the switch -V */ - /* gfp.quality by -q, -h, -f, etc */ - var quality = (100 - 10 * gfp.VBR_q - gfp.quality); - - var version = v.getLameVeryShortVersion(); - var vbr; - var revision = 0x00; - var revMethod; - // numbering different in vbr_mode vs. Lame tag - var vbrTypeTranslator = [1, 5, 3, 2, 4, 0, 3]; - var lowpass = 0 | (((gfp.lowpassfreq / 100.0) + .5) > 255 ? 255 - : (gfp.lowpassfreq / 100.0) + .5); - var peakSignalAmplitude = 0; - var radioReplayGain = 0; - var audiophileReplayGain = 0; - var noiseShaping = gfp.internal_flags.noise_shaping; - var stereoMode = 0; - var nonOptimal = 0; - var sourceFreq = 0; - var misc = 0; - var musicCRC = 0; - - // psy model type: Gpsycho or NsPsytune - var expNPsyTune = (gfp.exp_nspsytune & 1) != 0; - var safeJoint = (gfp.exp_nspsytune & 2) != 0; - var noGapMore = false; - var noGapPrevious = false; - var noGapCount = gfp.internal_flags.nogap_total; - var noGapCurr = gfp.internal_flags.nogap_current; - - // 4 bits - var athType = gfp.ATHtype; - var flags = 0; - - // vbr modes - var abrBitrate; - switch (gfp.VBR) { - case vbr_abr: - abrBitrate = gfp.VBR_mean_bitrate_kbps; - break; - case vbr_off: - abrBitrate = gfp.brate; - break; - default: - abrBitrate = gfp.VBR_min_bitrate_kbps; - } - - // revision and vbr method - if (gfp.VBR.ordinal() < vbrTypeTranslator.length) - vbr = vbrTypeTranslator[gfp.VBR.ordinal()]; - else - vbr = 0x00; // unknown - - revMethod = 0x10 * revision + vbr; - - // ReplayGain - if (gfc.findReplayGain) { - if (gfc.RadioGain > 0x1FE) - gfc.RadioGain = 0x1FE; - if (gfc.RadioGain < -0x1FE) - gfc.RadioGain = -0x1FE; - - // set name code - radioReplayGain = 0x2000; - // set originator code to `determined automatically' - radioReplayGain |= 0xC00; - - if (gfc.RadioGain >= 0) { - // set gain adjustment - radioReplayGain |= gfc.RadioGain; - } else { - // set the sign bit - radioReplayGain |= 0x200; - // set gain adjustment - radioReplayGain |= -gfc.RadioGain; - } - } - - // peak sample - if (gfc.findPeakSample) - peakSignalAmplitude = Math - .abs(0 | ((( gfc.PeakSample) / 32767.0) * Math.pow(2, 23) + .5)); - - // nogap - if (noGapCount != -1) { - if (noGapCurr > 0) - noGapPrevious = true; - - if (noGapCurr < noGapCount - 1) - noGapMore = true; - } - - // flags - flags = athType + ((expNPsyTune ? 1 : 0) << 4) - + ((safeJoint ? 1 : 0) << 5) + ((noGapMore ? 1 : 0) << 6) - + ((noGapPrevious ? 1 : 0) << 7); - - if (quality < 0) - quality = 0; - - // stereo mode field (Intensity stereo is not implemented) - switch (gfp.mode) { - case MONO: - stereoMode = 0; - break; - case STEREO: - stereoMode = 1; - break; - case DUAL_CHANNEL: - stereoMode = 2; - break; - case JOINT_STEREO: - if (gfp.force_ms) - stereoMode = 4; - else - stereoMode = 3; - break; - case NOT_SET: - //$FALL-THROUGH$ - default: - stereoMode = 7; - break; - } - - if (gfp.in_samplerate <= 32000) - sourceFreq = 0x00; - else if (gfp.in_samplerate == 48000) - sourceFreq = 0x02; - else if (gfp.in_samplerate > 48000) - sourceFreq = 0x03; - else { - // default is 44100Hz - sourceFreq = 0x01; - } - - // Check if the user overrided the default LAME behavior with some - // nasty options - if (gfp.short_blocks == ShortBlock.short_block_forced - || gfp.short_blocks == ShortBlock.short_block_dispensed - || ((gfp.lowpassfreq == -1) && (gfp.highpassfreq == -1)) || /* "-k" */ - (gfp.scale_left < gfp.scale_right) - || (gfp.scale_left > gfp.scale_right) - || (gfp.disable_reservoir && gfp.brate < 320) || gfp.noATH - || gfp.ATHonly || (athType == 0) || gfp.in_samplerate <= 32000) - nonOptimal = 1; - - misc = noiseShaping + (stereoMode << 2) + (nonOptimal << 5) - + (sourceFreq << 6); - - musicCRC = gfc.nMusicCRC; - - // Write all this information into the stream - - createInteger(streamBuffer, streamBufferPos + bytesWritten, quality); - bytesWritten += 4; - - for (var j = 0; j < 9; j++) { - streamBuffer[streamBufferPos + bytesWritten + j] = 0xff & version .charAt(j); - } - bytesWritten += 9; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & revMethod; - bytesWritten++; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & lowpass; - bytesWritten++; - - createInteger(streamBuffer, streamBufferPos + bytesWritten, - peakSignalAmplitude); - bytesWritten += 4; - - createShort(streamBuffer, streamBufferPos + bytesWritten, - radioReplayGain); - bytesWritten += 2; - - createShort(streamBuffer, streamBufferPos + bytesWritten, - audiophileReplayGain); - bytesWritten += 2; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & flags; - bytesWritten++; - - if (abrBitrate >= 255) - streamBuffer[streamBufferPos + bytesWritten] = 0xFF; - else - streamBuffer[streamBufferPos + bytesWritten] = 0xff & abrBitrate; - bytesWritten++; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & (encDelay >> 4); - streamBuffer[streamBufferPos + bytesWritten + 1] = 0xff & ((encDelay << 4) + (encPadding >> 8)); - streamBuffer[streamBufferPos + bytesWritten + 2] = 0xff & encPadding; - - bytesWritten += 3; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & misc; - bytesWritten++; - - // unused in rev0 - streamBuffer[streamBufferPos + bytesWritten++] = 0; - - createShort(streamBuffer, streamBufferPos + bytesWritten, gfp.preset); - bytesWritten += 2; - - createInteger(streamBuffer, streamBufferPos + bytesWritten, musicLength); - bytesWritten += 4; - - createShort(streamBuffer, streamBufferPos + bytesWritten, musicCRC); - bytesWritten += 2; - - // Calculate tag CRC.... must be done here, since it includes previous - // information - - for (var i = 0; i < bytesWritten; i++) - crc = crcUpdateLookup(streamBuffer[streamBufferPos + i], crc); - - createShort(streamBuffer, streamBufferPos + bytesWritten, crc); - bytesWritten += 2; - - return bytesWritten; - } - - function skipId3v2(fpStream) { - // seek to the beginning of the stream - fpStream.seek(0); - // read 10 bytes in case there's an ID3 version 2 header here - var id3v2Header = new_byte(10); - fpStream.readFully(id3v2Header); - /* does the stream begin with the ID3 version 2 file identifier? */ - var id3v2TagSize; - if (!new String(id3v2Header, "ISO-8859-1").startsWith("ID3")) { - /* - * the tag size (minus the 10-byte header) is encoded into four - * bytes where the most significant bit is clear in each byte - */ - id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21) - | ((id3v2Header[7] & 0x7f) << 14) - | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f)) - + id3v2Header.length; - } else { - /* no ID3 version 2 tag in this stream */ - id3v2TagSize = 0; - } - return id3v2TagSize; - } - - this.getLameTagFrame = function (gfp, buffer) { - var gfc = gfp.internal_flags; - - if (!gfp.bWriteVbrTag) { - return 0; - } - if (gfc.Class_ID != Lame.LAME_ID) { - return 0; - } - if (gfc.VBR_seek_table.pos <= 0) { - return 0; - } - if (buffer.length < gfc.VBR_seek_table.TotalFrameSize) { - return gfc.VBR_seek_table.TotalFrameSize; - } - - Arrays.fill(buffer, 0, gfc.VBR_seek_table.TotalFrameSize, 0); - - // 4 bytes frame header - setLameTagFrameHeader(gfp, buffer); - - // Create TOC entries - var toc = new_byte(NUMTOCENTRIES); - - if (gfp.free_format) { - for (var i = 1; i < NUMTOCENTRIES; ++i) - toc[i] = 0xff & (255 * i / 100); - } else { - xingSeekTable(gfc.VBR_seek_table, toc); - } - - // Start writing the tag after the zero frame - var streamIndex = gfc.sideinfo_len; - /** - * Note: Xing header specifies that Xing data goes in the ancillary data - * with NO ERROR PROTECTION. If error protecton in enabled, the Xing - * data still starts at the same offset, and now it is in sideinfo data - * block, and thus will not decode correctly by non-Xing tag aware - * players - */ - if (gfp.error_protection) - streamIndex -= 2; - - // Put Vbr tag - if (gfp.VBR == VbrMode.vbr_off) { - buffer[streamIndex++] = 0xff & VBRTag1.charAt(0); - buffer[streamIndex++] = 0xff & VBRTag1.charAt(1); - buffer[streamIndex++] = 0xff & VBRTag1.charAt(2); - buffer[streamIndex++] = 0xff & VBRTag1.charAt(3); - - } else { - buffer[streamIndex++] = 0xff & VBRTag0.charAt(0); - buffer[streamIndex++] = 0xff & VBRTag0.charAt(1); - buffer[streamIndex++] = 0xff & VBRTag0.charAt(2); - buffer[streamIndex++] = 0xff & VBRTag0.charAt(3); - } - - // Put header flags - createInteger(buffer, streamIndex, FRAMES_FLAG + BYTES_FLAG + TOC_FLAG - + VBR_SCALE_FLAG); - streamIndex += 4; - - // Put Total Number of frames - createInteger(buffer, streamIndex, gfc.VBR_seek_table.nVbrNumFrames); - streamIndex += 4; - - // Put total audio stream size, including Xing/LAME Header - var streamSize = (gfc.VBR_seek_table.nBytesWritten + gfc.VBR_seek_table.TotalFrameSize); - createInteger(buffer, streamIndex, 0 | streamSize); - streamIndex += 4; - - /* Put TOC */ - System.arraycopy(toc, 0, buffer, streamIndex, toc.length); - streamIndex += toc.length; - - if (gfp.error_protection) { - // (jo) error_protection: add crc16 information to header - bs.CRC_writeheader(gfc, buffer); - } - - // work out CRC so far: initially crc = 0 - var crc = 0x00; - for (var i = 0; i < streamIndex; i++) - crc = crcUpdateLookup(buffer[i], crc); - // Put LAME VBR info - streamIndex += putLameVBR(gfp, streamSize, buffer, streamIndex, crc); - - return gfc.VBR_seek_table.TotalFrameSize; - } - - /** - * Write final VBR tag to the file. - * - * @param gfp - * global flags - * @param stream - * stream to add the VBR tag to - * @return 0 (OK), -1 else - * @throws IOException - * I/O error - */ - this.putVbrTag = function (gfp, stream) { - var gfc = gfp.internal_flags; - - if (gfc.VBR_seek_table.pos <= 0) - return -1; - - // Seek to end of file - stream.seek(stream.length()); - - // Get file size, abort if file has zero length. - if (stream.length() == 0) - return -1; - - // The VBR tag may NOT be located at the beginning of the stream. If an - // ID3 version 2 tag was added, then it must be skipped to write the VBR - // tag data. - var id3v2TagSize = skipId3v2(stream); - - // Seek to the beginning of the stream - stream.seek(id3v2TagSize); - - var buffer = new_byte(MAXFRAMESIZE); - var bytes = getLameTagFrame(gfp, buffer); - if (bytes > buffer.length) { - return -1; - } - - if (bytes < 1) { - return 0; - } - - // Put it all to disk again - stream.write(buffer, 0, bytes); - // success - return 0; - } - -} - -function HuffCodeTab(len, max, tab, hl) { - this.xlen = len; - this.linmax = max; - this.table = tab; - this.hlen = hl; -} - -var Tables = {}; - - -Tables.t1HB = [ - 1, 1, - 1, 0 -]; - -Tables.t2HB = [ - 1, 2, 1, - 3, 1, 1, - 3, 2, 0 -]; - -Tables.t3HB = [ - 3, 2, 1, - 1, 1, 1, - 3, 2, 0 -]; - -Tables.t5HB = [ - 1, 2, 6, 5, - 3, 1, 4, 4, - 7, 5, 7, 1, - 6, 1, 1, 0 -]; - -Tables.t6HB = [ - 7, 3, 5, 1, - 6, 2, 3, 2, - 5, 4, 4, 1, - 3, 3, 2, 0 -]; - -Tables.t7HB = [ - 1, 2, 10, 19, 16, 10, - 3, 3, 7, 10, 5, 3, - 11, 4, 13, 17, 8, 4, - 12, 11, 18, 15, 11, 2, - 7, 6, 9, 14, 3, 1, - 6, 4, 5, 3, 2, 0 -]; - -Tables.t8HB = [ - 3, 4, 6, 18, 12, 5, - 5, 1, 2, 16, 9, 3, - 7, 3, 5, 14, 7, 3, - 19, 17, 15, 13, 10, 4, - 13, 5, 8, 11, 5, 1, - 12, 4, 4, 1, 1, 0 -]; - -Tables.t9HB = [ - 7, 5, 9, 14, 15, 7, - 6, 4, 5, 5, 6, 7, - 7, 6, 8, 8, 8, 5, - 15, 6, 9, 10, 5, 1, - 11, 7, 9, 6, 4, 1, - 14, 4, 6, 2, 6, 0 -]; - -Tables.t10HB = [ - 1, 2, 10, 23, 35, 30, 12, 17, - 3, 3, 8, 12, 18, 21, 12, 7, - 11, 9, 15, 21, 32, 40, 19, 6, - 14, 13, 22, 34, 46, 23, 18, 7, - 20, 19, 33, 47, 27, 22, 9, 3, - 31, 22, 41, 26, 21, 20, 5, 3, - 14, 13, 10, 11, 16, 6, 5, 1, - 9, 8, 7, 8, 4, 4, 2, 0 -]; - -Tables.t11HB = [ - 3, 4, 10, 24, 34, 33, 21, 15, - 5, 3, 4, 10, 32, 17, 11, 10, - 11, 7, 13, 18, 30, 31, 20, 5, - 25, 11, 19, 59, 27, 18, 12, 5, - 35, 33, 31, 58, 30, 16, 7, 5, - 28, 26, 32, 19, 17, 15, 8, 14, - 14, 12, 9, 13, 14, 9, 4, 1, - 11, 4, 6, 6, 6, 3, 2, 0 -]; - -Tables.t12HB = [ - 9, 6, 16, 33, 41, 39, 38, 26, - 7, 5, 6, 9, 23, 16, 26, 11, - 17, 7, 11, 14, 21, 30, 10, 7, - 17, 10, 15, 12, 18, 28, 14, 5, - 32, 13, 22, 19, 18, 16, 9, 5, - 40, 17, 31, 29, 17, 13, 4, 2, - 27, 12, 11, 15, 10, 7, 4, 1, - 27, 12, 8, 12, 6, 3, 1, 0 -]; - -Tables.t13HB = [ - 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, - 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, - 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, - 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, - 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, - 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, - 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, - 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, - 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, - 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, - 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, - 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, - 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, - 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, - 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, - 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1 -]; - -Tables.t15HB = [ - 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, - 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, - 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33, - 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, - 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, - 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38, - 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, - 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, - 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20, - 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, - 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, - 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11, - 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, - 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, - 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, - 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0 -]; - -Tables.t16HB = [ - 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, - 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, - 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16, - 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, - 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, - 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, - 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, - 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8, - 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, - 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, - 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, - 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, - 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, - 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, - 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0, - 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3 -]; - -Tables.t24HB = [ - 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, - 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, - 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18, - 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, - 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14, - 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, - 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, - 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, - 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, - 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, - 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, - 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, - 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, - 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, - 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, - 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3 -]; - -Tables.t32HB = [ - 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3, - 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4 -]; - -Tables.t33HB = [ - 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3, - 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4 -]; - -Tables.t1l = [ - 1, 4, - 3, 5 -]; - -Tables.t2l = [ - 1, 4, 7, - 4, 5, 7, - 6, 7, 8 -]; - -Tables.t3l = [ - 2, 3, 7, - 4, 4, 7, - 6, 7, 8 -]; - -Tables.t5l = [ - 1, 4, 7, 8, - 4, 5, 8, 9, - 7, 8, 9, 10, - 8, 8, 9, 10 -]; - -Tables.t6l = [ - 3, 4, 6, 8, - 4, 4, 6, 7, - 5, 6, 7, 8, - 7, 7, 8, 9 -]; - -Tables.t7l = [ - 1, 4, 7, 9, 9, 10, - 4, 6, 8, 9, 9, 10, - 7, 7, 9, 10, 10, 11, - 8, 9, 10, 11, 11, 11, - 8, 9, 10, 11, 11, 12, - 9, 10, 11, 12, 12, 12 -]; - -Tables.t8l = [ - 2, 4, 7, 9, 9, 10, - 4, 4, 6, 10, 10, 10, - 7, 6, 8, 10, 10, 11, - 9, 10, 10, 11, 11, 12, - 9, 9, 10, 11, 12, 12, - 10, 10, 11, 11, 13, 13 -]; - -Tables.t9l = [ - 3, 4, 6, 7, 9, 10, - 4, 5, 6, 7, 8, 10, - 5, 6, 7, 8, 9, 10, - 7, 7, 8, 9, 9, 10, - 8, 8, 9, 9, 10, 11, - 9, 9, 10, 10, 11, 11 -]; - -Tables.t10l = [ - 1, 4, 7, 9, 10, 10, 10, 11, - 4, 6, 8, 9, 10, 11, 10, 10, - 7, 8, 9, 10, 11, 12, 11, 11, - 8, 9, 10, 11, 12, 12, 11, 12, - 9, 10, 11, 12, 12, 12, 12, 12, - 10, 11, 12, 12, 13, 13, 12, 13, - 9, 10, 11, 12, 12, 12, 13, 13, - 10, 10, 11, 12, 12, 13, 13, 13 -]; - -Tables.t11l = [ - 2, 4, 6, 8, 9, 10, 9, 10, - 4, 5, 6, 8, 10, 10, 9, 10, - 6, 7, 8, 9, 10, 11, 10, 10, - 8, 8, 9, 11, 10, 12, 10, 11, - 9, 10, 10, 11, 11, 12, 11, 12, - 9, 10, 11, 12, 12, 13, 12, 13, - 9, 9, 9, 10, 11, 12, 12, 12, - 9, 9, 10, 11, 12, 12, 12, 12 -]; - -Tables.t12l = [ - 4, 4, 6, 8, 9, 10, 10, 10, - 4, 5, 6, 7, 9, 9, 10, 10, - 6, 6, 7, 8, 9, 10, 9, 10, - 7, 7, 8, 8, 9, 10, 10, 10, - 8, 8, 9, 9, 10, 10, 10, 11, - 9, 9, 10, 10, 10, 11, 10, 11, - 9, 9, 9, 10, 10, 11, 11, 12, - 10, 10, 10, 11, 11, 11, 11, 12 -]; - -Tables.t13l = [ - 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14, - 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14, - 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15, - 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15, - 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16, - 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16, - 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, - 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18, - 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, - 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17, - 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19, - 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18, - 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18, - 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18, - 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18, - 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18 -]; - -Tables.t15l = [ - 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14, - 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, - 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, - 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, - 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, - 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, - 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14, - 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, - 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14, - 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, - 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15, - 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, - 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15, - 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15 -]; - -Tables.t16_5l = [ - 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11, - 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11, - 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12, - 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13, - 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12, - 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13, - 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13, - 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13, - 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13, - 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14, - 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13, - 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14, - 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14, - 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14, - 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14, - 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12 -]; - -Tables.t16l = [ - 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10, - 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10, - 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11, - 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12, - 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11, - 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12, - 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12, - 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12, - 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12, - 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13, - 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12, - 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13, - 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13, - 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13, - 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13, - 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10 -]; - -Tables.t24l = [ - 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10, - 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10, - 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9, - 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9, - 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9, - 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9, - 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9, - 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10, - 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10, - 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, - 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10, - 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6 -]; - -Tables.t32l = [ - 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3, - 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4 -]; - -Tables.t33l = [ - 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3, - 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4 -]; - -Tables.ht = [ - /* xlen, linmax, table, hlen */ - new HuffCodeTab(0, 0, null, null), - new HuffCodeTab(2, 0, Tables.t1HB, Tables.t1l), - new HuffCodeTab(3, 0, Tables.t2HB, Tables.t2l), - new HuffCodeTab(3, 0, Tables.t3HB, Tables.t3l), - new HuffCodeTab(0, 0, null, null), /* Apparently not used */ - new HuffCodeTab(4, 0, Tables.t5HB, Tables.t5l), - new HuffCodeTab(4, 0, Tables.t6HB, Tables.t6l), - new HuffCodeTab(6, 0, Tables.t7HB, Tables.t7l), - new HuffCodeTab(6, 0, Tables.t8HB, Tables.t8l), - new HuffCodeTab(6, 0, Tables.t9HB, Tables.t9l), - new HuffCodeTab(8, 0, Tables.t10HB, Tables.t10l), - new HuffCodeTab(8, 0, Tables.t11HB, Tables.t11l), - new HuffCodeTab(8, 0, Tables.t12HB, Tables.t12l), - new HuffCodeTab(16, 0, Tables.t13HB, Tables.t13l), - new HuffCodeTab(0, 0, null, Tables.t16_5l), /* Apparently not used */ - new HuffCodeTab(16, 0, Tables.t15HB, Tables.t15l), - - new HuffCodeTab(1, 1, Tables.t16HB, Tables.t16l), - new HuffCodeTab(2, 3, Tables.t16HB, Tables.t16l), - new HuffCodeTab(3, 7, Tables.t16HB, Tables.t16l), - new HuffCodeTab(4, 15, Tables.t16HB, Tables.t16l), - new HuffCodeTab(6, 63, Tables.t16HB, Tables.t16l), - new HuffCodeTab(8, 255, Tables.t16HB, Tables.t16l), - new HuffCodeTab(10, 1023, Tables.t16HB, Tables.t16l), - new HuffCodeTab(13, 8191, Tables.t16HB, Tables.t16l), - - new HuffCodeTab(4, 15, Tables.t24HB, Tables.t24l), - new HuffCodeTab(5, 31, Tables.t24HB, Tables.t24l), - new HuffCodeTab(6, 63, Tables.t24HB, Tables.t24l), - new HuffCodeTab(7, 127, Tables.t24HB, Tables.t24l), - new HuffCodeTab(8, 255, Tables.t24HB, Tables.t24l), - new HuffCodeTab(9, 511, Tables.t24HB, Tables.t24l), - new HuffCodeTab(11, 2047, Tables.t24HB, Tables.t24l), - new HuffCodeTab(13, 8191, Tables.t24HB, Tables.t24l), - - new HuffCodeTab(0, 0, Tables.t32HB, Tables.t32l), - new HuffCodeTab(0, 0, Tables.t33HB, Tables.t33l), -]; - -/** - * - * for (i = 0; i < 16*16; i++) [ - * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i]; - * ] - * - * - */ -Tables.largetbl = [ - 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b, - 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a, - 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b, - 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a, - 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b, - 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009, - 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b, - 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009, - 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b, - 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009, - 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b, - 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009, - 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b, - 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009, - 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, - 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a, - 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, - 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a, - 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c, - 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a, - 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, - 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a, - 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c, - 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a, - 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, - 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a, - 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c, - 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a, - 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d, - 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a, - 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009, - 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006 -]; -/** - * - * for (i = 0; i < 3*3; i++) [ - * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i]; - * ] - * - * - */ -Tables.table23 = [ - 0x010002, 0x040003, 0x070007, - 0x040004, 0x050004, 0x070007, - 0x060006, 0x070007, 0x080008 -]; - -/** - * - * for (i = 0; i < 4*4; i++) [ - * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i]; - * ] - * - * - */ -Tables.table56 = [ - 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007, - 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009 -]; - -Tables.bitrate_table = [ - [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1], /* MPEG 2 */ - [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1], /* MPEG 1 */ - [0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1], /* MPEG 2.5 */ -]; - -/** - * MPEG 2, MPEG 1, MPEG 2.5. - */ -Tables.samplerate_table = [ - [22050, 24000, 16000, -1], - [44100, 48000, 32000, -1], - [11025, 12000, 8000, -1], -]; - -/** - * This is the scfsi_band table from 2.4.2.7 of the IS. - */ -Tables.scfsi_band = [0, 6, 11, 16, 21]; - -function MeanBits(meanBits) { - this.bits = meanBits; -} - -function VBRQuantize() { - var qupvt; - var tak; - - this.setModules = function (_qupvt, _tk) { - qupvt = _qupvt; - tak = _tk; - } - //TODO - -} - -//package mp3; - -function CalcNoiseResult() { - /** - * sum of quantization noise > masking - */ - this.over_noise = 0.; - /** - * sum of all quantization noise - */ - this.tot_noise = 0.; - /** - * max quantization noise - */ - this.max_noise = 0.; - /** - * number of quantization noise > masking - */ - this.over_count = 0; - /** - * SSD-like cost of distorted bands - */ - this.over_SSD = 0; - this.bits = 0; -} - - -function LameGlobalFlags() { - - this.class_id = 0; - - /* input description */ - - /** - * number of samples. default=-1 - */ - this.num_samples = 0; - /** - * input number of channels. default=2 - */ - this.num_channels = 0; - /** - * input_samp_rate in Hz. default=44.1 kHz - */ - this.in_samplerate = 0; - /** - * output_samp_rate. default: LAME picks best value at least not used for - * MP3 decoding: Remember 44.1 kHz MP3s and AC97 - */ - this.out_samplerate = 0; - /** - * scale input by this amount before encoding at least not used for MP3 - * decoding - */ - this.scale = 0.; - /** - * scale input of channel 0 (left) by this amount before encoding - */ - this.scale_left = 0.; - /** - * scale input of channel 1 (right) by this amount before encoding - */ - this.scale_right = 0.; - - /* general control params */ - /** - * collect data for a MP3 frame analyzer? - */ - this.analysis = false; - /** - * add Xing VBR tag? - */ - this.bWriteVbrTag = false; - - /** - * use lame/mpglib to convert mp3 to wav - */ - this.decode_only = false; - /** - * quality setting 0=best, 9=worst default=5 - */ - this.quality = 0; - /** - * see enum default = LAME picks best value - */ - this.mode = MPEGMode.STEREO; - /** - * force M/S mode. requires mode=1 - */ - this.force_ms = false; - /** - * use free format? default=0 - */ - this.free_format = false; - /** - * find the RG value? default=0 - */ - this.findReplayGain = false; - /** - * decode on the fly? default=0 - */ - this.decode_on_the_fly = false; - /** - * 1 (default) writes ID3 tags, 0 not - */ - this.write_id3tag_automatic = false; - - /* - * set either brate>0 or compression_ratio>0, LAME will compute the value of - * the variable not set. Default is compression_ratio = 11.025 - */ - /** - * bitrate - */ - this.brate = 0; - /** - * sizeof(wav file)/sizeof(mp3 file) - */ - this.compression_ratio = 0.; - - /* frame params */ - /** - * mark as copyright. default=0 - */ - this.copyright = 0; - /** - * mark as original. default=1 - */ - this.original = 0; - /** - * the MP3 'private extension' bit. Meaningless - */ - this.extension = 0; - /** - * Input PCM is emphased PCM (for instance from one of the rarely emphased - * CDs), it is STRONGLY not recommended to use this, because psycho does not - * take it into account, and last but not least many decoders don't care - * about these bits - */ - this.emphasis = 0; - /** - * use 2 bytes per frame for a CRC checksum. default=0 - */ - this.error_protection = 0; - /** - * enforce ISO spec as much as possible - */ - this.strict_ISO = false; - - /** - * use bit reservoir? - */ - this.disable_reservoir = false; - - /* quantization/noise shaping */ - this.quant_comp = 0; - this.quant_comp_short = 0; - this.experimentalY = false; - this.experimentalZ = 0; - this.exp_nspsytune = 0; - - this.preset = 0; - - /* VBR control */ - this.VBR = null; - /** - * Range [0,...,1[ - */ - this.VBR_q_frac = 0.; - /** - * Range [0,...,9] - */ - this.VBR_q = 0; - this.VBR_mean_bitrate_kbps = 0; - this.VBR_min_bitrate_kbps = 0; - this.VBR_max_bitrate_kbps = 0; - /** - * strictly enforce VBR_min_bitrate normaly, it will be violated for analog - * silence - */ - this.VBR_hard_min = 0; - - /* resampling and filtering */ - - /** - * freq in Hz. 0=lame choses. -1=no filter - */ - this.lowpassfreq = 0; - /** - * freq in Hz. 0=lame choses. -1=no filter - */ - this.highpassfreq = 0; - /** - * freq width of filter, in Hz (default=15%) - */ - this.lowpasswidth = 0; - /** - * freq width of filter, in Hz (default=15%) - */ - this.highpasswidth = 0; - - /* - * psycho acoustics and other arguments which you should not change unless - * you know what you are doing - */ - - this.maskingadjust = 0.; - this.maskingadjust_short = 0.; - /** - * only use ATH - */ - this.ATHonly = false; - /** - * only use ATH for short blocks - */ - this.ATHshort = false; - /** - * disable ATH - */ - this.noATH = false; - /** - * select ATH formula - */ - this.ATHtype = 0; - /** - * change ATH formula 4 shape - */ - this.ATHcurve = 0.; - /** - * lower ATH by this many db - */ - this.ATHlower = 0.; - /** - * select ATH auto-adjust scheme - */ - this.athaa_type = 0; - /** - * select ATH auto-adjust loudness calc - */ - this.athaa_loudapprox = 0; - /** - * dB, tune active region of auto-level - */ - this.athaa_sensitivity = 0.; - this.short_blocks = null; - /** - * use temporal masking effect - */ - this.useTemporal = false; - this.interChRatio = 0.; - /** - * Naoki's adjustment of Mid/Side maskings - */ - this.msfix = 0.; - - /** - * 0 off, 1 on - */ - this.tune = false; - /** - * used to pass values for debugging and stuff - */ - this.tune_value_a = 0.; - - /************************************************************************/ - /* internal variables, do not set... */ - /* provided because they may be of use to calling application */ - /************************************************************************/ - - /** - * 0=MPEG-2/2.5 1=MPEG-1 - */ - this.version = 0; - this.encoder_delay = 0; - /** - * number of samples of padding appended to input - */ - this.encoder_padding = 0; - this.framesize = 0; - /** - * number of frames encoded - */ - this.frameNum = 0; - /** - * is this struct owned by calling program or lame? - */ - this.lame_allocated_gfp = 0; - /**************************************************************************/ - /* more internal variables are stored in this structure: */ - /**************************************************************************/ - this.internal_flags = null; -} - - - -function ReplayGain() { - this.linprebuf = new_float(GainAnalysis.MAX_ORDER * 2); - /** - * left input samples, with pre-buffer - */ - this.linpre = 0; - this.lstepbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - /** - * left "first step" (i.e. post first filter) samples - */ - this.lstep = 0; - this.loutbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - /** - * left "out" (i.e. post second filter) samples - */ - this.lout = 0; - this.rinprebuf = new_float(GainAnalysis.MAX_ORDER * 2); - /** - * right input samples ... - */ - this.rinpre = 0; - this.rstepbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - this.rstep = 0; - this.routbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - this.rout = 0; - /** - * number of samples required to reach number of milliseconds required - * for RMS window - */ - this.sampleWindow = 0; - this.totsamp = 0; - this.lsum = 0.; - this.rsum = 0.; - this.freqindex = 0; - this.first = 0; - this.A = new_int(0 | (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB)); - this.B = new_int(0 | (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB)); - -} - - - -function CBRNewIterationLoop(_quantize) { - var quantize = _quantize; - this.quantize = quantize; - this.iteration_loop = function(gfp, pe, ms_ener_ratio, ratio) { - var gfc = gfp.internal_flags; - var l3_xmin = new_float(L3Side.SFBMAX); - var xrpow = new_float(576); - var targ_bits = new_int(2); - var mean_bits = 0, max_bits; - var l3_side = gfc.l3_side; - - var mb = new MeanBits(mean_bits); - this.quantize.rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - /* quantize! */ - for (var gr = 0; gr < gfc.mode_gr; gr++) { - - /* - * calculate needed bits - */ - max_bits = this.quantize.qupvt.on_pe(gfp, pe, targ_bits, mean_bits, - gr, gr); - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - this.quantize.ms_convert(gfc.l3_side, gr); - this.quantize.qupvt.reduce_side(targ_bits, ms_ener_ratio[gr], - mean_bits, max_bits); - } - - for (var ch = 0; ch < gfc.channels_out; ch++) { - var adjust, masking_lower_db; - var cod_info = l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = Math.pow(10.0, - masking_lower_db * 0.1); - - /* - * init_outer_loop sets up cod_info, scalefac and xrpow - */ - this.quantize.init_outer_loop(gfc, cod_info); - if (this.quantize.init_xrpow(gfc, cod_info, xrpow)) { - /* - * xr contains energy we will have to encode calculate the - * masking abilities find some good quantization in - * outer_loop - */ - this.quantize.qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin); - this.quantize.outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, - targ_bits[ch]); - } - - this.quantize.iteration_finish_one(gfc, gr, ch); - } /* for ch */ - } /* for gr */ - - this.quantize.rv.ResvFrameEnd(gfc, mean_bits); - } -} - - -/** - * ATH related stuff, if something new ATH related has to be added, please plug - * it here into the ATH. - */ -function ATH() { - /** - * Method for the auto adjustment. - */ - this.useAdjust = 0; - /** - * factor for tuning the (sample power) point below which adaptive threshold - * of hearing adjustment occurs - */ - this.aaSensitivityP = 0.; - /** - * Lowering based on peak volume, 1 = no lowering. - */ - this.adjust = 0.; - /** - * Limit for dynamic ATH adjust. - */ - this.adjustLimit = 0.; - /** - * Determined to lower x dB each second. - */ - this.decay = 0.; - /** - * Lowest ATH value. - */ - this.floor = 0.; - /** - * ATH for sfbs in long blocks. - */ - this.l = new_float(Encoder.SBMAX_l); - /** - * ATH for sfbs in short blocks. - */ - this.s = new_float(Encoder.SBMAX_s); - /** - * ATH for partitioned sfb21 in long blocks. - */ - this.psfb21 = new_float(Encoder.PSFB21); - /** - * ATH for partitioned sfb12 in short blocks. - */ - this.psfb12 = new_float(Encoder.PSFB12); - /** - * ATH for long block convolution bands. - */ - this.cb_l = new_float(Encoder.CBANDS); - /** - * ATH for short block convolution bands. - */ - this.cb_s = new_float(Encoder.CBANDS); - /** - * Equal loudness weights (based on ATH). - */ - this.eql_w = new_float(Encoder.BLKSIZE / 2); -} - -//package mp3; - -/** - * Layer III side information. - * - * @author Ken - * - */ - - - -function ScaleFac(arrL, arrS, arr21, arr12) { - - this.l = new_int(1 + Encoder.SBMAX_l); - this.s = new_int(1 + Encoder.SBMAX_s); - this.psfb21 = new_int(1 + Encoder.PSFB21); - this.psfb12 = new_int(1 + Encoder.PSFB12); - var l = this.l; - var s = this.s; - - if (arguments.length == 4) { - //public ScaleFac(final int[] arrL, final int[] arrS, final int[] arr21, - // final int[] arr12) { - this.arrL = arguments[0]; - this.arrS = arguments[1]; - this.arr21 = arguments[2]; - this.arr12 = arguments[3]; - - System.arraycopy(this.arrL, 0, l, 0, Math.min(this.arrL.length, this.l.length)); - System.arraycopy(this.arrS, 0, s, 0, Math.min(this.arrS.length, this.s.length)); - System.arraycopy(this.arr21, 0, this.psfb21, 0, Math.min(this.arr21.length, this.psfb21.length)); - System.arraycopy(this.arr12, 0, this.psfb12, 0, Math.min(this.arr12.length, this.psfb12.length)); - } -} - -/* - * quantize_pvt source file - * - * Copyright (c) 1999-2002 Takehiro Tominaga - * Copyright (c) 2000-2002 Robert Hegemann - * Copyright (c) 2001 Naoki Shibata - * Copyright (c) 2002-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: QuantizePVT.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */ - - -QuantizePVT.Q_MAX = (256 + 1); -QuantizePVT.Q_MAX2 = 116; -QuantizePVT.LARGE_BITS = 100000; -QuantizePVT.IXMAX_VAL = 8206; - -function QuantizePVT() { - - var tak = null; - var rv = null; - var psy = null; - - this.setModules = function (_tk, _rv, _psy) { - tak = _tk; - rv = _rv; - psy = _psy; - }; - - function POW20(x) { - return pow20[x + QuantizePVT.Q_MAX2]; - } - - this.IPOW20 = function (x) { - return ipow20[x]; - } - - /** - * smallest such that 1.0+DBL_EPSILON != 1.0 - */ - var DBL_EPSILON = 2.2204460492503131e-016; - - /** - * ix always <= 8191+15. see count_bits() - */ - var IXMAX_VAL = QuantizePVT.IXMAX_VAL; - - var PRECALC_SIZE = (IXMAX_VAL + 2); - - var Q_MAX = QuantizePVT.Q_MAX; - - - /** - * - * minimum possible number of - * -cod_info.global_gain + ((scalefac[] + (cod_info.preflag ? pretab[sfb] : 0)) - * << (cod_info.scalefac_scale + 1)) + cod_info.subblock_gain[cod_info.window[sfb]] * 8; - * - * for long block, 0+((15+3)<<2) = 18*4 = 72 - * for short block, 0+(15<<2)+7*8 = 15*4+56 = 116 - * - */ - var Q_MAX2 = QuantizePVT.Q_MAX2; - - var LARGE_BITS = QuantizePVT.LARGE_BITS; - - - /** - * Assuming dynamic range=96dB, this value should be 92 - */ - var NSATHSCALE = 100; - - /** - * The following table is used to implement the scalefactor partitioning for - * MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds - * to the way the tables are presented in the IS: - * - * [table_number][row_in_table][column of nr_of_sfb] - */ - this.nr_of_sfb_block = [ - [[6, 5, 5, 5], [9, 9, 9, 9], [6, 9, 9, 9]], - [[6, 5, 7, 3], [9, 9, 12, 6], [6, 9, 12, 6]], - [[11, 10, 0, 0], [18, 18, 0, 0], [15, 18, 0, 0]], - [[7, 7, 7, 0], [12, 12, 12, 0], [6, 15, 12, 0]], - [[6, 6, 6, 3], [12, 9, 9, 6], [6, 12, 9, 6]], - [[8, 8, 5, 0], [15, 12, 9, 0], [6, 18, 9, 0]]]; - - /** - * Table B.6: layer3 preemphasis - */ - var pretab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 2, 2, 3, 3, 3, 2, 0]; - this.pretab = pretab; - - /** - * Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor - * bands.
- * Index into this using a method such as:
- * idx = fr_ps.header.sampling_frequency + (fr_ps.header.version * 3) - */ - this.sfBandIndex = [ - // Table B.2.b: 22.05 kHz - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192] - , [0, 0, 0, 0, 0, 0, 0] // sfb21 pseudo sub bands - , [0, 0, 0, 0, 0, 0, 0] // sfb12 pseudo sub bands - ), - /* Table B.2.c: 24 kHz */ /* docs: 332. mpg123(broken): 330 */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 332, 394, 464, - 540, 576], - [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.2.a: 16 kHz */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.8.b: 44.1 kHz */ - new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, - 576], - [0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.8.c: 48 kHz */ - new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, - 576], - [0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.8.a: 32 kHz */ - new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, - 576], - [0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 11.025 kHz */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, - 402 / 3, 522 / 3, 576 / 3] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 12 kHz */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, - 402 / 3, 522 / 3, 576 / 3] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 8 kHz */ - new ScaleFac([0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, - 572, 574, 576], - [0 / 3, 24 / 3, 48 / 3, 72 / 3, 108 / 3, 156 / 3, 216 / 3, 288 / 3, 372 / 3, 480 / 3, 486 / 3, - 492 / 3, 498 / 3, 576 / 3] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ) - ]; - - var pow20 = new_float(Q_MAX + Q_MAX2 + 1); - var ipow20 = new_float(Q_MAX); - var pow43 = new_float(PRECALC_SIZE); - - var adj43 = new_float(PRECALC_SIZE); - this.adj43 = adj43; - - /** - *
-     * compute the ATH for each scalefactor band cd range: 0..96db
-     *
-     * Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest =
-     * -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5
-     * -9db 0db
-     *
-     * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1
-     * sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db
-     *
-     * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1
-     * sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db
-     *
-     *
-     * MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at
-     * 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic
-     * range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 =
-     * -11 - 96 = -107db = ATH at 3.3kHz.
-     *
-     * ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH =
-     * ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener)
-     * 
- */ - function ATHmdct(gfp, f) { - var ath = psy.ATHformula(f, gfp); - - ath -= NSATHSCALE; - - /* modify the MDCT scaling for the ATH and convert to energy */ - ath = Math.pow(10.0, ath / 10.0 + gfp.ATHlower); - return ath; - } - - function compute_ath(gfp) { - var ATH_l = gfp.internal_flags.ATH.l; - var ATH_psfb21 = gfp.internal_flags.ATH.psfb21; - var ATH_s = gfp.internal_flags.ATH.s; - var ATH_psfb12 = gfp.internal_flags.ATH.psfb12; - var gfc = gfp.internal_flags; - var samp_freq = gfp.out_samplerate; - - for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - var start = gfc.scalefac_band.l[sfb]; - var end = gfc.scalefac_band.l[sfb + 1]; - ATH_l[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 576); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_l[sfb] = Math.min(ATH_l[sfb], ATH_f); - } - } - - for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) { - var start = gfc.scalefac_band.psfb21[sfb]; - var end = gfc.scalefac_band.psfb21[sfb + 1]; - ATH_psfb21[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 576); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_psfb21[sfb] = Math.min(ATH_psfb21[sfb], ATH_f); - } - } - - for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) { - var start = gfc.scalefac_band.s[sfb]; - var end = gfc.scalefac_band.s[sfb + 1]; - ATH_s[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 192); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_s[sfb] = Math.min(ATH_s[sfb], ATH_f); - } - ATH_s[sfb] *= (gfc.scalefac_band.s[sfb + 1] - gfc.scalefac_band.s[sfb]); - } - - for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) { - var start = gfc.scalefac_band.psfb12[sfb]; - var end = gfc.scalefac_band.psfb12[sfb + 1]; - ATH_psfb12[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 192); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_psfb12[sfb] = Math.min(ATH_psfb12[sfb], ATH_f); - } - /* not sure about the following */ - ATH_psfb12[sfb] *= (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]); - } - - /* - * no-ATH mode: reduce ATH to -200 dB - */ - if (gfp.noATH) { - for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - ATH_l[sfb] = 1E-20; - } - for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) { - ATH_psfb21[sfb] = 1E-20; - } - for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) { - ATH_s[sfb] = 1E-20; - } - for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) { - ATH_psfb12[sfb] = 1E-20; - } - } - - /* - * work in progress, don't rely on it too much - */ - gfc.ATH.floor = 10. * Math.log10(ATHmdct(gfp, -1.)); - } - - /** - * initialization for iteration_loop - */ - this.iteration_init = function (gfp) { - var gfc = gfp.internal_flags; - var l3_side = gfc.l3_side; - var i; - - if (gfc.iteration_init_init == 0) { - gfc.iteration_init_init = 1; - - l3_side.main_data_begin = 0; - compute_ath(gfp); - - pow43[0] = 0.0; - for (i = 1; i < PRECALC_SIZE; i++) - pow43[i] = Math.pow(i, 4.0 / 3.0); - - for (i = 0; i < PRECALC_SIZE - 1; i++) - adj43[i] = ((i + 1) - Math.pow( - 0.5 * (pow43[i] + pow43[i + 1]), 0.75)); - adj43[i] = 0.5; - - for (i = 0; i < Q_MAX; i++) - ipow20[i] = Math.pow(2.0, (i - 210) * -0.1875); - for (i = 0; i <= Q_MAX + Q_MAX2; i++) - pow20[i] = Math.pow(2.0, (i - 210 - Q_MAX2) * 0.25); - - tak.huffman_init(gfc); - - { - var bass, alto, treble, sfb21; - - i = (gfp.exp_nspsytune >> 2) & 63; - if (i >= 32) - i -= 64; - bass = Math.pow(10, i / 4.0 / 10.0); - - i = (gfp.exp_nspsytune >> 8) & 63; - if (i >= 32) - i -= 64; - alto = Math.pow(10, i / 4.0 / 10.0); - - i = (gfp.exp_nspsytune >> 14) & 63; - if (i >= 32) - i -= 64; - treble = Math.pow(10, i / 4.0 / 10.0); - - /* - * to be compatible with Naoki's original code, the next 6 bits - * define only the amount of changing treble for sfb21 - */ - i = (gfp.exp_nspsytune >> 20) & 63; - if (i >= 32) - i -= 64; - sfb21 = treble * Math.pow(10, i / 4.0 / 10.0); - for (i = 0; i < Encoder.SBMAX_l; i++) { - var f; - if (i <= 6) - f = bass; - else if (i <= 13) - f = alto; - else if (i <= 20) - f = treble; - else - f = sfb21; - - gfc.nsPsy.longfact[i] = f; - } - for (i = 0; i < Encoder.SBMAX_s; i++) { - var f; - if (i <= 5) - f = bass; - else if (i <= 10) - f = alto; - else if (i <= 11) - f = treble; - else - f = sfb21; - - gfc.nsPsy.shortfact[i] = f; - } - } - } - } - - /** - * allocate bits among 2 channels based on PE
- * mt 6/99
- * bugfixes rh 8/01: often allocated more than the allowed 4095 bits - */ - this.on_pe = function (gfp, pe, - targ_bits, mean_bits, gr, cbr) { - var gfc = gfp.internal_flags; - var tbits = 0, bits; - var add_bits = new_int(2); - var ch; - - /* allocate targ_bits for granule */ - var mb = new MeanBits(tbits); - var extra_bits = rv.ResvMaxBits(gfp, mean_bits, mb, cbr); - tbits = mb.bits; - /* maximum allowed bits for this granule */ - var max_bits = tbits + extra_bits; - if (max_bits > LameInternalFlags.MAX_BITS_PER_GRANULE) { - // hard limit per granule - max_bits = LameInternalFlags.MAX_BITS_PER_GRANULE; - } - for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) { - /****************************************************************** - * allocate bits for each channel - ******************************************************************/ - targ_bits[ch] = Math.min(LameInternalFlags.MAX_BITS_PER_CHANNEL, - tbits / gfc.channels_out); - - add_bits[ch] = 0 | (targ_bits[ch] * pe[gr][ch] / 700.0 - targ_bits[ch]); - - /* at most increase bits by 1.5*average */ - if (add_bits[ch] > mean_bits * 3 / 4) - add_bits[ch] = mean_bits * 3 / 4; - if (add_bits[ch] < 0) - add_bits[ch] = 0; - - if (add_bits[ch] + targ_bits[ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) - add_bits[ch] = Math.max(0, - LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[ch]); - - bits += add_bits[ch]; - } - if (bits > extra_bits) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - add_bits[ch] = extra_bits * add_bits[ch] / bits; - } - } - - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[ch] += add_bits[ch]; - extra_bits -= add_bits[ch]; - } - - for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) { - bits += targ_bits[ch]; - } - if (bits > LameInternalFlags.MAX_BITS_PER_GRANULE) { - var sum = 0; - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE; - targ_bits[ch] /= bits; - sum += targ_bits[ch]; - } - } - - return max_bits; - } - - this.reduce_side = function (targ_bits, ms_ener_ratio, mean_bits, max_bits) { - - /* - * ms_ener_ratio = 0: allocate 66/33 mid/side fac=.33 ms_ener_ratio =.5: - * allocate 50/50 mid/side fac= 0 - */ - /* 75/25 split is fac=.5 */ - var fac = .33 * (.5 - ms_ener_ratio) / .5; - if (fac < 0) - fac = 0; - if (fac > .5) - fac = .5; - - /* number of bits to move from side channel to mid channel */ - /* move_bits = fac*targ_bits[1]; */ - var move_bits = 0 | (fac * .5 * (targ_bits[0] + targ_bits[1])); - - if (move_bits > LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]) { - move_bits = LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]; - } - if (move_bits < 0) - move_bits = 0; - - if (targ_bits[1] >= 125) { - /* dont reduce side channel below 125 bits */ - if (targ_bits[1] - move_bits > 125) { - - /* if mid channel already has 2x more than average, dont bother */ - /* mean_bits = bits per granule (for both channels) */ - if (targ_bits[0] < mean_bits) - targ_bits[0] += move_bits; - targ_bits[1] -= move_bits; - } else { - targ_bits[0] += targ_bits[1] - 125; - targ_bits[1] = 125; - } - } - - move_bits = targ_bits[0] + targ_bits[1]; - if (move_bits > max_bits) { - targ_bits[0] = (max_bits * targ_bits[0]) / move_bits; - targ_bits[1] = (max_bits * targ_bits[1]) / move_bits; - } - }; - - /** - * Robert Hegemann 2001-04-27: - * this adjusts the ATH, keeping the original noise floor - * affects the higher frequencies more than the lower ones - */ - this.athAdjust = function (a, x, athFloor) { - /* - * work in progress - */ - var o = 90.30873362; - var p = 94.82444863; - var u = Util.FAST_LOG10_X(x, 10.0); - var v = a * a; - var w = 0.0; - u -= athFloor; - /* undo scaling */ - if (v > 1E-20) - w = 1. + Util.FAST_LOG10_X(v, 10.0 / o); - if (w < 0) - w = 0.; - u *= w; - u += athFloor + o - p; - /* redo scaling */ - - return Math.pow(10., 0.1 * u); - }; - - /** - * Calculate the allowed distortion for each scalefactor band, as determined - * by the psychoacoustic model. xmin(sb) = ratio(sb) * en(sb) / bw(sb) - * - * returns number of sfb's with energy > ATH - */ - this.calc_xmin = function (gfp, ratio, cod_info, pxmin) { - var pxminPos = 0; - var gfc = gfp.internal_flags; - var gsfb, j = 0, ath_over = 0; - var ATH = gfc.ATH; - var xr = cod_info.xr; - var enable_athaa_fix = (gfp.VBR == VbrMode.vbr_mtrh) ? 1 : 0; - var masking_lower = gfc.masking_lower; - - if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) { - /* was already done in PSY-Model */ - masking_lower = 1.0; - } - - for (gsfb = 0; gsfb < cod_info.psy_lmax; gsfb++) { - var en0, xmin; - var rh1, rh2; - var width, l; - - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - xmin = athAdjust(ATH.adjust, ATH.l[gsfb], ATH.floor); - else - xmin = ATH.adjust * ATH.l[gsfb]; - - width = cod_info.width[gsfb]; - rh1 = xmin / width; - rh2 = DBL_EPSILON; - l = width >> 1; - en0 = 0.0; - do { - var xa, xb; - xa = xr[j] * xr[j]; - en0 += xa; - rh2 += (xa < rh1) ? xa : rh1; - j++; - xb = xr[j] * xr[j]; - en0 += xb; - rh2 += (xb < rh1) ? xb : rh1; - j++; - } while (--l > 0); - if (en0 > xmin) - ath_over++; - - if (gsfb == Encoder.SBPSY_l) { - var x = xmin * gfc.nsPsy.longfact[gsfb]; - if (rh2 < x) { - rh2 = x; - } - } - if (enable_athaa_fix != 0) { - xmin = rh2; - } - if (!gfp.ATHonly) { - var e = ratio.en.l[gsfb]; - if (e > 0.0) { - var x; - x = en0 * ratio.thm.l[gsfb] * masking_lower / e; - if (enable_athaa_fix != 0) - x *= gfc.nsPsy.longfact[gsfb]; - if (xmin < x) - xmin = x; - } - } - if (enable_athaa_fix != 0) - pxmin[pxminPos++] = xmin; - else - pxmin[pxminPos++] = xmin * gfc.nsPsy.longfact[gsfb]; - } - /* end of long block loop */ - - /* use this function to determine the highest non-zero coeff */ - var max_nonzero = 575; - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type, but not SHORT - var k = 576; - while (k-- != 0 && BitStream.EQ(xr[k], 0)) { - max_nonzero = k; - } - } - cod_info.max_nonzero_coeff = max_nonzero; - - for (var sfb = cod_info.sfb_smin; gsfb < cod_info.psymax; sfb++, gsfb += 3) { - var width, b; - var tmpATH; - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - tmpATH = athAdjust(ATH.adjust, ATH.s[sfb], ATH.floor); - else - tmpATH = ATH.adjust * ATH.s[sfb]; - - width = cod_info.width[gsfb]; - for (b = 0; b < 3; b++) { - var en0 = 0.0, xmin; - var rh1, rh2; - var l = width >> 1; - - rh1 = tmpATH / width; - rh2 = DBL_EPSILON; - do { - var xa, xb; - xa = xr[j] * xr[j]; - en0 += xa; - rh2 += (xa < rh1) ? xa : rh1; - j++; - xb = xr[j] * xr[j]; - en0 += xb; - rh2 += (xb < rh1) ? xb : rh1; - j++; - } while (--l > 0); - if (en0 > tmpATH) - ath_over++; - if (sfb == Encoder.SBPSY_s) { - var x = tmpATH * gfc.nsPsy.shortfact[sfb]; - if (rh2 < x) { - rh2 = x; - } - } - if (enable_athaa_fix != 0) - xmin = rh2; - else - xmin = tmpATH; - - if (!gfp.ATHonly && !gfp.ATHshort) { - var e = ratio.en.s[sfb][b]; - if (e > 0.0) { - var x; - x = en0 * ratio.thm.s[sfb][b] * masking_lower / e; - if (enable_athaa_fix != 0) - x *= gfc.nsPsy.shortfact[sfb]; - if (xmin < x) - xmin = x; - } - } - if (enable_athaa_fix != 0) - pxmin[pxminPos++] = xmin; - else - pxmin[pxminPos++] = xmin * gfc.nsPsy.shortfact[sfb]; - } - /* b */ - if (gfp.useTemporal) { - if (pxmin[pxminPos - 3] > pxmin[pxminPos - 3 + 1]) - pxmin[pxminPos - 3 + 1] += (pxmin[pxminPos - 3] - pxmin[pxminPos - 3 + 1]) - * gfc.decay; - if (pxmin[pxminPos - 3 + 1] > pxmin[pxminPos - 3 + 2]) - pxmin[pxminPos - 3 + 2] += (pxmin[pxminPos - 3 + 1] - pxmin[pxminPos - 3 + 2]) - * gfc.decay; - } - } - /* end of short block sfb loop */ - - return ath_over; - }; - - function StartLine(j) { - this.s = j; - } - - this.calc_noise_core = function (cod_info, startline, l, step) { - var noise = 0; - var j = startline.s; - var ix = cod_info.l3_enc; - - if (j > cod_info.count1) { - while ((l--) != 0) { - var temp; - temp = cod_info.xr[j]; - j++; - noise += temp * temp; - temp = cod_info.xr[j]; - j++; - noise += temp * temp; - } - } else if (j > cod_info.big_values) { - var ix01 = new_float(2); - ix01[0] = 0; - ix01[1] = step; - while ((l--) != 0) { - var temp; - temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]]; - j++; - noise += temp * temp; - temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]]; - j++; - noise += temp * temp; - } - } else { - while ((l--) != 0) { - var temp; - temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step; - j++; - noise += temp * temp; - temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step; - j++; - noise += temp * temp; - } - } - - startline.s = j; - return noise; - } - - /** - *
-     * -oo dB  =>  -1.00
-     * - 6 dB  =>  -0.97
-     * - 3 dB  =>  -0.80
-     * - 2 dB  =>  -0.64
-     * - 1 dB  =>  -0.38
-     *   0 dB  =>   0.00
-     * + 1 dB  =>  +0.49
-     * + 2 dB  =>  +1.06
-     * + 3 dB  =>  +1.68
-     * + 6 dB  =>  +3.69
-     * +10 dB  =>  +6.45
-     * 
- */ - this.calc_noise = function (cod_info, l3_xmin, distort, res, prev_noise) { - var distortPos = 0; - var l3_xminPos = 0; - var sfb, l, over = 0; - var over_noise_db = 0; - /* 0 dB relative to masking */ - var tot_noise_db = 0; - /* -200 dB relative to masking */ - var max_noise = -20.0; - var j = 0; - var scalefac = cod_info.scalefac; - var scalefacPos = 0; - - res.over_SSD = 0; - - for (sfb = 0; sfb < cod_info.psymax; sfb++) { - var s = cod_info.global_gain - - (((scalefac[scalefacPos++]) + (cod_info.preflag != 0 ? pretab[sfb] - : 0)) << (cod_info.scalefac_scale + 1)) - - cod_info.subblock_gain[cod_info.window[sfb]] * 8; - var noise = 0.0; - - if (prev_noise != null && (prev_noise.step[sfb] == s)) { - - /* use previously computed values */ - noise = prev_noise.noise[sfb]; - j += cod_info.width[sfb]; - distort[distortPos++] = noise / l3_xmin[l3_xminPos++]; - - noise = prev_noise.noise_log[sfb]; - - } else { - var step = POW20(s); - l = cod_info.width[sfb] >> 1; - - if ((j + cod_info.width[sfb]) > cod_info.max_nonzero_coeff) { - var usefullsize; - usefullsize = cod_info.max_nonzero_coeff - j + 1; - - if (usefullsize > 0) - l = usefullsize >> 1; - else - l = 0; - } - - var sl = new StartLine(j); - noise = this.calc_noise_core(cod_info, sl, l, step); - j = sl.s; - - if (prev_noise != null) { - /* save noise values */ - prev_noise.step[sfb] = s; - prev_noise.noise[sfb] = noise; - } - - noise = distort[distortPos++] = noise / l3_xmin[l3_xminPos++]; - - /* multiplying here is adding in dB, but can overflow */ - noise = Util.FAST_LOG10(Math.max(noise, 1E-20)); - - if (prev_noise != null) { - /* save noise values */ - prev_noise.noise_log[sfb] = noise; - } - } - - if (prev_noise != null) { - /* save noise values */ - prev_noise.global_gain = cod_info.global_gain; - } - - tot_noise_db += noise; - - if (noise > 0.0) { - var tmp; - - tmp = Math.max(0 | (noise * 10 + .5), 1); - res.over_SSD += tmp * tmp; - - over++; - /* multiplying here is adding in dB -but can overflow */ - /* over_noise *= noise; */ - over_noise_db += noise; - } - max_noise = Math.max(max_noise, noise); - - } - - res.over_count = over; - res.tot_noise = tot_noise_db; - res.over_noise = over_noise_db; - res.max_noise = max_noise; - - return over; - } - - /** - * updates plotting data - * - * Mark Taylor 2000-??-?? - * - * Robert Hegemann: moved noise/distortion calc into it - */ - this.set_pinfo = function (gfp, cod_info, ratio, gr, ch) { - var gfc = gfp.internal_flags; - var sfb, sfb2; - var l; - var en0, en1; - var ifqstep = (cod_info.scalefac_scale == 0) ? .5 : 1.0; - var scalefac = cod_info.scalefac; - - var l3_xmin = new_float(L3Side.SFBMAX); - var xfsf = new_float(L3Side.SFBMAX); - var noise = new CalcNoiseResult(); - - calc_xmin(gfp, ratio, cod_info, l3_xmin); - calc_noise(cod_info, l3_xmin, xfsf, noise, null); - - var j = 0; - sfb2 = cod_info.sfb_lmax; - if (cod_info.block_type != Encoder.SHORT_TYPE - && 0 == cod_info.mixed_block_flag) - sfb2 = 22; - for (sfb = 0; sfb < sfb2; sfb++) { - var start = gfc.scalefac_band.l[sfb]; - var end = gfc.scalefac_band.l[sfb + 1]; - var bw = end - start; - for (en0 = 0.0; j < end; j++) - en0 += cod_info.xr[j] * cod_info.xr[j]; - en0 /= bw; - /* convert to MDCT units */ - /* scaling so it shows up on FFT plot */ - en1 = 1e15; - gfc.pinfo.en[gr][ch][sfb] = en1 * en0; - gfc.pinfo.xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw; - - if (ratio.en.l[sfb] > 0 && !gfp.ATHonly) - en0 = en0 / ratio.en.l[sfb]; - else - en0 = 0.0; - - gfc.pinfo.thr[gr][ch][sfb] = en1 - * Math.max(en0 * ratio.thm.l[sfb], gfc.ATH.l[sfb]); - - /* there is no scalefactor bands >= SBPSY_l */ - gfc.pinfo.LAMEsfb[gr][ch][sfb] = 0; - if (cod_info.preflag != 0 && sfb >= 11) - gfc.pinfo.LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb]; - - if (sfb < Encoder.SBPSY_l) { - /* scfsi should be decoded by caller side */ - gfc.pinfo.LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb]; - } - } - /* for sfb */ - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - sfb2 = sfb; - for (sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - var start = gfc.scalefac_band.s[sfb]; - var end = gfc.scalefac_band.s[sfb + 1]; - var bw = end - start; - for (var i = 0; i < 3; i++) { - for (en0 = 0.0, l = start; l < end; l++) { - en0 += cod_info.xr[j] * cod_info.xr[j]; - j++; - } - en0 = Math.max(en0 / bw, 1e-20); - /* convert to MDCT units */ - /* scaling so it shows up on FFT plot */ - en1 = 1e15; - - gfc.pinfo.en_s[gr][ch][3 * sfb + i] = en1 * en0; - gfc.pinfo.xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2] - * xfsf[sfb2] / bw; - if (ratio.en.s[sfb][i] > 0) - en0 = en0 / ratio.en.s[sfb][i]; - else - en0 = 0.0; - if (gfp.ATHonly || gfp.ATHshort) - en0 = 0; - - gfc.pinfo.thr_s[gr][ch][3 * sfb + i] = en1 - * Math.max(en0 * ratio.thm.s[sfb][i], - gfc.ATH.s[sfb]); - - /* there is no scalefactor bands >= SBPSY_s */ - gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0 - * cod_info.subblock_gain[i]; - if (sfb < Encoder.SBPSY_s) { - gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep - * scalefac[sfb2]; - } - sfb2++; - } - } - } - /* block type short */ - gfc.pinfo.LAMEqss[gr][ch] = cod_info.global_gain; - gfc.pinfo.LAMEmainbits[gr][ch] = cod_info.part2_3_length - + cod_info.part2_length; - gfc.pinfo.LAMEsfbits[gr][ch] = cod_info.part2_length; - - gfc.pinfo.over[gr][ch] = noise.over_count; - gfc.pinfo.max_noise[gr][ch] = noise.max_noise * 10.0; - gfc.pinfo.over_noise[gr][ch] = noise.over_noise * 10.0; - gfc.pinfo.tot_noise[gr][ch] = noise.tot_noise * 10.0; - gfc.pinfo.over_SSD[gr][ch] = noise.over_SSD; - } - - /** - * updates plotting data for a whole frame - * - * Robert Hegemann 2000-10-21 - */ - function set_frame_pinfo(gfp, ratio) { - var gfc = gfp.internal_flags; - - gfc.masking_lower = 1.0; - - /* - * for every granule and channel patch l3_enc and set info - */ - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - var cod_info = gfc.l3_side.tt[gr][ch]; - var scalefac_sav = new_int(L3Side.SFBMAX); - System.arraycopy(cod_info.scalefac, 0, scalefac_sav, 0, - scalefac_sav.length); - - /* - * reconstruct the scalefactors in case SCFSI was used - */ - if (gr == 1) { - var sfb; - for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) { - if (cod_info.scalefac[sfb] < 0) /* scfsi */ - cod_info.scalefac[sfb] = gfc.l3_side.tt[0][ch].scalefac[sfb]; - } - } - - set_pinfo(gfp, cod_info, ratio[gr][ch], gr, ch); - System.arraycopy(scalefac_sav, 0, cod_info.scalefac, 0, - scalefac_sav.length); - } - /* for ch */ - } - /* for gr */ - } - -} - - -function CalcNoiseData() { - this.global_gain = 0; - this.sfb_count1 = 0; - this.step = new_int(39); - this.noise = new_float(39); - this.noise_log = new_float(39); -} - -//package mp3; - - -function GrInfo() { - //float xr[] = new float[576]; - this.xr = new_float(576); - //int l3_enc[] = new int[576]; - this.l3_enc = new_int(576); - //int scalefac[] = new int[L3Side.SFBMAX]; - this.scalefac = new_int(L3Side.SFBMAX); - this.xrpow_max = 0.; - - this.part2_3_length = 0; - this.big_values = 0; - this.count1 = 0; - this.global_gain = 0; - this.scalefac_compress = 0; - this.block_type = 0; - this.mixed_block_flag = 0; - this.table_select = new_int(3); - this.subblock_gain = new_int(3 + 1); - this.region0_count = 0; - this.region1_count = 0; - this.preflag = 0; - this.scalefac_scale = 0; - this.count1table_select = 0; - - this.part2_length = 0; - this.sfb_lmax = 0; - this.sfb_smin = 0; - this.psy_lmax = 0; - this.sfbmax = 0; - this.psymax = 0; - this.sfbdivide = 0; - this.width = new_int(L3Side.SFBMAX); - this.window = new_int(L3Side.SFBMAX); - this.count1bits = 0; - /** - * added for LSF - */ - this.sfb_partition_table = null; - this.slen = new_int(4); - - this.max_nonzero_coeff = 0; - - var self = this; - function clone_int(array) { - return new Int32Array(array); - } - function clone_float(array) { - return new Float32Array(array); - } - this.assign = function (other) { - self.xr = clone_float(other.xr); //.slice(0); //clone(); - self.l3_enc = clone_int(other.l3_enc); //.slice(0); //clone(); - self.scalefac = clone_int(other.scalefac);//.slice(0); //clone(); - self.xrpow_max = other.xrpow_max; - - self.part2_3_length = other.part2_3_length; - self.big_values = other.big_values; - self.count1 = other.count1; - self.global_gain = other.global_gain; - self.scalefac_compress = other.scalefac_compress; - self.block_type = other.block_type; - self.mixed_block_flag = other.mixed_block_flag; - self.table_select = clone_int(other.table_select);//.slice(0); //clone(); - self.subblock_gain = clone_int(other.subblock_gain); //.slice(0); //.clone(); - self.region0_count = other.region0_count; - self.region1_count = other.region1_count; - self.preflag = other.preflag; - self.scalefac_scale = other.scalefac_scale; - self.count1table_select = other.count1table_select; - - self.part2_length = other.part2_length; - self.sfb_lmax = other.sfb_lmax; - self.sfb_smin = other.sfb_smin; - self.psy_lmax = other.psy_lmax; - self.sfbmax = other.sfbmax; - self.psymax = other.psymax; - self.sfbdivide = other.sfbdivide; - self.width = clone_int(other.width); //.slice(0); //.clone(); - self.window = clone_int(other.window); //.slice(0); //.clone(); - self.count1bits = other.count1bits; - - self.sfb_partition_table = other.sfb_partition_table.slice(0); //.clone(); - self.slen = clone_int(other.slen); //.slice(0); //.clone(); - self.max_nonzero_coeff = other.max_nonzero_coeff; - } -} - - -var L3Side = {}; - - - /** - * max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8) - */ -L3Side.SFBMAX = (Encoder.SBMAX_s * 3); - -/* - * MP3 quantization - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 1999-2003 Takehiro Tominaga - * Copyright (c) 2000-2007 Robert Hegemann - * Copyright (c) 2001-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Quantize.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -//import java.util.Arrays; - - -function Quantize() { - var bs; - this.rv = null; - var rv; - this.qupvt = null; - var qupvt; - - var vbr = new VBRQuantize(); - var tk; - - this.setModules = function (_bs, _rv, _qupvt, _tk) { - bs = _bs; - rv = _rv; - this.rv = _rv; - qupvt = _qupvt; - this.qupvt = _qupvt; - tk = _tk; - vbr.setModules(qupvt, tk); - } - - /** - * convert from L/R <. Mid/Side - */ - this.ms_convert = function (l3_side, gr) { - for (var i = 0; i < 576; ++i) { - var l = l3_side.tt[gr][0].xr[i]; - var r = l3_side.tt[gr][1].xr[i]; - l3_side.tt[gr][0].xr[i] = (l + r) * (Util.SQRT2 * 0.5); - l3_side.tt[gr][1].xr[i] = (l - r) * (Util.SQRT2 * 0.5); - } - }; - - /** - * mt 6/99 - * - * initializes cod_info, scalefac and xrpow - * - * returns 0 if all energies in xr are zero, else 1 - */ - function init_xrpow_core(cod_info, xrpow, upper, sum) { - sum = 0; - for (var i = 0; i <= upper; ++i) { - var tmp = Math.abs(cod_info.xr[i]); - sum += tmp; - xrpow[i] = Math.sqrt(tmp * Math.sqrt(tmp)); - - if (xrpow[i] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[i]; - } - return sum; - } - - this.init_xrpow = function (gfc, cod_info, xrpow) { - var sum = 0; - var upper = 0 | cod_info.max_nonzero_coeff; - - cod_info.xrpow_max = 0; - - /* - * check if there is some energy we have to quantize and calculate xrpow - * matching our fresh scalefactors - */ - - Arrays.fill(xrpow, upper, 576, 0); - - sum = init_xrpow_core(cod_info, xrpow, upper, sum); - - /* - * return 1 if we have something to quantize, else 0 - */ - if (sum > 1E-20) { - var j = 0; - if ((gfc.substep_shaping & 2) != 0) - j = 1; - - for (var i = 0; i < cod_info.psymax; i++) - gfc.pseudohalf[i] = j; - - return true; - } - - Arrays.fill(cod_info.l3_enc, 0, 576, 0); - return false; - } - - /** - * Gabriel Bouvigne feb/apr 2003
- * Analog silence detection in partitionned sfb21 or sfb12 for short blocks - * - * From top to bottom of sfb, changes to 0 coeffs which are below ath. It - * stops on the first coeff higher than ath. - */ - function psfb21_analogsilence(gfc, cod_info) { - var ath = gfc.ATH; - var xr = cod_info.xr; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - /* NORM, START or STOP type, but not SHORT blocks */ - var stop = false; - for (var gsfb = Encoder.PSFB21 - 1; gsfb >= 0 && !stop; gsfb--) { - var start = gfc.scalefac_band.psfb21[gsfb]; - var end = gfc.scalefac_band.psfb21[gsfb + 1]; - var ath21 = qupvt.athAdjust(ath.adjust, ath.psfb21[gsfb], - ath.floor); - - if (gfc.nsPsy.longfact[21] > 1e-12) - ath21 *= gfc.nsPsy.longfact[21]; - - for (var j = end - 1; j >= start; j--) { - if (Math.abs(xr[j]) < ath21) - xr[j] = 0; - else { - stop = true; - break; - } - } - } - } else { - /* note: short blocks coeffs are reordered */ - for (var block = 0; block < 3; block++) { - var stop = false; - for (var gsfb = Encoder.PSFB12 - 1; gsfb >= 0 && !stop; gsfb--) { - var start = gfc.scalefac_band.s[12] - * 3 - + (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]) - * block - + (gfc.scalefac_band.psfb12[gsfb] - gfc.scalefac_band.psfb12[0]); - var end = start - + (gfc.scalefac_band.psfb12[gsfb + 1] - gfc.scalefac_band.psfb12[gsfb]); - var ath12 = qupvt.athAdjust(ath.adjust, ath.psfb12[gsfb], - ath.floor); - - if (gfc.nsPsy.shortfact[12] > 1e-12) - ath12 *= gfc.nsPsy.shortfact[12]; - - for (var j = end - 1; j >= start; j--) { - if (Math.abs(xr[j]) < ath12) - xr[j] = 0; - else { - stop = true; - break; - } - } - } - } - } - - } - - this.init_outer_loop = function (gfc, cod_info) { - /* - * initialize fresh cod_info - */ - cod_info.part2_3_length = 0; - cod_info.big_values = 0; - cod_info.count1 = 0; - cod_info.global_gain = 210; - cod_info.scalefac_compress = 0; - /* mixed_block_flag, block_type was set in psymodel.c */ - cod_info.table_select[0] = 0; - cod_info.table_select[1] = 0; - cod_info.table_select[2] = 0; - cod_info.subblock_gain[0] = 0; - cod_info.subblock_gain[1] = 0; - cod_info.subblock_gain[2] = 0; - cod_info.subblock_gain[3] = 0; - /* this one is always 0 */ - cod_info.region0_count = 0; - cod_info.region1_count = 0; - cod_info.preflag = 0; - cod_info.scalefac_scale = 0; - cod_info.count1table_select = 0; - cod_info.part2_length = 0; - cod_info.sfb_lmax = Encoder.SBPSY_l; - cod_info.sfb_smin = Encoder.SBPSY_s; - cod_info.psy_lmax = gfc.sfb21_extra ? Encoder.SBMAX_l : Encoder.SBPSY_l; - cod_info.psymax = cod_info.psy_lmax; - cod_info.sfbmax = cod_info.sfb_lmax; - cod_info.sfbdivide = 11; - for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - cod_info.width[sfb] = gfc.scalefac_band.l[sfb + 1] - - gfc.scalefac_band.l[sfb]; - /* which is always 0. */ - cod_info.window[sfb] = 3; - } - if (cod_info.block_type == Encoder.SHORT_TYPE) { - var ixwork = new_float(576); - - cod_info.sfb_smin = 0; - cod_info.sfb_lmax = 0; - if (cod_info.mixed_block_flag != 0) { - /* - * MPEG-1: sfbs 0-7 long block, 3-12 short blocks MPEG-2(.5): - * sfbs 0-5 long block, 3-12 short blocks - */ - cod_info.sfb_smin = 3; - cod_info.sfb_lmax = gfc.mode_gr * 2 + 4; - } - cod_info.psymax = cod_info.sfb_lmax - + 3 - * ((gfc.sfb21_extra ? Encoder.SBMAX_s : Encoder.SBPSY_s) - cod_info.sfb_smin); - cod_info.sfbmax = cod_info.sfb_lmax + 3 - * (Encoder.SBPSY_s - cod_info.sfb_smin); - cod_info.sfbdivide = cod_info.sfbmax - 18; - cod_info.psy_lmax = cod_info.sfb_lmax; - /* re-order the short blocks, for more efficient encoding below */ - /* By Takehiro TOMINAGA */ - /* - * Within each scalefactor band, data is given for successive time - * windows, beginning with window 0 and ending with window 2. Within - * each window, the quantized values are then arranged in order of - * increasing frequency... - */ - var ix = gfc.scalefac_band.l[cod_info.sfb_lmax]; - System.arraycopy(cod_info.xr, 0, ixwork, 0, 576); - for (var sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - var start = gfc.scalefac_band.s[sfb]; - var end = gfc.scalefac_band.s[sfb + 1]; - for (var window = 0; window < 3; window++) { - for (var l = start; l < end; l++) { - cod_info.xr[ix++] = ixwork[3 * l + window]; - } - } - } - - var j = cod_info.sfb_lmax; - for (var sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - cod_info.width[j] = cod_info.width[j + 1] = cod_info.width[j + 2] = gfc.scalefac_band.s[sfb + 1] - - gfc.scalefac_band.s[sfb]; - cod_info.window[j] = 0; - cod_info.window[j + 1] = 1; - cod_info.window[j + 2] = 2; - j += 3; - } - } - - cod_info.count1bits = 0; - cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[0][0]; - cod_info.slen[0] = 0; - cod_info.slen[1] = 0; - cod_info.slen[2] = 0; - cod_info.slen[3] = 0; - - cod_info.max_nonzero_coeff = 575; - - /* - * fresh scalefactors are all zero - */ - Arrays.fill(cod_info.scalefac, 0); - - psfb21_analogsilence(gfc, cod_info); - }; - - function BinSearchDirection(ordinal) { - this.ordinal = ordinal; - } - - BinSearchDirection.BINSEARCH_NONE = new BinSearchDirection(0); - BinSearchDirection.BINSEARCH_UP = new BinSearchDirection(1); - BinSearchDirection.BINSEARCH_DOWN = new BinSearchDirection(2); - - /** - * author/date?? - * - * binary step size search used by outer_loop to get a quantizer step size - * to start with - */ - function bin_search_StepSize(gfc, cod_info, desired_rate, ch, xrpow) { - var nBits; - var CurrentStep = gfc.CurrentStep[ch]; - var flagGoneOver = false; - var start = gfc.OldValue[ch]; - var Direction = BinSearchDirection.BINSEARCH_NONE; - cod_info.global_gain = start; - desired_rate -= cod_info.part2_length; - - for (; ;) { - var step; - nBits = tk.count_bits(gfc, xrpow, cod_info, null); - - if (CurrentStep == 1 || nBits == desired_rate) - break; - /* nothing to adjust anymore */ - - if (nBits > desired_rate) { - /* increase Quantize_StepSize */ - if (Direction == BinSearchDirection.BINSEARCH_DOWN) - flagGoneOver = true; - - if (flagGoneOver) - CurrentStep /= 2; - Direction = BinSearchDirection.BINSEARCH_UP; - step = CurrentStep; - } else { - /* decrease Quantize_StepSize */ - if (Direction == BinSearchDirection.BINSEARCH_UP) - flagGoneOver = true; - - if (flagGoneOver) - CurrentStep /= 2; - Direction = BinSearchDirection.BINSEARCH_DOWN; - step = -CurrentStep; - } - cod_info.global_gain += step; - if (cod_info.global_gain < 0) { - cod_info.global_gain = 0; - flagGoneOver = true; - } - if (cod_info.global_gain > 255) { - cod_info.global_gain = 255; - flagGoneOver = true; - } - } - - - while (nBits > desired_rate && cod_info.global_gain < 255) { - cod_info.global_gain++; - nBits = tk.count_bits(gfc, xrpow, cod_info, null); - } - gfc.CurrentStep[ch] = (start - cod_info.global_gain >= 4) ? 4 : 2; - gfc.OldValue[ch] = cod_info.global_gain; - cod_info.part2_3_length = nBits; - return nBits; - } - - this.trancate_smallspectrums = function (gfc, gi, l3_xmin, work) { - var distort = new_float(L3Side.SFBMAX); - - if ((0 == (gfc.substep_shaping & 4) && gi.block_type == Encoder.SHORT_TYPE) - || (gfc.substep_shaping & 0x80) != 0) - return; - qupvt.calc_noise(gi, l3_xmin, distort, new CalcNoiseResult(), null); - for (var j = 0; j < 576; j++) { - var xr = 0.0; - if (gi.l3_enc[j] != 0) - xr = Math.abs(gi.xr[j]); - work[j] = xr; - } - - var j = 0; - var sfb = 8; - if (gi.block_type == Encoder.SHORT_TYPE) - sfb = 6; - do { - var allowedNoise, trancateThreshold; - var nsame, start; - - var width = gi.width[sfb]; - j += width; - if (distort[sfb] >= 1.0) - continue; - - Arrays.sort(work, j - width, width); - if (BitStream.EQ(work[j - 1], 0.0)) - continue; - /* all zero sfb */ - - allowedNoise = (1.0 - distort[sfb]) * l3_xmin[sfb]; - trancateThreshold = 0.0; - start = 0; - do { - var noise; - for (nsame = 1; start + nsame < width; nsame++) - if (BitStream.NEQ(work[start + j - width], work[start + j - + nsame - width])) - break; - - noise = work[start + j - width] * work[start + j - width] - * nsame; - if (allowedNoise < noise) { - if (start != 0) - trancateThreshold = work[start + j - width - 1]; - break; - } - allowedNoise -= noise; - start += nsame; - } while (start < width); - if (BitStream.EQ(trancateThreshold, 0.0)) - continue; - - do { - if (Math.abs(gi.xr[j - width]) <= trancateThreshold) - gi.l3_enc[j - width] = 0; - } while (--width > 0); - } while (++sfb < gi.psymax); - - gi.part2_3_length = tk.noquant_count_bits(gfc, gi, null); - }; - - /** - * author/date?? - * - * Function: Returns zero if there is a scalefac which has not been - * amplified. Otherwise it returns one. - */ - function loop_break(cod_info) { - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) - if (cod_info.scalefac[sfb] - + cod_info.subblock_gain[cod_info.window[sfb]] == 0) - return false; - - return true; - } - - /* mt 5/99: Function: Improved calc_noise for a single channel */ - - function penalties(noise) { - return Util.FAST_LOG10((0.368 + 0.632 * noise * noise * noise)); - } - - /** - * author/date?? - * - * several different codes to decide which quantization is better - */ - function get_klemm_noise(distort, gi) { - var klemm_noise = 1E-37; - for (var sfb = 0; sfb < gi.psymax; sfb++) - klemm_noise += penalties(distort[sfb]); - - return Math.max(1e-20, klemm_noise); - } - - function quant_compare(quant_comp, best, calc, gi, distort) { - /** - * noise is given in decibels (dB) relative to masking thesholds.
- * - * over_noise: ??? (the previous comment is fully wrong)
- * tot_noise: ??? (the previous comment is fully wrong)
- * max_noise: max quantization noise - */ - var better; - - switch (quant_comp) { - default: - case 9: - { - if (best.over_count > 0) { - /* there are distorted sfb */ - better = calc.over_SSD <= best.over_SSD; - if (calc.over_SSD == best.over_SSD) - better = calc.bits < best.bits; - } else { - /* no distorted sfb */ - better = ((calc.max_noise < 0) && ((calc.max_noise * 10 + calc.bits) <= (best.max_noise * 10 + best.bits))); - } - break; - } - - case 0: - better = calc.over_count < best.over_count - || (calc.over_count == best.over_count && calc.over_noise < best.over_noise) - || (calc.over_count == best.over_count - && BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise); - break; - - case 8: - calc.max_noise = get_klemm_noise(distort, gi); - //$FALL-THROUGH$ - case 1: - better = calc.max_noise < best.max_noise; - break; - case 2: - better = calc.tot_noise < best.tot_noise; - break; - case 3: - better = (calc.tot_noise < best.tot_noise) - && (calc.max_noise < best.max_noise); - break; - case 4: - better = (calc.max_noise <= 0.0 && best.max_noise > 0.2) - || (calc.max_noise <= 0.0 && best.max_noise < 0.0 - && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise) - || (calc.max_noise <= 0.0 && best.max_noise > 0.0 - && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise - + best.over_noise) - || (calc.max_noise > 0.0 && best.max_noise > -0.05 - && best.max_noise > calc.max_noise - 0.1 && calc.tot_noise - + calc.over_noise < best.tot_noise - + best.over_noise) - || (calc.max_noise > 0.0 && best.max_noise > -0.1 - && best.max_noise > calc.max_noise - 0.15 && calc.tot_noise - + calc.over_noise + calc.over_noise < best.tot_noise - + best.over_noise + best.over_noise); - break; - case 5: - better = calc.over_noise < best.over_noise - || (BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise); - break; - case 6: - better = calc.over_noise < best.over_noise - || (BitStream.EQ(calc.over_noise, best.over_noise) && (calc.max_noise < best.max_noise || (BitStream - .EQ(calc.max_noise, best.max_noise) && calc.tot_noise <= best.tot_noise))); - break; - case 7: - better = calc.over_count < best.over_count - || calc.over_noise < best.over_noise; - break; - } - - if (best.over_count == 0) { - /* - * If no distorted bands, only use this quantization if it is - * better, and if it uses less bits. Unfortunately, part2_3_length - * is sometimes a poor estimator of the final size at low bitrates. - */ - better = better && calc.bits < best.bits; - } - - return better; - } - - /** - * author/date?? - * - *
-     *  Amplify the scalefactor bands that violate the masking threshold.
-     *  See ISO 11172-3 Section C.1.5.4.3.5
-     *
-     *  distort[] = noise/masking
-     *  distort[] > 1   ==> noise is not masked
-     *  distort[] < 1   ==> noise is masked
-     *  max_dist = maximum value of distort[]
-     *
-     *  Three algorithms:
-     *  noise_shaping_amp
-     *        0             Amplify all bands with distort[]>1.
-     *
-     *        1             Amplify all bands with distort[] >= max_dist^(.5);
-     *                     ( 50% in the db scale)
-     *
-     *        2             Amplify first band with distort[] >= max_dist;
-     *
-     *
-     *  For algorithms 0 and 1, if max_dist < 1, then amplify all bands
-     *  with distort[] >= .95*max_dist.  This is to make sure we always
-     *  amplify at least one band.
-     * 
- */ - function amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine) { - var gfc = gfp.internal_flags; - var ifqstep34; - - if (cod_info.scalefac_scale == 0) { - ifqstep34 = 1.29683955465100964055; - /* 2**(.75*.5) */ - } else { - ifqstep34 = 1.68179283050742922612; - /* 2**(.75*1) */ - } - - /* compute maximum value of distort[] */ - var trigger = 0; - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) { - if (trigger < distort[sfb]) - trigger = distort[sfb]; - } - - var noise_shaping_amp = gfc.noise_shaping_amp; - if (noise_shaping_amp == 3) { - if (bRefine) - noise_shaping_amp = 2; - else - noise_shaping_amp = 1; - } - switch (noise_shaping_amp) { - case 2: - /* amplify exactly 1 band */ - break; - - case 1: - /* amplify bands within 50% of max (on db scale) */ - if (trigger > 1.0) - trigger = Math.pow(trigger, .5); - else - trigger *= .95; - break; - - case 0: - default: - /* ISO algorithm. amplify all bands with distort>1 */ - if (trigger > 1.0) - trigger = 1.0; - else - trigger *= .95; - break; - } - - var j = 0; - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) { - var width = cod_info.width[sfb]; - var l; - j += width; - if (distort[sfb] < trigger) - continue; - - if ((gfc.substep_shaping & 2) != 0) { - gfc.pseudohalf[sfb] = (0 == gfc.pseudohalf[sfb]) ? 1 : 0; - if (0 == gfc.pseudohalf[sfb] && gfc.noise_shaping_amp == 2) - return; - } - cod_info.scalefac[sfb]++; - for (l = -width; l < 0; l++) { - xrpow[j + l] *= ifqstep34; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - - if (gfc.noise_shaping_amp == 2) - return; - } - } - - /** - * Takehiro Tominaga 2000-xx-xx - * - * turns on scalefac scale and adjusts scalefactors - */ - function inc_scalefac_scale(cod_info, xrpow) { - var ifqstep34 = 1.29683955465100964055; - - var j = 0; - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) { - var width = cod_info.width[sfb]; - var s = cod_info.scalefac[sfb]; - if (cod_info.preflag != 0) - s += qupvt.pretab[sfb]; - j += width; - if ((s & 1) != 0) { - s++; - for (var l = -width; l < 0; l++) { - xrpow[j + l] *= ifqstep34; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - } - cod_info.scalefac[sfb] = s >> 1; - } - cod_info.preflag = 0; - cod_info.scalefac_scale = 1; - } - - /** - * Takehiro Tominaga 2000-xx-xx - * - * increases the subblock gain and adjusts scalefactors - */ - function inc_subblock_gain(gfc, cod_info, xrpow) { - var sfb; - var scalefac = cod_info.scalefac; - - /* subbloc_gain can't do anything in the long block region */ - for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) { - if (scalefac[sfb] >= 16) - return true; - } - - for (var window = 0; window < 3; window++) { - var s1 = 0; - var s2 = 0; - - for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbdivide; sfb += 3) { - if (s1 < scalefac[sfb]) - s1 = scalefac[sfb]; - } - for (; sfb < cod_info.sfbmax; sfb += 3) { - if (s2 < scalefac[sfb]) - s2 = scalefac[sfb]; - } - - if (s1 < 16 && s2 < 8) - continue; - - if (cod_info.subblock_gain[window] >= 7) - return true; - - /* - * even though there is no scalefactor for sfb12 subblock gain - * affects upper frequencies too, that's why we have to go up to - * SBMAX_s - */ - cod_info.subblock_gain[window]++; - var j = gfc.scalefac_band.l[cod_info.sfb_lmax]; - for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbmax; sfb += 3) { - var amp; - var width = cod_info.width[sfb]; - var s = scalefac[sfb]; - s = s - (4 >> cod_info.scalefac_scale); - if (s >= 0) { - scalefac[sfb] = s; - j += width * 3; - continue; - } - - scalefac[sfb] = 0; - { - var gain = 210 + (s << (cod_info.scalefac_scale + 1)); - amp = qupvt.IPOW20(gain); - } - j += width * (window + 1); - for (var l = -width; l < 0; l++) { - xrpow[j + l] *= amp; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - j += width * (3 - window - 1); - } - - { - var amp = qupvt.IPOW20(202); - j += cod_info.width[sfb] * (window + 1); - for (var l = -cod_info.width[sfb]; l < 0; l++) { - xrpow[j + l] *= amp; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - } - } - return false; - } - - /** - *
-     *  Takehiro Tominaga /date??
-     *  Robert Hegemann 2000-09-06: made a function of it
-     *
-     *  amplifies scalefactor bands,
-     *   - if all are already amplified returns 0
-     *   - if some bands are amplified too much:
-     *      * try to increase scalefac_scale
-     *      * if already scalefac_scale was set
-     *          try on short blocks to increase subblock gain
-     * 
- */ - function balance_noise(gfp, cod_info, distort, xrpow, bRefine) { - var gfc = gfp.internal_flags; - - amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine); - - /* - * check to make sure we have not amplified too much loop_break returns - * 0 if there is an unamplified scalefac scale_bitcount returns 0 if no - * scalefactors are too large - */ - - var status = loop_break(cod_info); - - if (status) - return false; - /* all bands amplified */ - - /* - * not all scalefactors have been amplified. so these scalefacs are - * possibly valid. encode them: - */ - if (gfc.mode_gr == 2) - status = tk.scale_bitcount(cod_info); - else - status = tk.scale_bitcount_lsf(gfc, cod_info); - - if (!status) - return true; - /* amplified some bands not exceeding limits */ - - /* - * some scalefactors are too large. lets try setting scalefac_scale=1 - */ - if (gfc.noise_shaping > 1) { - Arrays.fill(gfc.pseudohalf, 0); - if (0 == cod_info.scalefac_scale) { - inc_scalefac_scale(cod_info, xrpow); - status = false; - } else { - if (cod_info.block_type == Encoder.SHORT_TYPE - && gfc.subblock_gain > 0) { - status = (inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info)); - } - } - } - - if (!status) { - if (gfc.mode_gr == 2) - status = tk.scale_bitcount(cod_info); - else - status = tk.scale_bitcount_lsf(gfc, cod_info); - } - return !status; - } - - /** - *
-     *  Function: The outer iteration loop controls the masking conditions
-     *  of all scalefactorbands. It computes the best scalefac and
-     *  global gain. This module calls the inner iteration loop
-     *
-     *  mt 5/99 completely rewritten to allow for bit reservoir control,
-     *  mid/side channels with L/R or mid/side masking thresholds,
-     *  and chooses best quantization instead of last quantization when
-     *  no distortion free quantization can be found.
-     *
-     *  added VBR support mt 5/99
-     *
-     *  some code shuffle rh 9/00
-     * 
- * - * @param l3_xmin - * allowed distortion - * @param xrpow - * coloured magnitudes of spectral - * @param targ_bits - * maximum allowed bits - */ - this.outer_loop = function (gfp, cod_info, l3_xmin, xrpow, ch, targ_bits) { - var gfc = gfp.internal_flags; - var cod_info_w = new GrInfo(); - var save_xrpow = new_float(576); - var distort = new_float(L3Side.SFBMAX); - var best_noise_info = new CalcNoiseResult(); - var better; - var prev_noise = new CalcNoiseData(); - var best_part2_3_length = 9999999; - var bEndOfSearch = false; - var bRefine = false; - var best_ggain_pass1 = 0; - - bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow); - - if (0 == gfc.noise_shaping) - /* fast mode, no noise shaping, we are ready */ - return 100; - /* default noise_info.over_count */ - - /* compute the distortion in this quantization */ - /* coefficients and thresholds both l/r (or both mid/side) */ - qupvt.calc_noise(cod_info, l3_xmin, distort, best_noise_info, - prev_noise); - best_noise_info.bits = cod_info.part2_3_length; - - cod_info_w.assign(cod_info); - var age = 0; - System.arraycopy(xrpow, 0, save_xrpow, 0, 576); - - while (!bEndOfSearch) { - /* BEGIN MAIN LOOP */ - do { - var noise_info = new CalcNoiseResult(); - var search_limit; - var maxggain = 255; - - /* - * When quantization with no distorted bands is found, allow up - * to X new unsuccesful tries in serial. This gives us more - * possibilities for different quant_compare modes. Much more - * than 3 makes not a big difference, it is only slower. - */ - - if ((gfc.substep_shaping & 2) != 0) { - search_limit = 20; - } else { - search_limit = 3; - } - - /* - * Check if the last scalefactor band is distorted. in VBR mode - * we can't get rid of the distortion, so quit now and VBR mode - * will try again with more bits. (makes a 10% speed increase, - * the files I tested were binary identical, 2000/05/20 Robert - * Hegemann) distort[] > 1 means noise > allowed noise - */ - if (gfc.sfb21_extra) { - if (distort[cod_info_w.sfbmax] > 1.0) - break; - if (cod_info_w.block_type == Encoder.SHORT_TYPE - && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0)) - break; - } - - /* try a new scalefactor conbination on cod_info_w */ - if (!balance_noise(gfp, cod_info_w, distort, xrpow, bRefine)) - break; - if (cod_info_w.scalefac_scale != 0) - maxggain = 254; - - /* - * inner_loop starts with the initial quantization step computed - * above and slowly increases until the bits < huff_bits. Thus - * it is important not to start with too large of an inital - * quantization step. Too small is ok, but inner_loop will take - * longer - */ - var huff_bits = targ_bits - cod_info_w.part2_length; - if (huff_bits <= 0) - break; - - /* - * increase quantizer stepsize until needed bits are below - * maximum - */ - while ((cod_info_w.part2_3_length = tk.count_bits(gfc, xrpow, - cod_info_w, prev_noise)) > huff_bits - && cod_info_w.global_gain <= maxggain) - cod_info_w.global_gain++; - - if (cod_info_w.global_gain > maxggain) - break; - - if (best_noise_info.over_count == 0) { - - while ((cod_info_w.part2_3_length = tk.count_bits(gfc, - xrpow, cod_info_w, prev_noise)) > best_part2_3_length - && cod_info_w.global_gain <= maxggain) - cod_info_w.global_gain++; - - if (cod_info_w.global_gain > maxggain) - break; - } - - /* compute the distortion in this quantization */ - qupvt.calc_noise(cod_info_w, l3_xmin, distort, noise_info, - prev_noise); - noise_info.bits = cod_info_w.part2_3_length; - - /* - * check if this quantization is better than our saved - * quantization - */ - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - better = gfp.quant_comp; - } else - better = gfp.quant_comp_short; - - better = quant_compare(better, best_noise_info, noise_info, - cod_info_w, distort) ? 1 : 0; - - /* save data so we can restore this quantization later */ - if (better != 0) { - best_part2_3_length = cod_info.part2_3_length; - best_noise_info = noise_info; - cod_info.assign(cod_info_w); - age = 0; - /* save data so we can restore this quantization later */ - /* store for later reuse */ - System.arraycopy(xrpow, 0, save_xrpow, 0, 576); - } else { - /* early stop? */ - if (gfc.full_outer_loop == 0) { - if (++age > search_limit - && best_noise_info.over_count == 0) - break; - if ((gfc.noise_shaping_amp == 3) && bRefine && age > 30) - break; - if ((gfc.noise_shaping_amp == 3) - && bRefine - && (cod_info_w.global_gain - best_ggain_pass1) > 15) - break; - } - } - } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255); - - if (gfc.noise_shaping_amp == 3) { - if (!bRefine) { - /* refine search */ - cod_info_w.assign(cod_info); - System.arraycopy(save_xrpow, 0, xrpow, 0, 576); - age = 0; - best_ggain_pass1 = cod_info_w.global_gain; - - bRefine = true; - } else { - /* search already refined, stop */ - bEndOfSearch = true; - } - - } else { - bEndOfSearch = true; - } - } - - /* - * finish up - */ - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - /* restore for reuse on next try */ - System.arraycopy(save_xrpow, 0, xrpow, 0, 576); - /* - * do the 'substep shaping' - */ - else if ((gfc.substep_shaping & 1) != 0) - trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow); - - return best_noise_info.over_count; - } - - /** - * Robert Hegemann 2000-09-06 - * - * update reservoir status after FINAL quantization/bitrate - */ - this.iteration_finish_one = function (gfc, gr, ch) { - var l3_side = gfc.l3_side; - var cod_info = l3_side.tt[gr][ch]; - - /* - * try some better scalefac storage - */ - tk.best_scalefac_store(gfc, gr, ch, l3_side); - - /* - * best huffman_divide may save some bits too - */ - if (gfc.use_best_huffman == 1) - tk.best_huffman_divide(gfc, cod_info); - - /* - * update reservoir status after FINAL quantization/bitrate - */ - rv.ResvAdjust(gfc, cod_info); - }; - - /** - * - * 2000-09-04 Robert Hegemann - * - * @param l3_xmin - * allowed distortion of the scalefactor - * @param xrpow - * coloured magnitudes of spectral values - */ - this.VBR_encode_granule = function (gfp, cod_info, l3_xmin, xrpow, ch, min_bits, max_bits) { - var gfc = gfp.internal_flags; - var bst_cod_info = new GrInfo(); - var bst_xrpow = new_float(576); - var Max_bits = max_bits; - var real_bits = max_bits + 1; - var this_bits = (max_bits + min_bits) / 2; - var dbits, over, found = 0; - var sfb21_extra = gfc.sfb21_extra; - - Arrays.fill(bst_cod_info.l3_enc, 0); - - /* - * search within round about 40 bits of optimal - */ - do { - - if (this_bits > Max_bits - 42) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = sfb21_extra; - - over = outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, this_bits); - - /* - * is quantization as good as we are looking for ? in this case: is - * no scalefactor band distorted? - */ - if (over <= 0) { - found = 1; - /* - * now we know it can be done with "real_bits" and maybe we can - * skip some iterations - */ - real_bits = cod_info.part2_3_length; - - /* - * store best quantization so far - */ - bst_cod_info.assign(cod_info); - System.arraycopy(xrpow, 0, bst_xrpow, 0, 576); - - /* - * try with fewer bits - */ - max_bits = real_bits - 32; - dbits = max_bits - min_bits; - this_bits = (max_bits + min_bits) / 2; - } else { - /* - * try with more bits - */ - min_bits = this_bits + 32; - dbits = max_bits - min_bits; - this_bits = (max_bits + min_bits) / 2; - - if (found != 0) { - found = 2; - /* - * start again with best quantization so far - */ - cod_info.assign(bst_cod_info); - System.arraycopy(bst_xrpow, 0, xrpow, 0, 576); - } - } - } while (dbits > 12); - - gfc.sfb21_extra = sfb21_extra; - - /* - * found=0 => nothing found, use last one found=1 => we just found the - * best and left the loop found=2 => we restored a good one and have now - * l3_enc to restore too - */ - if (found == 2) { - System.arraycopy(bst_cod_info.l3_enc, 0, cod_info.l3_enc, 0, 576); - } - } - - /** - * Robert Hegemann 2000-09-05 - * - * calculates * how many bits are available for analog silent granules * how - * many bits to use for the lowest allowed bitrate * how many bits each - * bitrate would provide - */ - this.get_framebits = function (gfp, frameBits) { - var gfc = gfp.internal_flags; - - /* - * always use at least this many bits per granule per channel unless we - * detect analog silence, see below - */ - gfc.bitrate_index = gfc.VBR_min_bitrate; - var bitsPerFrame = bs.getframebits(gfp); - - /* - * bits for analog silence - */ - gfc.bitrate_index = 1; - bitsPerFrame = bs.getframebits(gfp); - - for (var i = 1; i <= gfc.VBR_max_bitrate; i++) { - gfc.bitrate_index = i; - var mb = new MeanBits(bitsPerFrame); - frameBits[i] = rv.ResvFrameBegin(gfp, mb); - bitsPerFrame = mb.bits; - } - }; - - /* RH: this one needs to be overhauled sometime */ - - /** - *
-     *  2000-09-04 Robert Hegemann
-     *
-     *  * converts LR to MS coding when necessary
-     *  * calculates allowed/adjusted quantization noise amounts
-     *  * detects analog silent frames
-     *
-     *  some remarks:
-     *  - lower masking depending on Quality setting
-     *  - quality control together with adjusted ATH MDCT scaling
-     *    on lower quality setting allocate more noise from
-     *    ATH masking, and on higher quality setting allocate
-     *    less noise from ATH masking.
-     *  - experiments show that going more than 2dB over GPSYCHO's
-     *    limits ends up in very annoying artefacts
-     * 
- */ - this.VBR_old_prepare = function (gfp, pe, ms_ener_ratio, ratio, l3_xmin, frameBits, min_bits, - max_bits, bands) { - var gfc = gfp.internal_flags; - - var masking_lower_db, adjust = 0.0; - var analog_silence = 1; - var bits = 0; - - gfc.bitrate_index = gfc.VBR_max_bitrate; - var avg = rv.ResvFrameBegin(gfp, new MeanBits(0)) / gfc.mode_gr; - - get_framebits(gfp, frameBits); - - for (var gr = 0; gr < gfc.mode_gr; gr++) { - var mxb = qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0); - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - ms_convert(gfc.l3_side, gr); - qupvt.reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb); - } - for (var ch = 0; ch < gfc.channels_out; ++ch) { - var cod_info = gfc.l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 1.28 / (1 + Math - .exp(3.5 - pe[gr][ch] / 300.)) - 0.05; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 2.56 / (1 + Math - .exp(3.5 - pe[gr][ch] / 300.)) - 0.14; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = Math.pow(10.0, - masking_lower_db * 0.1); - - init_outer_loop(gfc, cod_info); - bands[gr][ch] = qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin[gr][ch]); - if (bands[gr][ch] != 0) - analog_silence = 0; - - min_bits[gr][ch] = 126; - - bits += max_bits[gr][ch]; - } - } - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - if (bits > frameBits[gfc.VBR_max_bitrate]) { - max_bits[gr][ch] *= frameBits[gfc.VBR_max_bitrate]; - max_bits[gr][ch] /= bits; - } - if (min_bits[gr][ch] > max_bits[gr][ch]) - min_bits[gr][ch] = max_bits[gr][ch]; - - } - /* for ch */ - } - /* for gr */ - - return analog_silence; - }; - - this.bitpressure_strategy = function (gfc, l3_xmin, min_bits, max_bits) { - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - var gi = gfc.l3_side.tt[gr][ch]; - var pxmin = l3_xmin[gr][ch]; - var pxminPos = 0; - for (var sfb = 0; sfb < gi.psy_lmax; sfb++) - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_l / Encoder.SBMAX_l; - - if (gi.block_type == Encoder.SHORT_TYPE) { - for (var sfb = gi.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - } - } - max_bits[gr][ch] = 0 | Math.max(min_bits[gr][ch], - 0.9 * max_bits[gr][ch]); - } - } - }; - - this.VBR_new_prepare = function (gfp, pe, ratio, l3_xmin, frameBits, max_bits) { - var gfc = gfp.internal_flags; - - var analog_silence = 1; - var avg = 0, bits = 0; - var maximum_framebits; - - if (!gfp.free_format) { - gfc.bitrate_index = gfc.VBR_max_bitrate; - - var mb = new MeanBits(avg); - rv.ResvFrameBegin(gfp, mb); - avg = mb.bits; - - get_framebits(gfp, frameBits); - maximum_framebits = frameBits[gfc.VBR_max_bitrate]; - } else { - gfc.bitrate_index = 0; - var mb = new MeanBits(avg); - maximum_framebits = rv.ResvFrameBegin(gfp, mb); - avg = mb.bits; - frameBits[0] = maximum_framebits; - } - - for (var gr = 0; gr < gfc.mode_gr; gr++) { - qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0); - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - ms_convert(gfc.l3_side, gr); - } - for (var ch = 0; ch < gfc.channels_out; ++ch) { - var cod_info = gfc.l3_side.tt[gr][ch]; - - gfc.masking_lower = Math.pow(10.0, - gfc.PSY.mask_adjust * 0.1); - - init_outer_loop(gfc, cod_info); - if (0 != qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin[gr][ch])) - analog_silence = 0; - - bits += max_bits[gr][ch]; - } - } - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - if (bits > maximum_framebits) { - max_bits[gr][ch] *= maximum_framebits; - max_bits[gr][ch] /= bits; - } - - } - /* for ch */ - } - /* for gr */ - - return analog_silence; - }; - - /** - * calculates target bits for ABR encoding - * - * mt 2000/05/31 - */ - this.calc_target_bits = function (gfp, pe, ms_ener_ratio, targ_bits, analog_silence_bits, max_frame_bits) { - var gfc = gfp.internal_flags; - var l3_side = gfc.l3_side; - var res_factor; - var gr, ch, totbits, mean_bits = 0; - - gfc.bitrate_index = gfc.VBR_max_bitrate; - var mb = new MeanBits(mean_bits); - max_frame_bits[0] = rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - gfc.bitrate_index = 1; - mean_bits = bs.getframebits(gfp) - gfc.sideinfo_len * 8; - analog_silence_bits[0] = mean_bits / (gfc.mode_gr * gfc.channels_out); - - mean_bits = gfp.VBR_mean_bitrate_kbps * gfp.framesize * 1000; - if ((gfc.substep_shaping & 1) != 0) - mean_bits *= 1.09; - mean_bits /= gfp.out_samplerate; - mean_bits -= gfc.sideinfo_len * 8; - mean_bits /= (gfc.mode_gr * gfc.channels_out); - - /** - *
-         *           res_factor is the percentage of the target bitrate that should
-         *           be used on average.  the remaining bits are added to the
-         *           bitreservoir and used for difficult to encode frames.
-         *
-         *           Since we are tracking the average bitrate, we should adjust
-         *           res_factor "on the fly", increasing it if the average bitrate
-         *           is greater than the requested bitrate, and decreasing it
-         *           otherwise.  Reasonable ranges are from .9 to 1.0
-         *
-         *           Until we get the above suggestion working, we use the following
-         *           tuning:
-         *           compression ratio    res_factor
-         *           5.5  (256kbps)         1.0      no need for bitreservoir
-         *           11   (128kbps)         .93      7% held for reservoir
-         *
-         *           with linear interpolation for other values.
-         * 
- */ - res_factor = .93 + .07 * (11.0 - gfp.compression_ratio) - / (11.0 - 5.5); - if (res_factor < .90) - res_factor = .90; - if (res_factor > 1.00) - res_factor = 1.00; - - for (gr = 0; gr < gfc.mode_gr; gr++) { - var sum = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - targ_bits[gr][ch] = (int)(res_factor * mean_bits); - - if (pe[gr][ch] > 700) { - var add_bits = (int)((pe[gr][ch] - 700) / 1.4); - - var cod_info = l3_side.tt[gr][ch]; - targ_bits[gr][ch] = (int)(res_factor * mean_bits); - - /* short blocks use a little extra, no matter what the pe */ - if (cod_info.block_type == Encoder.SHORT_TYPE) { - if (add_bits < mean_bits / 2) - add_bits = mean_bits / 2; - } - /* at most increase bits by 1.5*average */ - if (add_bits > mean_bits * 3 / 2) - add_bits = mean_bits * 3 / 2; - else if (add_bits < 0) - add_bits = 0; - - targ_bits[gr][ch] += add_bits; - } - if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } - sum += targ_bits[gr][ch]; - } - /* for ch */ - if (sum > LameInternalFlags.MAX_BITS_PER_GRANULE) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[gr][ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE; - targ_bits[gr][ch] /= sum; - } - } - } - /* for gr */ - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) - for (gr = 0; gr < gfc.mode_gr; gr++) { - qupvt.reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits - * gfc.channels_out, - LameInternalFlags.MAX_BITS_PER_GRANULE); - } - - /* - * sum target bits - */ - totbits = 0; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) - targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - totbits += targ_bits[gr][ch]; - } - } - - /* - * repartion target bits if needed - */ - if (totbits > max_frame_bits[0]) { - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - targ_bits[gr][ch] *= max_frame_bits[0]; - targ_bits[gr][ch] /= totbits; - } - } - } - } - -} - -/* - * MP3 window subband -> subband filtering -> mdct routine - * - * Copyright (c) 1999-2000 Takehiro Tominaga - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Special Thanks to Patrick De Smet for your advices. - */ - -/* $Id: NewMDCT.java,v 1.11 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -//import java.util.Arrays; - - - -function NewMDCT() { - - var enwindow = [ - -4.77e-07 * 0.740951125354959 / 2.384e-06, - 1.03951e-04 * 0.740951125354959 / 2.384e-06, - 9.53674e-04 * 0.740951125354959 / 2.384e-06, - 2.841473e-03 * 0.740951125354959 / 2.384e-06, - 3.5758972e-02 * 0.740951125354959 / 2.384e-06, - 3.401756e-03 * 0.740951125354959 / 2.384e-06, - 9.83715e-04 * 0.740951125354959 / 2.384e-06, - 9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */ - 1.2398e-05 * 0.740951125354959 / 2.384e-06, - 1.91212e-04 * 0.740951125354959 / 2.384e-06, - 2.283096e-03 * 0.740951125354959 / 2.384e-06, - 1.6994476e-02 * 0.740951125354959 / 2.384e-06, - -1.8756866e-02 * 0.740951125354959 / 2.384e-06, - -2.630711e-03 * 0.740951125354959 / 2.384e-06, - -2.47478e-04 * 0.740951125354959 / 2.384e-06, - -1.4782e-05 * 0.740951125354959 / 2.384e-06, - 9.063471690191471e-01, 1.960342806591213e-01, - - -4.77e-07 * 0.773010453362737 / 2.384e-06, - 1.05858e-04 * 0.773010453362737 / 2.384e-06, - 9.30786e-04 * 0.773010453362737 / 2.384e-06, - 2.521515e-03 * 0.773010453362737 / 2.384e-06, - 3.5694122e-02 * 0.773010453362737 / 2.384e-06, - 3.643036e-03 * 0.773010453362737 / 2.384e-06, - 9.91821e-04 * 0.773010453362737 / 2.384e-06, - 9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */ - 1.1444e-05 * 0.773010453362737 / 2.384e-06, - 1.65462e-04 * 0.773010453362737 / 2.384e-06, - 2.110004e-03 * 0.773010453362737 / 2.384e-06, - 1.6112804e-02 * 0.773010453362737 / 2.384e-06, - -1.9634247e-02 * 0.773010453362737 / 2.384e-06, - -2.803326e-03 * 0.773010453362737 / 2.384e-06, - -2.77042e-04 * 0.773010453362737 / 2.384e-06, - -1.6689e-05 * 0.773010453362737 / 2.384e-06, - 8.206787908286602e-01, 3.901806440322567e-01, - - -4.77e-07 * 0.803207531480645 / 2.384e-06, - 1.07288e-04 * 0.803207531480645 / 2.384e-06, - 9.02653e-04 * 0.803207531480645 / 2.384e-06, - 2.174854e-03 * 0.803207531480645 / 2.384e-06, - 3.5586357e-02 * 0.803207531480645 / 2.384e-06, - 3.858566e-03 * 0.803207531480645 / 2.384e-06, - 9.95159e-04 * 0.803207531480645 / 2.384e-06, - 9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */ - 1.0014e-05 * 0.803207531480645 / 2.384e-06, - 1.40190e-04 * 0.803207531480645 / 2.384e-06, - 1.937389e-03 * 0.803207531480645 / 2.384e-06, - 1.5233517e-02 * 0.803207531480645 / 2.384e-06, - -2.0506859e-02 * 0.803207531480645 / 2.384e-06, - -2.974033e-03 * 0.803207531480645 / 2.384e-06, - -3.07560e-04 * 0.803207531480645 / 2.384e-06, - -1.8120e-05 * 0.803207531480645 / 2.384e-06, - 7.416505462720353e-01, 5.805693545089249e-01, - - -4.77e-07 * 0.831469612302545 / 2.384e-06, - 1.08242e-04 * 0.831469612302545 / 2.384e-06, - 8.68797e-04 * 0.831469612302545 / 2.384e-06, - 1.800537e-03 * 0.831469612302545 / 2.384e-06, - 3.5435200e-02 * 0.831469612302545 / 2.384e-06, - 4.049301e-03 * 0.831469612302545 / 2.384e-06, - 9.94205e-04 * 0.831469612302545 / 2.384e-06, - 9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */ - 9.060e-06 * 0.831469612302545 / 2.384e-06, - 1.16348e-04 * 0.831469612302545 / 2.384e-06, - 1.766682e-03 * 0.831469612302545 / 2.384e-06, - 1.4358521e-02 * 0.831469612302545 / 2.384e-06, - -2.1372318e-02 * 0.831469612302545 / 2.384e-06, - -3.14188e-03 * 0.831469612302545 / 2.384e-06, - -3.39031e-04 * 0.831469612302545 / 2.384e-06, - -1.9550e-05 * 0.831469612302545 / 2.384e-06, - 6.681786379192989e-01, 7.653668647301797e-01, - - -4.77e-07 * 0.857728610000272 / 2.384e-06, - 1.08719e-04 * 0.857728610000272 / 2.384e-06, - 8.29220e-04 * 0.857728610000272 / 2.384e-06, - 1.399517e-03 * 0.857728610000272 / 2.384e-06, - 3.5242081e-02 * 0.857728610000272 / 2.384e-06, - 4.215240e-03 * 0.857728610000272 / 2.384e-06, - 9.89437e-04 * 0.857728610000272 / 2.384e-06, - 8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */ - 8.106e-06 * 0.857728610000272 / 2.384e-06, - 9.3937e-05 * 0.857728610000272 / 2.384e-06, - 1.597881e-03 * 0.857728610000272 / 2.384e-06, - 1.3489246e-02 * 0.857728610000272 / 2.384e-06, - -2.2228718e-02 * 0.857728610000272 / 2.384e-06, - -3.306866e-03 * 0.857728610000272 / 2.384e-06, - -3.71456e-04 * 0.857728610000272 / 2.384e-06, - -2.1458e-05 * 0.857728610000272 / 2.384e-06, - 5.993769336819237e-01, 9.427934736519954e-01, - - -4.77e-07 * 0.881921264348355 / 2.384e-06, - 1.08719e-04 * 0.881921264348355 / 2.384e-06, - 7.8392e-04 * 0.881921264348355 / 2.384e-06, - 9.71317e-04 * 0.881921264348355 / 2.384e-06, - 3.5007000e-02 * 0.881921264348355 / 2.384e-06, - 4.357815e-03 * 0.881921264348355 / 2.384e-06, - 9.80854e-04 * 0.881921264348355 / 2.384e-06, - 8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */ - 7.629e-06 * 0.881921264348355 / 2.384e-06, - 7.2956e-05 * 0.881921264348355 / 2.384e-06, - 1.432419e-03 * 0.881921264348355 / 2.384e-06, - 1.2627602e-02 * 0.881921264348355 / 2.384e-06, - -2.3074150e-02 * 0.881921264348355 / 2.384e-06, - -3.467083e-03 * 0.881921264348355 / 2.384e-06, - -4.04358e-04 * 0.881921264348355 / 2.384e-06, - -2.3365e-05 * 0.881921264348355 / 2.384e-06, - 5.345111359507916e-01, 1.111140466039205e+00, - - -9.54e-07 * 0.903989293123443 / 2.384e-06, - 1.08242e-04 * 0.903989293123443 / 2.384e-06, - 7.31945e-04 * 0.903989293123443 / 2.384e-06, - 5.15938e-04 * 0.903989293123443 / 2.384e-06, - 3.4730434e-02 * 0.903989293123443 / 2.384e-06, - 4.477024e-03 * 0.903989293123443 / 2.384e-06, - 9.68933e-04 * 0.903989293123443 / 2.384e-06, - 8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */ - 6.676e-06 * 0.903989293123443 / 2.384e-06, - 5.2929e-05 * 0.903989293123443 / 2.384e-06, - 1.269817e-03 * 0.903989293123443 / 2.384e-06, - 1.1775017e-02 * 0.903989293123443 / 2.384e-06, - -2.3907185e-02 * 0.903989293123443 / 2.384e-06, - -3.622532e-03 * 0.903989293123443 / 2.384e-06, - -4.38213e-04 * 0.903989293123443 / 2.384e-06, - -2.5272e-05 * 0.903989293123443 / 2.384e-06, - 4.729647758913199e-01, 1.268786568327291e+00, - - -9.54e-07 * 0.92387953251128675613 / 2.384e-06, - 1.06812e-04 * 0.92387953251128675613 / 2.384e-06, - 6.74248e-04 * 0.92387953251128675613 / 2.384e-06, - 3.3379e-05 * 0.92387953251128675613 / 2.384e-06, - 3.4412861e-02 * 0.92387953251128675613 / 2.384e-06, - 4.573822e-03 * 0.92387953251128675613 / 2.384e-06, - 9.54151e-04 * 0.92387953251128675613 / 2.384e-06, - 7.6771e-05 * 0.92387953251128675613 / 2.384e-06, - 6.199e-06 * 0.92387953251128675613 / 2.384e-06, - 3.4332e-05 * 0.92387953251128675613 / 2.384e-06, - 1.111031e-03 * 0.92387953251128675613 / 2.384e-06, - 1.0933399e-02 * 0.92387953251128675613 / 2.384e-06, - -2.4725437e-02 * 0.92387953251128675613 / 2.384e-06, - -3.771782e-03 * 0.92387953251128675613 / 2.384e-06, - -4.72546e-04 * 0.92387953251128675613 / 2.384e-06, - -2.7657e-05 * 0.92387953251128675613 / 2.384e-06, - 4.1421356237309504879e-01, /* tan(PI/8) */ - 1.414213562373095e+00, - - -9.54e-07 * 0.941544065183021 / 2.384e-06, - 1.05381e-04 * 0.941544065183021 / 2.384e-06, - 6.10352e-04 * 0.941544065183021 / 2.384e-06, - -4.75883e-04 * 0.941544065183021 / 2.384e-06, - 3.4055710e-02 * 0.941544065183021 / 2.384e-06, - 4.649162e-03 * 0.941544065183021 / 2.384e-06, - 9.35555e-04 * 0.941544065183021 / 2.384e-06, - 7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */ - 5.245e-06 * 0.941544065183021 / 2.384e-06, - 1.7166e-05 * 0.941544065183021 / 2.384e-06, - 9.56535e-04 * 0.941544065183021 / 2.384e-06, - 1.0103703e-02 * 0.941544065183021 / 2.384e-06, - -2.5527000e-02 * 0.941544065183021 / 2.384e-06, - -3.914356e-03 * 0.941544065183021 / 2.384e-06, - -5.07355e-04 * 0.941544065183021 / 2.384e-06, - -3.0041e-05 * 0.941544065183021 / 2.384e-06, - 3.578057213145241e-01, 1.546020906725474e+00, - - -9.54e-07 * 0.956940335732209 / 2.384e-06, - 1.02520e-04 * 0.956940335732209 / 2.384e-06, - 5.39303e-04 * 0.956940335732209 / 2.384e-06, - -1.011848e-03 * 0.956940335732209 / 2.384e-06, - 3.3659935e-02 * 0.956940335732209 / 2.384e-06, - 4.703045e-03 * 0.956940335732209 / 2.384e-06, - 9.15051e-04 * 0.956940335732209 / 2.384e-06, - 7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */ - 4.768e-06 * 0.956940335732209 / 2.384e-06, - 9.54e-07 * 0.956940335732209 / 2.384e-06, - 8.06808e-04 * 0.956940335732209 / 2.384e-06, - 9.287834e-03 * 0.956940335732209 / 2.384e-06, - -2.6310921e-02 * 0.956940335732209 / 2.384e-06, - -4.048824e-03 * 0.956940335732209 / 2.384e-06, - -5.42164e-04 * 0.956940335732209 / 2.384e-06, - -3.2425e-05 * 0.956940335732209 / 2.384e-06, - 3.033466836073424e-01, 1.662939224605090e+00, - - -1.431e-06 * 0.970031253194544 / 2.384e-06, - 9.9182e-05 * 0.970031253194544 / 2.384e-06, - 4.62532e-04 * 0.970031253194544 / 2.384e-06, - -1.573563e-03 * 0.970031253194544 / 2.384e-06, - 3.3225536e-02 * 0.970031253194544 / 2.384e-06, - 4.737377e-03 * 0.970031253194544 / 2.384e-06, - 8.91685e-04 * 0.970031253194544 / 2.384e-06, - 6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */ - 4.292e-06 * 0.970031253194544 / 2.384e-06, - -1.3828e-05 * 0.970031253194544 / 2.384e-06, - 6.61850e-04 * 0.970031253194544 / 2.384e-06, - 8.487225e-03 * 0.970031253194544 / 2.384e-06, - -2.7073860e-02 * 0.970031253194544 / 2.384e-06, - -4.174709e-03 * 0.970031253194544 / 2.384e-06, - -5.76973e-04 * 0.970031253194544 / 2.384e-06, - -3.4809e-05 * 0.970031253194544 / 2.384e-06, - 2.504869601913055e-01, 1.763842528696710e+00, - - -1.431e-06 * 0.98078528040323 / 2.384e-06, - 9.5367e-05 * 0.98078528040323 / 2.384e-06, - 3.78609e-04 * 0.98078528040323 / 2.384e-06, - -2.161503e-03 * 0.98078528040323 / 2.384e-06, - 3.2754898e-02 * 0.98078528040323 / 2.384e-06, - 4.752159e-03 * 0.98078528040323 / 2.384e-06, - 8.66413e-04 * 0.98078528040323 / 2.384e-06, - 6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */ - 3.815e-06 * 0.98078528040323 / 2.384e-06, - -2.718e-05 * 0.98078528040323 / 2.384e-06, - 5.22137e-04 * 0.98078528040323 / 2.384e-06, - 7.703304e-03 * 0.98078528040323 / 2.384e-06, - -2.7815342e-02 * 0.98078528040323 / 2.384e-06, - -4.290581e-03 * 0.98078528040323 / 2.384e-06, - -6.11782e-04 * 0.98078528040323 / 2.384e-06, - -3.7670e-05 * 0.98078528040323 / 2.384e-06, - 1.989123673796580e-01, 1.847759065022573e+00, - - -1.907e-06 * 0.989176509964781 / 2.384e-06, - 9.0122e-05 * 0.989176509964781 / 2.384e-06, - 2.88486e-04 * 0.989176509964781 / 2.384e-06, - -2.774239e-03 * 0.989176509964781 / 2.384e-06, - 3.2248020e-02 * 0.989176509964781 / 2.384e-06, - 4.748821e-03 * 0.989176509964781 / 2.384e-06, - 8.38757e-04 * 0.989176509964781 / 2.384e-06, - 5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */ - 3.338e-06 * 0.989176509964781 / 2.384e-06, - -3.9577e-05 * 0.989176509964781 / 2.384e-06, - 3.88145e-04 * 0.989176509964781 / 2.384e-06, - 6.937027e-03 * 0.989176509964781 / 2.384e-06, - -2.8532982e-02 * 0.989176509964781 / 2.384e-06, - -4.395962e-03 * 0.989176509964781 / 2.384e-06, - -6.46591e-04 * 0.989176509964781 / 2.384e-06, - -4.0531e-05 * 0.989176509964781 / 2.384e-06, - 1.483359875383474e-01, 1.913880671464418e+00, - - -1.907e-06 * 0.995184726672197 / 2.384e-06, - 8.4400e-05 * 0.995184726672197 / 2.384e-06, - 1.91689e-04 * 0.995184726672197 / 2.384e-06, - -3.411293e-03 * 0.995184726672197 / 2.384e-06, - 3.1706810e-02 * 0.995184726672197 / 2.384e-06, - 4.728317e-03 * 0.995184726672197 / 2.384e-06, - 8.09669e-04 * 0.995184726672197 / 2.384e-06, - 5.579e-05 * 0.995184726672197 / 2.384e-06, - 3.338e-06 * 0.995184726672197 / 2.384e-06, - -5.0545e-05 * 0.995184726672197 / 2.384e-06, - 2.59876e-04 * 0.995184726672197 / 2.384e-06, - 6.189346e-03 * 0.995184726672197 / 2.384e-06, - -2.9224873e-02 * 0.995184726672197 / 2.384e-06, - -4.489899e-03 * 0.995184726672197 / 2.384e-06, - -6.80923e-04 * 0.995184726672197 / 2.384e-06, - -4.3392e-05 * 0.995184726672197 / 2.384e-06, - 9.849140335716425e-02, 1.961570560806461e+00, - - -2.384e-06 * 0.998795456205172 / 2.384e-06, - 7.7724e-05 * 0.998795456205172 / 2.384e-06, - 8.8215e-05 * 0.998795456205172 / 2.384e-06, - -4.072189e-03 * 0.998795456205172 / 2.384e-06, - 3.1132698e-02 * 0.998795456205172 / 2.384e-06, - 4.691124e-03 * 0.998795456205172 / 2.384e-06, - 7.79152e-04 * 0.998795456205172 / 2.384e-06, - 5.2929e-05 * 0.998795456205172 / 2.384e-06, - 2.861e-06 * 0.998795456205172 / 2.384e-06, - -6.0558e-05 * 0.998795456205172 / 2.384e-06, - 1.37329e-04 * 0.998795456205172 / 2.384e-06, - 5.462170e-03 * 0.998795456205172 / 2.384e-06, - -2.9890060e-02 * 0.998795456205172 / 2.384e-06, - -4.570484e-03 * 0.998795456205172 / 2.384e-06, - -7.14302e-04 * 0.998795456205172 / 2.384e-06, - -4.6253e-05 * 0.998795456205172 / 2.384e-06, - 4.912684976946725e-02, 1.990369453344394e+00, - - 3.5780907e-02 * Util.SQRT2 * 0.5 / 2.384e-06, - 1.7876148e-02 * Util.SQRT2 * 0.5 / 2.384e-06, - 3.134727e-03 * Util.SQRT2 * 0.5 / 2.384e-06, - 2.457142e-03 * Util.SQRT2 * 0.5 / 2.384e-06, - 9.71317e-04 * Util.SQRT2 * 0.5 / 2.384e-06, - 2.18868e-04 * Util.SQRT2 * 0.5 / 2.384e-06, - 1.01566e-04 * Util.SQRT2 * 0.5 / 2.384e-06, - 1.3828e-05 * Util.SQRT2 * 0.5 / 2.384e-06, - - 3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06, - 7.47204e-04 / 2.384e-06, 4.9591e-05 / 2.384e-06, - 4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06, - -6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */ - ]; - - var NS = 12; - var NL = 36; - - var win = [ - [ - 2.382191739347913e-13, - 6.423305872147834e-13, - 9.400849094049688e-13, - 1.122435026096556e-12, - 1.183840321267481e-12, - 1.122435026096556e-12, - 9.400849094049690e-13, - 6.423305872147839e-13, - 2.382191739347918e-13, - - 5.456116108943412e-12, - 4.878985199565852e-12, - 4.240448995017367e-12, - 3.559909094758252e-12, - 2.858043359288075e-12, - 2.156177623817898e-12, - 1.475637723558783e-12, - 8.371015190102974e-13, - 2.599706096327376e-13, - - -5.456116108943412e-12, - -4.878985199565852e-12, - -4.240448995017367e-12, - -3.559909094758252e-12, - -2.858043359288076e-12, - -2.156177623817898e-12, - -1.475637723558783e-12, - -8.371015190102975e-13, - -2.599706096327376e-13, - - -2.382191739347923e-13, - -6.423305872147843e-13, - -9.400849094049696e-13, - -1.122435026096556e-12, - -1.183840321267481e-12, - -1.122435026096556e-12, - -9.400849094049694e-13, - -6.423305872147840e-13, - -2.382191739347918e-13, - ], - [ - 2.382191739347913e-13, - 6.423305872147834e-13, - 9.400849094049688e-13, - 1.122435026096556e-12, - 1.183840321267481e-12, - 1.122435026096556e-12, - 9.400849094049688e-13, - 6.423305872147841e-13, - 2.382191739347918e-13, - - 5.456116108943413e-12, - 4.878985199565852e-12, - 4.240448995017367e-12, - 3.559909094758253e-12, - 2.858043359288075e-12, - 2.156177623817898e-12, - 1.475637723558782e-12, - 8.371015190102975e-13, - 2.599706096327376e-13, - - -5.461314069809755e-12, - -4.921085770524055e-12, - -4.343405037091838e-12, - -3.732668368707687e-12, - -3.093523840190885e-12, - -2.430835727329465e-12, - -1.734679010007751e-12, - -9.748253656609281e-13, - -2.797435120168326e-13, - - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - -2.283748241799531e-13, - -4.037858874020686e-13, - -2.146547464825323e-13, - ], - [ - 1.316524975873958e-01, /* win[SHORT_TYPE] */ - 4.142135623730950e-01, - 7.673269879789602e-01, - - 1.091308501069271e+00, /* tantab_l */ - 1.303225372841206e+00, - 1.569685577117490e+00, - 1.920982126971166e+00, - 2.414213562373094e+00, - 3.171594802363212e+00, - 4.510708503662055e+00, - 7.595754112725146e+00, - 2.290376554843115e+01, - - 0.98480775301220802032, /* cx */ - 0.64278760968653936292, - 0.34202014332566882393, - 0.93969262078590842791, - -0.17364817766693030343, - -0.76604444311897790243, - 0.86602540378443870761, - 0.500000000000000e+00, - - -5.144957554275265e-01, /* ca */ - -4.717319685649723e-01, - -3.133774542039019e-01, - -1.819131996109812e-01, - -9.457419252642064e-02, - -4.096558288530405e-02, - -1.419856857247115e-02, - -3.699974673760037e-03, - - 8.574929257125442e-01, /* cs */ - 8.817419973177052e-01, - 9.496286491027329e-01, - 9.833145924917901e-01, - 9.955178160675857e-01, - 9.991605581781475e-01, - 9.998991952444470e-01, - 9.999931550702802e-01, - ], - [ - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 2.283748241799531e-13, - 4.037858874020686e-13, - 2.146547464825323e-13, - - 5.461314069809755e-12, - 4.921085770524055e-12, - 4.343405037091838e-12, - 3.732668368707687e-12, - 3.093523840190885e-12, - 2.430835727329466e-12, - 1.734679010007751e-12, - 9.748253656609281e-13, - 2.797435120168326e-13, - - -5.456116108943413e-12, - -4.878985199565852e-12, - -4.240448995017367e-12, - -3.559909094758253e-12, - -2.858043359288075e-12, - -2.156177623817898e-12, - -1.475637723558782e-12, - -8.371015190102975e-13, - -2.599706096327376e-13, - - -2.382191739347913e-13, - -6.423305872147834e-13, - -9.400849094049688e-13, - -1.122435026096556e-12, - -1.183840321267481e-12, - -1.122435026096556e-12, - -9.400849094049688e-13, - -6.423305872147841e-13, - -2.382191739347918e-13, - ] - ]; - - var tantab_l = win[Encoder.SHORT_TYPE]; - var cx = win[Encoder.SHORT_TYPE]; - var ca = win[Encoder.SHORT_TYPE]; - var cs = win[Encoder.SHORT_TYPE]; - - /** - * new IDCT routine written by Takehiro TOMINAGA - * - * PURPOSE: Overlapping window on PCM samples
- * - * SEMANTICS:
- * 32 16-bit pcm samples are scaled to fractional 2's complement and - * concatenated to the end of the window buffer #x#. The updated window - * buffer #x# is then windowed by the analysis window #c# to produce the - * windowed sample #z# - */ - var order = [ - 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29, - 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31 - ]; - - /** - * returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 - */ - function window_subband(x1, x1Pos, a) { - var wp = 10; - - var x2 = x1Pos + 238 - 14 - 286; - - for (var i = -15; i < 0; i++) { - var w, s, t; - - w = enwindow[wp + -10]; - s = x1[x2 + -224] * w; - t = x1[x1Pos + 224] * w; - w = enwindow[wp + -9]; - s += x1[x2 + -160] * w; - t += x1[x1Pos + 160] * w; - w = enwindow[wp + -8]; - s += x1[x2 + -96] * w; - t += x1[x1Pos + 96] * w; - w = enwindow[wp + -7]; - s += x1[x2 + -32] * w; - t += x1[x1Pos + 32] * w; - w = enwindow[wp + -6]; - s += x1[x2 + 32] * w; - t += x1[x1Pos + -32] * w; - w = enwindow[wp + -5]; - s += x1[x2 + 96] * w; - t += x1[x1Pos + -96] * w; - w = enwindow[wp + -4]; - s += x1[x2 + 160] * w; - t += x1[x1Pos + -160] * w; - w = enwindow[wp + -3]; - s += x1[x2 + 224] * w; - t += x1[x1Pos + -224] * w; - - w = enwindow[wp + -2]; - s += x1[x1Pos + -256] * w; - t -= x1[x2 + 256] * w; - w = enwindow[wp + -1]; - s += x1[x1Pos + -192] * w; - t -= x1[x2 + 192] * w; - w = enwindow[wp + 0]; - s += x1[x1Pos + -128] * w; - t -= x1[x2 + 128] * w; - w = enwindow[wp + 1]; - s += x1[x1Pos + -64] * w; - t -= x1[x2 + 64] * w; - w = enwindow[wp + 2]; - s += x1[x1Pos + 0] * w; - t -= x1[x2 + 0] * w; - w = enwindow[wp + 3]; - s += x1[x1Pos + 64] * w; - t -= x1[x2 + -64] * w; - w = enwindow[wp + 4]; - s += x1[x1Pos + 128] * w; - t -= x1[x2 + -128] * w; - w = enwindow[wp + 5]; - s += x1[x1Pos + 192] * w; - t -= x1[x2 + -192] * w; - - /* - * this multiplyer could be removed, but it needs more 256 FLOAT - * data. thinking about the data cache performance, I think we - * should not use such a huge table. tt 2000/Oct/25 - */ - s *= enwindow[wp + 6]; - w = t - s; - a[30 + i * 2] = t + s; - a[31 + i * 2] = enwindow[wp + 7] * w; - wp += 18; - x1Pos--; - x2++; - } - { - var s, t, u, v; - t = x1[x1Pos + -16] * enwindow[wp + -10]; - s = x1[x1Pos + -32] * enwindow[wp + -2]; - t += (x1[x1Pos + -48] - x1[x1Pos + 16]) * enwindow[wp + -9]; - s += x1[x1Pos + -96] * enwindow[wp + -1]; - t += (x1[x1Pos + -80] + x1[x1Pos + 48]) * enwindow[wp + -8]; - s += x1[x1Pos + -160] * enwindow[wp + 0]; - t += (x1[x1Pos + -112] - x1[x1Pos + 80]) * enwindow[wp + -7]; - s += x1[x1Pos + -224] * enwindow[wp + 1]; - t += (x1[x1Pos + -144] + x1[x1Pos + 112]) * enwindow[wp + -6]; - s -= x1[x1Pos + 32] * enwindow[wp + 2]; - t += (x1[x1Pos + -176] - x1[x1Pos + 144]) * enwindow[wp + -5]; - s -= x1[x1Pos + 96] * enwindow[wp + 3]; - t += (x1[x1Pos + -208] + x1[x1Pos + 176]) * enwindow[wp + -4]; - s -= x1[x1Pos + 160] * enwindow[wp + 4]; - t += (x1[x1Pos + -240] - x1[x1Pos + 208]) * enwindow[wp + -3]; - s -= x1[x1Pos + 224]; - - u = s - t; - v = s + t; - - t = a[14]; - s = a[15] - t; - - a[31] = v + t; /* A0 */ - a[30] = u + s; /* A1 */ - a[15] = u - s; /* A2 */ - a[14] = v - t; /* A3 */ - } - { - var xr; - xr = a[28] - a[0]; - a[0] += a[28]; - a[28] = xr * enwindow[wp + -2 * 18 + 7]; - xr = a[29] - a[1]; - a[1] += a[29]; - a[29] = xr * enwindow[wp + -2 * 18 + 7]; - - xr = a[26] - a[2]; - a[2] += a[26]; - a[26] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[27] - a[3]; - a[3] += a[27]; - a[27] = xr * enwindow[wp + -4 * 18 + 7]; - - xr = a[24] - a[4]; - a[4] += a[24]; - a[24] = xr * enwindow[wp + -6 * 18 + 7]; - xr = a[25] - a[5]; - a[5] += a[25]; - a[25] = xr * enwindow[wp + -6 * 18 + 7]; - - xr = a[22] - a[6]; - a[6] += a[22]; - a[22] = xr * Util.SQRT2; - xr = a[23] - a[7]; - a[7] += a[23]; - a[23] = xr * Util.SQRT2 - a[7]; - a[7] -= a[6]; - a[22] -= a[7]; - a[23] -= a[22]; - - xr = a[6]; - a[6] = a[31] - xr; - a[31] = a[31] + xr; - xr = a[7]; - a[7] = a[30] - xr; - a[30] = a[30] + xr; - xr = a[22]; - a[22] = a[15] - xr; - a[15] = a[15] + xr; - xr = a[23]; - a[23] = a[14] - xr; - a[14] = a[14] + xr; - - xr = a[20] - a[8]; - a[8] += a[20]; - a[20] = xr * enwindow[wp + -10 * 18 + 7]; - xr = a[21] - a[9]; - a[9] += a[21]; - a[21] = xr * enwindow[wp + -10 * 18 + 7]; - - xr = a[18] - a[10]; - a[10] += a[18]; - a[18] = xr * enwindow[wp + -12 * 18 + 7]; - xr = a[19] - a[11]; - a[11] += a[19]; - a[19] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[16] - a[12]; - a[12] += a[16]; - a[16] = xr * enwindow[wp + -14 * 18 + 7]; - xr = a[17] - a[13]; - a[13] += a[17]; - a[17] = xr * enwindow[wp + -14 * 18 + 7]; - - xr = -a[20] + a[24]; - a[20] += a[24]; - a[24] = xr * enwindow[wp + -12 * 18 + 7]; - xr = -a[21] + a[25]; - a[21] += a[25]; - a[25] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[4] - a[8]; - a[4] += a[8]; - a[8] = xr * enwindow[wp + -12 * 18 + 7]; - xr = a[5] - a[9]; - a[5] += a[9]; - a[9] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[0] - a[12]; - a[0] += a[12]; - a[12] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[1] - a[13]; - a[1] += a[13]; - a[13] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[16] - a[28]; - a[16] += a[28]; - a[28] = xr * enwindow[wp + -4 * 18 + 7]; - xr = -a[17] + a[29]; - a[17] += a[29]; - a[29] = xr * enwindow[wp + -4 * 18 + 7]; - - xr = Util.SQRT2 * (a[2] - a[10]); - a[2] += a[10]; - a[10] = xr; - xr = Util.SQRT2 * (a[3] - a[11]); - a[3] += a[11]; - a[11] = xr; - xr = Util.SQRT2 * (-a[18] + a[26]); - a[18] += a[26]; - a[26] = xr - a[18]; - xr = Util.SQRT2 * (-a[19] + a[27]); - a[19] += a[27]; - a[27] = xr - a[19]; - - xr = a[2]; - a[19] -= a[3]; - a[3] -= xr; - a[2] = a[31] - xr; - a[31] += xr; - xr = a[3]; - a[11] -= a[19]; - a[18] -= xr; - a[3] = a[30] - xr; - a[30] += xr; - xr = a[18]; - a[27] -= a[11]; - a[19] -= xr; - a[18] = a[15] - xr; - a[15] += xr; - - xr = a[19]; - a[10] -= xr; - a[19] = a[14] - xr; - a[14] += xr; - xr = a[10]; - a[11] -= xr; - a[10] = a[23] - xr; - a[23] += xr; - xr = a[11]; - a[26] -= xr; - a[11] = a[22] - xr; - a[22] += xr; - xr = a[26]; - a[27] -= xr; - a[26] = a[7] - xr; - a[7] += xr; - - xr = a[27]; - a[27] = a[6] - xr; - a[6] += xr; - - xr = Util.SQRT2 * (a[0] - a[4]); - a[0] += a[4]; - a[4] = xr; - xr = Util.SQRT2 * (a[1] - a[5]); - a[1] += a[5]; - a[5] = xr; - xr = Util.SQRT2 * (a[16] - a[20]); - a[16] += a[20]; - a[20] = xr; - xr = Util.SQRT2 * (a[17] - a[21]); - a[17] += a[21]; - a[21] = xr; - - xr = -Util.SQRT2 * (a[8] - a[12]); - a[8] += a[12]; - a[12] = xr - a[8]; - xr = -Util.SQRT2 * (a[9] - a[13]); - a[9] += a[13]; - a[13] = xr - a[9]; - xr = -Util.SQRT2 * (a[25] - a[29]); - a[25] += a[29]; - a[29] = xr - a[25]; - xr = -Util.SQRT2 * (a[24] + a[28]); - a[24] -= a[28]; - a[28] = xr - a[24]; - - xr = a[24] - a[16]; - a[24] = xr; - xr = a[20] - xr; - a[20] = xr; - xr = a[28] - xr; - a[28] = xr; - - xr = a[25] - a[17]; - a[25] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[17] - a[1]; - a[17] = xr; - xr = a[9] - xr; - a[9] = xr; - xr = a[25] - xr; - a[25] = xr; - xr = a[5] - xr; - a[5] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[13] - xr; - a[13] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[1] - a[0]; - a[1] = xr; - xr = a[16] - xr; - a[16] = xr; - xr = a[17] - xr; - a[17] = xr; - xr = a[8] - xr; - a[8] = xr; - xr = a[9] - xr; - a[9] = xr; - xr = a[24] - xr; - a[24] = xr; - xr = a[25] - xr; - a[25] = xr; - xr = a[4] - xr; - a[4] = xr; - xr = a[5] - xr; - a[5] = xr; - xr = a[20] - xr; - a[20] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[12] - xr; - a[12] = xr; - xr = a[13] - xr; - a[13] = xr; - xr = a[28] - xr; - a[28] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[0]; - a[0] += a[31]; - a[31] -= xr; - xr = a[1]; - a[1] += a[30]; - a[30] -= xr; - xr = a[16]; - a[16] += a[15]; - a[15] -= xr; - xr = a[17]; - a[17] += a[14]; - a[14] -= xr; - xr = a[8]; - a[8] += a[23]; - a[23] -= xr; - xr = a[9]; - a[9] += a[22]; - a[22] -= xr; - xr = a[24]; - a[24] += a[7]; - a[7] -= xr; - xr = a[25]; - a[25] += a[6]; - a[6] -= xr; - xr = a[4]; - a[4] += a[27]; - a[27] -= xr; - xr = a[5]; - a[5] += a[26]; - a[26] -= xr; - xr = a[20]; - a[20] += a[11]; - a[11] -= xr; - xr = a[21]; - a[21] += a[10]; - a[10] -= xr; - xr = a[12]; - a[12] += a[19]; - a[19] -= xr; - xr = a[13]; - a[13] += a[18]; - a[18] -= xr; - xr = a[28]; - a[28] += a[3]; - a[3] -= xr; - xr = a[29]; - a[29] += a[2]; - a[2] -= xr; - } - } - - /** - * Function: Calculation of the MDCT In the case of long blocks (type 0,1,3) - * there are 36 coefficents in the time domain and 18 in the frequency - * domain.
- * In the case of short blocks (type 2) there are 3 transformations with - * short length. This leads to 12 coefficents in the time and 6 in the - * frequency domain. In this case the results are stored side by side in the - * vector out[]. - * - * New layer3 - */ - function mdct_short(inout, inoutPos) { - for (var l = 0; l < 3; l++) { - var tc0, tc1, tc2, ts0, ts1, ts2; - - ts0 = inout[inoutPos + 2 * 3] * win[Encoder.SHORT_TYPE][0] - - inout[inoutPos + 5 * 3]; - tc0 = inout[inoutPos + 0 * 3] * win[Encoder.SHORT_TYPE][2] - - inout[inoutPos + 3 * 3]; - tc1 = ts0 + tc0; - tc2 = ts0 - tc0; - - ts0 = inout[inoutPos + 5 * 3] * win[Encoder.SHORT_TYPE][0] - + inout[inoutPos + 2 * 3]; - tc0 = inout[inoutPos + 3 * 3] * win[Encoder.SHORT_TYPE][2] - + inout[inoutPos + 0 * 3]; - ts1 = ts0 + tc0; - ts2 = -ts0 + tc0; - - tc0 = (inout[inoutPos + 1 * 3] * win[Encoder.SHORT_TYPE][1] - inout[inoutPos + 4 * 3]) * 2.069978111953089e-11; - /* - * tritab_s [ 1 ] - */ - ts0 = (inout[inoutPos + 4 * 3] * win[Encoder.SHORT_TYPE][1] + inout[inoutPos + 1 * 3]) * 2.069978111953089e-11; - /* - * tritab_s [ 1 ] - */ - inout[inoutPos + 3 * 0] = tc1 * 1.907525191737280e-11 + tc0; - /* - * tritab_s[ 2 ] - */ - inout[inoutPos + 3 * 5] = -ts1 * 1.907525191737280e-11 + ts0; - /* - * tritab_s[0 ] - */ - tc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11; - /* - * tritab_s[ 2] - */ - ts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0; - inout[inoutPos + 3 * 1] = tc2 - ts1; - inout[inoutPos + 3 * 2] = tc2 + ts1; - - tc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0; - ts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11; - /* - * tritab_s[ 0] - */ - inout[inoutPos + 3 * 3] = tc1 + ts2; - inout[inoutPos + 3 * 4] = tc1 - ts2; - - inoutPos++; - } - } - - function mdct_long(out, outPos, _in) { - var ct, st; - { - var tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8; - /* 1,2, 5,6, 9,10, 13,14, 17 */ - tc1 = _in[17] - _in[9]; - tc3 = _in[15] - _in[11]; - tc4 = _in[14] - _in[12]; - ts5 = _in[0] + _in[8]; - ts6 = _in[1] + _in[7]; - ts7 = _in[2] + _in[6]; - ts8 = _in[3] + _in[5]; - - out[outPos + 17] = (ts5 + ts7 - ts8) - (ts6 - _in[4]); - st = (ts5 + ts7 - ts8) * cx[12 + 7] + (ts6 - _in[4]); - ct = (tc1 - tc3 - tc4) * cx[12 + 6]; - out[outPos + 5] = ct + st; - out[outPos + 6] = ct - st; - - tc2 = (_in[16] - _in[10]) * cx[12 + 6]; - ts6 = ts6 * cx[12 + 7] + _in[4]; - ct = tc1 * cx[12 + 0] + tc2 + tc3 * cx[12 + 1] + tc4 * cx[12 + 2]; - st = -ts5 * cx[12 + 4] + ts6 - ts7 * cx[12 + 5] + ts8 * cx[12 + 3]; - out[outPos + 1] = ct + st; - out[outPos + 2] = ct - st; - - ct = tc1 * cx[12 + 1] - tc2 - tc3 * cx[12 + 2] + tc4 * cx[12 + 0]; - st = -ts5 * cx[12 + 5] + ts6 - ts7 * cx[12 + 3] + ts8 * cx[12 + 4]; - out[outPos + 9] = ct + st; - out[outPos + 10] = ct - st; - - ct = tc1 * cx[12 + 2] - tc2 + tc3 * cx[12 + 0] - tc4 * cx[12 + 1]; - st = ts5 * cx[12 + 3] - ts6 + ts7 * cx[12 + 4] - ts8 * cx[12 + 5]; - out[outPos + 13] = ct + st; - out[outPos + 14] = ct - st; - } - { - var ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8; - - ts1 = _in[8] - _in[0]; - ts3 = _in[6] - _in[2]; - ts4 = _in[5] - _in[3]; - tc5 = _in[17] + _in[9]; - tc6 = _in[16] + _in[10]; - tc7 = _in[15] + _in[11]; - tc8 = _in[14] + _in[12]; - - out[outPos + 0] = (tc5 + tc7 + tc8) + (tc6 + _in[13]); - ct = (tc5 + tc7 + tc8) * cx[12 + 7] - (tc6 + _in[13]); - st = (ts1 - ts3 + ts4) * cx[12 + 6]; - out[outPos + 11] = ct + st; - out[outPos + 12] = ct - st; - - ts2 = (_in[7] - _in[1]) * cx[12 + 6]; - tc6 = _in[13] - tc6 * cx[12 + 7]; - ct = tc5 * cx[12 + 3] - tc6 + tc7 * cx[12 + 4] + tc8 * cx[12 + 5]; - st = ts1 * cx[12 + 2] + ts2 + ts3 * cx[12 + 0] + ts4 * cx[12 + 1]; - out[outPos + 3] = ct + st; - out[outPos + 4] = ct - st; - - ct = -tc5 * cx[12 + 5] + tc6 - tc7 * cx[12 + 3] - tc8 * cx[12 + 4]; - st = ts1 * cx[12 + 1] + ts2 - ts3 * cx[12 + 2] - ts4 * cx[12 + 0]; - out[outPos + 7] = ct + st; - out[outPos + 8] = ct - st; - - ct = -tc5 * cx[12 + 4] + tc6 - tc7 * cx[12 + 5] - tc8 * cx[12 + 3]; - st = ts1 * cx[12 + 0] - ts2 + ts3 * cx[12 + 1] - ts4 * cx[12 + 2]; - out[outPos + 15] = ct + st; - out[outPos + 16] = ct - st; - } - } - - this.mdct_sub48 = function(gfc, w0, w1) { - var wk = w0; - var wkPos = 286; - /* thinking cache performance, ch->gr loop is better than gr->ch loop */ - for (var ch = 0; ch < gfc.channels_out; ch++) { - for (var gr = 0; gr < gfc.mode_gr; gr++) { - var band; - var gi = (gfc.l3_side.tt[gr][ch]); - var mdct_enc = gi.xr; - var mdct_encPos = 0; - var samp = gfc.sb_sample[ch][1 - gr]; - var sampPos = 0; - - for (var k = 0; k < 18 / 2; k++) { - window_subband(wk, wkPos, samp[sampPos]); - window_subband(wk, wkPos + 32, samp[sampPos + 1]); - sampPos += 2; - wkPos += 64; - /* - * Compensate for inversion in the analysis filter - */ - for (band = 1; band < 32; band += 2) { - samp[sampPos - 1][band] *= -1; - } - } - - /* - * Perform imdct of 18 previous subband samples + 18 current - * subband samples - */ - for (band = 0; band < 32; band++, mdct_encPos += 18) { - var type = gi.block_type; - var band0 = gfc.sb_sample[ch][gr]; - var band1 = gfc.sb_sample[ch][1 - gr]; - if (gi.mixed_block_flag != 0 && band < 2) - type = 0; - if (gfc.amp_filter[band] < 1e-12) { - Arrays.fill(mdct_enc, mdct_encPos + 0, - mdct_encPos + 18, 0); - } else { - if (gfc.amp_filter[band] < 1.0) { - for (var k = 0; k < 18; k++) - band1[k][order[band]] *= gfc.amp_filter[band]; - } - if (type == Encoder.SHORT_TYPE) { - for (var k = -NS / 4; k < 0; k++) { - var w = win[Encoder.SHORT_TYPE][k + 3]; - mdct_enc[mdct_encPos + k * 3 + 9] = band0[9 + k][order[band]] - * w - band0[8 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 18] = band0[14 - k][order[band]] - * w + band0[15 + k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 10] = band0[15 + k][order[band]] - * w - band0[14 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 19] = band1[2 - k][order[band]] - * w + band1[3 + k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 11] = band1[3 + k][order[band]] - * w - band1[2 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 20] = band1[8 - k][order[band]] - * w + band1[9 + k][order[band]]; - } - mdct_short(mdct_enc, mdct_encPos); - } else { - var work = new_float(18); - for (var k = -NL / 4; k < 0; k++) { - var a, b; - a = win[type][k + 27] - * band1[k + 9][order[band]] - + win[type][k + 36] - * band1[8 - k][order[band]]; - b = win[type][k + 9] - * band0[k + 9][order[band]] - - win[type][k + 18] - * band0[8 - k][order[band]]; - work[k + 9] = a - b * tantab_l[3 + k + 9]; - work[k + 18] = a * tantab_l[3 + k + 9] + b; - } - - mdct_long(mdct_enc, mdct_encPos, work); - } - } - /* - * Perform aliasing reduction butterfly - */ - if (type != Encoder.SHORT_TYPE && band != 0) { - for (var k = 7; k >= 0; --k) { - var bu, bd; - bu = mdct_enc[mdct_encPos + k] * ca[20 + k] - + mdct_enc[mdct_encPos + -1 - k] - * cs[28 + k]; - bd = mdct_enc[mdct_encPos + k] * cs[28 + k] - - mdct_enc[mdct_encPos + -1 - k] - * ca[20 + k]; - - mdct_enc[mdct_encPos + -1 - k] = bu; - mdct_enc[mdct_encPos + k] = bd; - } - } - } - } - wk = w1; - wkPos = 286; - if (gfc.mode_gr == 1) { - for (var i = 0; i < 18; i++) { - System.arraycopy(gfc.sb_sample[ch][1][i], 0, - gfc.sb_sample[ch][0][i], 0, 32); - } - } - } - } -} - -//package mp3; - - -function III_psy_ratio() { - this.thm = new III_psy_xmin(); - this.en = new III_psy_xmin(); -} - - -/** - * ENCDELAY The encoder delay. - * - * Minimum allowed is MDCTDELAY (see below) - * - * The first 96 samples will be attenuated, so using a value less than 96 - * will result in corrupt data for the first 96-ENCDELAY samples. - * - * suggested: 576 set to 1160 to sync with FhG. - */ -Encoder.ENCDELAY = 576; -/** - * make sure there is at least one complete frame after the last frame - * containing real data - * - * Using a value of 288 would be sufficient for a a very sophisticated - * decoder that can decode granule-by-granule instead of frame by frame. But - * lets not assume this, and assume the decoder will not decode frame N - * unless it also has data for frame N+1 - */ -Encoder.POSTDELAY = 1152; - -/** - * delay of the MDCT used in mdct.c original ISO routines had a delay of - * 528! Takehiro's routines: - */ -Encoder.MDCTDELAY = 48; -Encoder.FFTOFFSET = (224 + Encoder.MDCTDELAY); - -/** - * Most decoders, including the one we use, have a delay of 528 samples. - */ -Encoder.DECDELAY = 528; - -/** - * number of subbands - */ -Encoder.SBLIMIT = 32; - -/** - * parition bands bands - */ -Encoder.CBANDS = 64; - -/** - * number of critical bands/scale factor bands where masking is computed - */ -Encoder.SBPSY_l = 21; -Encoder.SBPSY_s = 12; - -/** - * total number of scalefactor bands encoded - */ -Encoder.SBMAX_l = 22; -Encoder.SBMAX_s = 13; -Encoder.PSFB21 = 6; -Encoder.PSFB12 = 6; - -/** - * FFT sizes - */ -Encoder.BLKSIZE = 1024; -Encoder.HBLKSIZE = (Encoder.BLKSIZE / 2 + 1); -Encoder.BLKSIZE_s = 256; -Encoder.HBLKSIZE_s = (Encoder.BLKSIZE_s / 2 + 1); - -Encoder.NORM_TYPE = 0; -Encoder.START_TYPE = 1; -Encoder.SHORT_TYPE = 2; -Encoder.STOP_TYPE = 3; - -/** - *
- * Mode Extention:
- * When we are in stereo mode, there are 4 possible methods to store these
- * two channels. The stereo modes -m? are using a subset of them.
- *
- *  -ms: MPG_MD_LR_LR
- *  -mj: MPG_MD_LR_LR and MPG_MD_MS_LR
- *  -mf: MPG_MD_MS_LR
- *  -mi: all
- * 
- */ -Encoder.MPG_MD_LR_LR = 0; -Encoder.MPG_MD_LR_I = 1; -Encoder.MPG_MD_MS_LR = 2; -Encoder.MPG_MD_MS_I = 3; - -Encoder.fircoef = [-0.0207887 * 5, -0.0378413 * 5, - -0.0432472 * 5, -0.031183 * 5, 7.79609e-18 * 5, 0.0467745 * 5, - 0.10091 * 5, 0.151365 * 5, 0.187098 * 5]; - -function Encoder() { - - var FFTOFFSET = Encoder.FFTOFFSET; - var MPG_MD_MS_LR = Encoder.MPG_MD_MS_LR; - //BitStream bs; - //PsyModel psy; - //VBRTag vbr; - //QuantizePVT qupvt; - var bs = null; - this.psy = null; - var psy = null; - var vbr = null; - var qupvt = null; - - //public final void setModules(BitStream bs, PsyModel psy, QuantizePVT qupvt, - // VBRTag vbr) { - this.setModules = function (_bs, _psy, _qupvt, _vbr) { - bs = _bs; - this.psy = _psy; - psy = _psy; - vbr = _vbr; - qupvt = _qupvt; - }; - - var newMDCT = new NewMDCT(); - - /*********************************************************************** - * - * encoder and decoder delays - * - ***********************************************************************/ - - /** - *
-     * layer III enc->dec delay:  1056 (1057?)   (observed)
-     * layer  II enc->dec delay:   480  (481?)   (observed)
-     *
-     * polyphase 256-16             (dec or enc)        = 240
-     * mdct      256+32  (9*32)     (dec or enc)        = 288
-     * total:    512+16
-     *
-     * My guess is that delay of polyphase filterbank is actualy 240.5
-     * (there are technical reasons for this, see postings in mp3encoder).
-     * So total Encode+Decode delay = ENCDELAY + 528 + 1
-     * 
- */ - - - /** - * auto-adjust of ATH, useful for low volume Gabriel Bouvigne 3 feb 2001 - * - * modifies some values in gfp.internal_flags.ATH (gfc.ATH) - */ -//private void adjust_ATH(final LameInternalFlags gfc) { - function adjust_ATH(gfc) { - var gr2_max, max_pow; - - if (gfc.ATH.useAdjust == 0) { - gfc.ATH.adjust = 1.0; - /* no adjustment */ - return; - } - - /* jd - 2001 mar 12, 27, jun 30 */ - /* loudness based on equal loudness curve; */ - /* use granule with maximum combined loudness */ - max_pow = gfc.loudness_sq[0][0]; - gr2_max = gfc.loudness_sq[1][0]; - if (gfc.channels_out == 2) { - max_pow += gfc.loudness_sq[0][1]; - gr2_max += gfc.loudness_sq[1][1]; - } else { - max_pow += max_pow; - gr2_max += gr2_max; - } - if (gfc.mode_gr == 2) { - max_pow = Math.max(max_pow, gr2_max); - } - max_pow *= 0.5; - /* max_pow approaches 1.0 for full band noise */ - - /* jd - 2001 mar 31, jun 30 */ - /* user tuning of ATH adjustment region */ - max_pow *= gfc.ATH.aaSensitivityP; - - /* - * adjust ATH depending on range of maximum value - */ - - /* jd - 2001 feb27, mar12,20, jun30, jul22 */ - /* continuous curves based on approximation */ - /* to GB's original values. */ - /* For an increase in approximate loudness, */ - /* set ATH adjust to adjust_limit immediately */ - /* after a delay of one frame. */ - /* For a loudness decrease, reduce ATH adjust */ - /* towards adjust_limit gradually. */ - /* max_pow is a loudness squared or a power. */ - if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */ - if (gfc.ATH.adjust >= 1.0) { - gfc.ATH.adjust = 1.0; - } else { - /* preceding frame has lower ATH adjust; */ - /* ascend only to the preceding adjust_limit */ - /* in case there is leading low volume */ - if (gfc.ATH.adjust < gfc.ATH.adjustLimit) { - gfc.ATH.adjust = gfc.ATH.adjustLimit; - } - } - gfc.ATH.adjustLimit = 1.0; - } else { /* adjustment curve */ - /* about 32 dB maximum adjust (0.000625) */ - var adj_lim_new = 31.98 * max_pow + 0.000625; - if (gfc.ATH.adjust >= adj_lim_new) { /* descend gradually */ - gfc.ATH.adjust *= adj_lim_new * 0.075 + 0.925; - if (gfc.ATH.adjust < adj_lim_new) { /* stop descent */ - gfc.ATH.adjust = adj_lim_new; - } - } else { /* ascend */ - if (gfc.ATH.adjustLimit >= adj_lim_new) { - gfc.ATH.adjust = adj_lim_new; - } else { - /* preceding frame has lower ATH adjust; */ - /* ascend only to the preceding adjust_limit */ - if (gfc.ATH.adjust < gfc.ATH.adjustLimit) { - gfc.ATH.adjust = gfc.ATH.adjustLimit; - } - } - } - gfc.ATH.adjustLimit = adj_lim_new; - } - } - - /** - *
-     *  some simple statistics
-     *
-     *  bitrate index 0: free bitrate . not allowed in VBR mode
-     *  : bitrates, kbps depending on MPEG version
-     *  bitrate index 15: forbidden
-     *
-     *  mode_ext:
-     *  0:  LR
-     *  1:  LR-i
-     *  2:  MS
-     *  3:  MS-i
-     * 
- */ - function updateStats(gfc) { - var gr, ch; - - /* count bitrate indices */ - gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][4]++; - gfc.bitrate_stereoMode_Hist[15][4]++; - - /* count 'em for every mode extension in case of 2 channel encoding */ - if (gfc.channels_out == 2) { - gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][gfc.mode_ext]++; - gfc.bitrate_stereoMode_Hist[15][gfc.mode_ext]++; - } - for (gr = 0; gr < gfc.mode_gr; ++gr) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - var bt = gfc.l3_side.tt[gr][ch].block_type | 0; - if (gfc.l3_side.tt[gr][ch].mixed_block_flag != 0) - bt = 4; - gfc.bitrate_blockType_Hist[gfc.bitrate_index][bt]++; - gfc.bitrate_blockType_Hist[gfc.bitrate_index][5]++; - gfc.bitrate_blockType_Hist[15][bt]++; - gfc.bitrate_blockType_Hist[15][5]++; - } - } - } - - function lame_encode_frame_init(gfp, inbuf) { - var gfc = gfp.internal_flags; - - var ch, gr; - - if (gfc.lame_encode_frame_init == 0) { - /* prime the MDCT/polyphase filterbank with a short block */ - var i, j; - var primebuff0 = new_float(286 + 1152 + 576); - var primebuff1 = new_float(286 + 1152 + 576); - gfc.lame_encode_frame_init = 1; - for (i = 0, j = 0; i < 286 + 576 * (1 + gfc.mode_gr); ++i) { - if (i < 576 * gfc.mode_gr) { - primebuff0[i] = 0; - if (gfc.channels_out == 2) - primebuff1[i] = 0; - } else { - primebuff0[i] = inbuf[0][j]; - if (gfc.channels_out == 2) - primebuff1[i] = inbuf[1][j]; - ++j; - } - } - /* polyphase filtering / mdct */ - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.l3_side.tt[gr][ch].block_type = Encoder.SHORT_TYPE; - } - } - newMDCT.mdct_sub48(gfc, primebuff0, primebuff1); - - /* check FFT will not use a negative starting offset */ - /* check if we have enough data for FFT */ - /* check if we have enough data for polyphase filterbank */ - } - - } - - /** - *
-     * encodeframe()           Layer 3
-     *
-     * encode a single frame
-     *
-     *
-     *    lame_encode_frame()
-     *
-     *
-     *                           gr 0            gr 1
-     *    inbuf:           |--------------|--------------|--------------|
-     *
-     *
-     *    Polyphase (18 windows, each shifted 32)
-     *    gr 0:
-     *    window1          <----512---.
-     *    window18                 <----512---.
-     *
-     *    gr 1:
-     *    window1                         <----512---.
-     *    window18                                <----512---.
-     *
-     *
-     *
-     *    MDCT output:  |--------------|--------------|--------------|
-     *
-     *    FFT's                    <---------1024---------.
-     *                                             <---------1024-------.
-     *
-     *
-     *
-     *        inbuf = buffer of PCM data size=MP3 framesize
-     *        encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY
-     *        so the MDCT coefficints are from inbuf[ch][-MDCTDELAY]
-     *
-     *        psy-model FFT has a 1 granule delay, so we feed it data for the
-     *        next granule.
-     *        FFT is centered over granule:  224+576+224
-     *        So FFT starts at:   576-224-MDCTDELAY
-     *
-     *        MPEG2:  FFT ends at:  BLKSIZE+576-224-MDCTDELAY      (1328)
-     *        MPEG1:  FFT ends at:  BLKSIZE+2*576-224-MDCTDELAY    (1904)
-     *
-     *        MPEG2:  polyphase first window:  [0..511]
-     *                          18th window:   [544..1055]          (1056)
-     *        MPEG1:            36th window:   [1120..1631]         (1632)
-     *                data needed:  512+framesize-32
-     *
-     *        A close look newmdct.c shows that the polyphase filterbank
-     *        only uses data from [0..510] for each window.  Perhaps because the window
-     *        used by the filterbank is zero for the last point, so Takehiro's
-     *        code doesn't bother to compute with it.
-     *
-     *        FFT starts at 576-224-MDCTDELAY (304)  = 576-FFTOFFSET
-     *
-     * 
- */ - - - this.lame_encode_mp3_frame = function (gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) { - var mp3count; - var masking_LR = new_array_n([2, 2]); - /* - * LR masking & - * energy - */ - masking_LR[0][0] = new III_psy_ratio(); - masking_LR[0][1] = new III_psy_ratio(); - masking_LR[1][0] = new III_psy_ratio(); - masking_LR[1][1] = new III_psy_ratio(); - var masking_MS = new_array_n([2, 2]); - /* MS masking & energy */ - masking_MS[0][0] = new III_psy_ratio(); - masking_MS[0][1] = new III_psy_ratio(); - masking_MS[1][0] = new III_psy_ratio(); - masking_MS[1][1] = new III_psy_ratio(); - //III_psy_ratio masking[][]; - var masking; - /* pointer to selected maskings */ - var inbuf = [null, null]; - var gfc = gfp.internal_flags; - - var tot_ener = new_float_n([2, 4]); - var ms_ener_ratio = [.5, .5]; - var pe = [[0., 0.], [0., 0.]]; - var pe_MS = [[0., 0.], [0., 0.]]; - -//float[][] pe_use; - var pe_use; - - var ch, gr; - - inbuf[0] = inbuf_l; - inbuf[1] = inbuf_r; - - if (gfc.lame_encode_frame_init == 0) { - /* first run? */ - lame_encode_frame_init(gfp, inbuf); - - } - - /********************** padding *****************************/ - /** - *
-         * padding method as described in
-         * "MPEG-Layer3 / Bitstream Syntax and Decoding"
-         * by Martin Sieler, Ralph Sperschneider
-         *
-         * note: there is no padding for the very first frame
-         *
-         * Robert Hegemann 2000-06-22
-         * 
- */ - gfc.padding = 0; - if ((gfc.slot_lag -= gfc.frac_SpF) < 0) { - gfc.slot_lag += gfp.out_samplerate; - gfc.padding = 1; - } - - /**************************************** - * Stage 1: psychoacoustic model * - ****************************************/ - - if (gfc.psymodel != 0) { - /* - * psychoacoustic model psy model has a 1 granule (576) delay that - * we must compensate for (mt 6/99). - */ - var ret; - var bufp = [null, null]; - /* address of beginning of left & right granule */ - var bufpPos = 0; - /* address of beginning of left & right granule */ - var blocktype = new_int(2); - - for (gr = 0; gr < gfc.mode_gr; gr++) { - - for (ch = 0; ch < gfc.channels_out; ch++) { - bufp[ch] = inbuf[ch]; - bufpPos = 576 + gr * 576 - Encoder.FFTOFFSET; - } - if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) { - ret = psy.L3psycho_anal_vbr(gfp, bufp, bufpPos, gr, - masking_LR, masking_MS, pe[gr], pe_MS[gr], - tot_ener[gr], blocktype); - } else { - ret = psy.L3psycho_anal_ns(gfp, bufp, bufpPos, gr, - masking_LR, masking_MS, pe[gr], pe_MS[gr], - tot_ener[gr], blocktype); - } - if (ret != 0) - return -4; - - if (gfp.mode == MPEGMode.JOINT_STEREO) { - ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3]; - if (ms_ener_ratio[gr] > 0) - ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr]; - } - - /* block type flags */ - for (ch = 0; ch < gfc.channels_out; ch++) { - var cod_info = gfc.l3_side.tt[gr][ch]; - cod_info.block_type = blocktype[ch]; - cod_info.mixed_block_flag = 0; - } - } - } else { - /* no psy model */ - for (gr = 0; gr < gfc.mode_gr; gr++) - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.l3_side.tt[gr][ch].block_type = Encoder.NORM_TYPE; - gfc.l3_side.tt[gr][ch].mixed_block_flag = 0; - pe_MS[gr][ch] = pe[gr][ch] = 700; - } - } - - /* auto-adjust of ATH, useful for low volume */ - adjust_ATH(gfc); - - /**************************************** - * Stage 2: MDCT * - ****************************************/ - - /* polyphase filtering / mdct */ - newMDCT.mdct_sub48(gfc, inbuf[0], inbuf[1]); - - /**************************************** - * Stage 3: MS/LR decision * - ****************************************/ - - /* Here will be selected MS or LR coding of the 2 stereo channels */ - gfc.mode_ext = Encoder.MPG_MD_LR_LR; - - if (gfp.force_ms) { - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - } else if (gfp.mode == MPEGMode.JOINT_STEREO) { - /* - * ms_ratio = is scaled, for historical reasons, to look like a - * ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R - * uncorrelated - */ - - /** - *
-             * [0] and [1] are the results for the two granules in MPEG-1,
-             * in MPEG-2 it's only a faked averaging of the same value
-             * _prev is the value of the last granule of the previous frame
-             * _next is the value of the first granule of the next frame
-             * 
- */ - - var sum_pe_MS = 0.; - var sum_pe_LR = 0.; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - sum_pe_MS += pe_MS[gr][ch]; - sum_pe_LR += pe[gr][ch]; - } - } - - /* based on PE: M/S coding would not use much more bits than L/R */ - if (sum_pe_MS <= 1.00 * sum_pe_LR) { - - var gi0 = gfc.l3_side.tt[0]; - var gi1 = gfc.l3_side.tt[gfc.mode_gr - 1]; - - if (gi0[0].block_type == gi0[1].block_type - && gi1[0].block_type == gi1[1].block_type) { - - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - } - } - } - - /* bit and noise allocation */ - if (gfc.mode_ext == MPG_MD_MS_LR) { - masking = masking_MS; - /* use MS masking */ - pe_use = pe_MS; - } else { - masking = masking_LR; - /* use LR masking */ - pe_use = pe; - } - - /* copy data for MP3 frame analyzer */ - if (gfp.analysis && gfc.pinfo != null) { - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.pinfo.ms_ratio[gr] = gfc.ms_ratio[gr]; - gfc.pinfo.ms_ener_ratio[gr] = ms_ener_ratio[gr]; - gfc.pinfo.blocktype[gr][ch] = gfc.l3_side.tt[gr][ch].block_type; - gfc.pinfo.pe[gr][ch] = pe_use[gr][ch]; - System.arraycopy(gfc.l3_side.tt[gr][ch].xr, 0, - gfc.pinfo.xr[gr][ch], 0, 576); - /* - * in psymodel, LR and MS data was stored in pinfo. switch - * to MS data: - */ - if (gfc.mode_ext == MPG_MD_MS_LR) { - gfc.pinfo.ers[gr][ch] = gfc.pinfo.ers[gr][ch + 2]; - System.arraycopy(gfc.pinfo.energy[gr][ch + 2], 0, - gfc.pinfo.energy[gr][ch], 0, - gfc.pinfo.energy[gr][ch].length); - } - } - } - } - - /**************************************** - * Stage 4: quantization loop * - ****************************************/ - - if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr) { - - var i; - var f; - - for (i = 0; i < 18; i++) - gfc.nsPsy.pefirbuf[i] = gfc.nsPsy.pefirbuf[i + 1]; - - f = 0.0; - for (gr = 0; gr < gfc.mode_gr; gr++) - for (ch = 0; ch < gfc.channels_out; ch++) - f += pe_use[gr][ch]; - gfc.nsPsy.pefirbuf[18] = f; - - f = gfc.nsPsy.pefirbuf[9]; - for (i = 0; i < 9; i++) - f += (gfc.nsPsy.pefirbuf[i] + gfc.nsPsy.pefirbuf[18 - i]) - * Encoder.fircoef[i]; - - f = (670 * 5 * gfc.mode_gr * gfc.channels_out) / f; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - pe_use[gr][ch] *= f; - } - } - } - gfc.iteration_loop.iteration_loop(gfp, pe_use, ms_ener_ratio, masking); - - /**************************************** - * Stage 5: bitstream formatting * - ****************************************/ - - /* write the frame to the bitstream */ - bs.format_bitstream(gfp); - - /* copy mp3 bit buffer into array */ - mp3count = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 1); - - if (gfp.bWriteVbrTag) - vbr.addVbrFrame(gfp); - - if (gfp.analysis && gfc.pinfo != null) { - for (ch = 0; ch < gfc.channels_out; ch++) { - var j; - for (j = 0; j < FFTOFFSET; j++) - gfc.pinfo.pcmdata[ch][j] = gfc.pinfo.pcmdata[ch][j - + gfp.framesize]; - for (j = FFTOFFSET; j < 1600; j++) { - gfc.pinfo.pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET]; - } - } - qupvt.set_frame_pinfo(gfp, masking); - } - - updateStats(gfc); - - return mp3count; - } -} - - -//package mp3; - -function VBRSeekInfo() { - /** - * What we have seen so far. - */ - this.sum = 0; - /** - * How many frames we have seen in this chunk. - */ - this.seen = 0; - /** - * How many frames we want to collect into one chunk. - */ - this.want = 0; - /** - * Actual position in our bag. - */ - this.pos = 0; - /** - * Size of our bag. - */ - this.size = 0; - /** - * Pointer to our bag. - */ - this.bag = null; - this.nVbrNumFrames = 0; - this.nBytesWritten = 0; - /* VBR tag data */ - this.TotalFrameSize = 0; -} - - - -function IIISideInfo() { - this.tt = [[null, null], [null, null]]; - this.main_data_begin = 0; - this.private_bits = 0; - this.resvDrain_pre = 0; - this.resvDrain_post = 0; - this.scfsi = [new_int(4), new_int(4)]; - - for (var gr = 0; gr < 2; gr++) { - for (var ch = 0; ch < 2; ch++) { - this.tt[gr][ch] = new GrInfo(); - } - } -} - - - -//package mp3; - -/** - * Variables used for --nspsytune - * - * @author Ken - * - */ -function NsPsy() { - this.last_en_subshort = new_float_n([4, 9]); - this.lastAttacks = new_int(4); - this.pefirbuf = new_float(19); - this.longfact = new_float(Encoder.SBMAX_l); - this.shortfact = new_float(Encoder.SBMAX_s); - - /** - * short block tuning - */ - this.attackthre = 0.; - this.attackthre_s = 0.; -} - - -function III_psy_xmin() { - this.l = new_float(Encoder.SBMAX_l); - this.s = new_float_n([Encoder.SBMAX_s, 3]); - - var self = this; - this.assign = function (iii_psy_xmin) { - System.arraycopy(iii_psy_xmin.l, 0, self.l, 0, Encoder.SBMAX_l); - for (var i = 0; i < Encoder.SBMAX_s; i++) { - for (var j = 0; j < 3; j++) { - self.s[i][j] = iii_psy_xmin.s[i][j]; - } - } - } -} - - - - -LameInternalFlags.MFSIZE = (3 * 1152 + Encoder.ENCDELAY - Encoder.MDCTDELAY); -LameInternalFlags.MAX_HEADER_BUF = 256; -LameInternalFlags.MAX_BITS_PER_CHANNEL = 4095; -LameInternalFlags.MAX_BITS_PER_GRANULE = 7680; -LameInternalFlags.BPC = 320; - -function LameInternalFlags() { - var MAX_HEADER_LEN = 40; - - - /******************************************************************** - * internal variables NOT set by calling program, and should not be * - * modified by the calling program * - ********************************************************************/ - - /** - * Some remarks to the Class_ID field: The Class ID is an Identifier for a - * pointer to this struct. It is very unlikely that a pointer to - * lame_global_flags has the same 32 bits in it's structure (large and other - * special properties, for instance prime). - * - * To test that the structure is right and initialized, use: if ( gfc . - * Class_ID == LAME_ID ) ... Other remark: If you set a flag to 0 for uninit - * data and 1 for init data, the right test should be "if (flag == 1)" and - * NOT "if (flag)". Unintended modification of this element will be - * otherwise misinterpreted as an init. - */ - this.Class_ID = 0; - - this.lame_encode_frame_init = 0; - this.iteration_init_init = 0; - this.fill_buffer_resample_init = 0; - - //public float mfbuf[][] = new float[2][MFSIZE]; - this.mfbuf = new_float_n([2, LameInternalFlags.MFSIZE]); - - /** - * granules per frame - */ - this.mode_gr = 0; - /** - * number of channels in the input data stream (PCM or decoded PCM) - */ - this.channels_in = 0; - /** - * number of channels in the output data stream (not used for decoding) - */ - this.channels_out = 0; - /** - * input_samp_rate/output_samp_rate - */ - //public double resample_ratio; - this.resample_ratio = 0.; - - this.mf_samples_to_encode = 0; - this.mf_size = 0; - /** - * min bitrate index - */ - this.VBR_min_bitrate = 0; - /** - * max bitrate index - */ - this.VBR_max_bitrate = 0; - this.bitrate_index = 0; - this.samplerate_index = 0; - this.mode_ext = 0; - - /* lowpass and highpass filter control */ - /** - * normalized frequency bounds of passband - */ - this.lowpass1 = 0.; - this.lowpass2 = 0.; - /** - * normalized frequency bounds of passband - */ - this.highpass1 = 0.; - this.highpass2 = 0.; - - /** - * 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1 - */ - this.noise_shaping = 0; - - /** - * 0 = ISO model: amplify all distorted bands
- * 1 = amplify within 50% of max (on db scale)
- * 2 = amplify only most distorted band
- * 3 = method 1 and refine with method 2
- */ - this.noise_shaping_amp = 0; - /** - * 0 = no substep
- * 1 = use substep shaping at last step(VBR only)
- * (not implemented yet)
- * 2 = use substep inside loop
- * 3 = use substep inside loop and last step
- */ - this.substep_shaping = 0; - - /** - * 1 = gpsycho. 0 = none - */ - this.psymodel = 0; - /** - * 0 = stop at over=0, all scalefacs amplified or
- * a scalefac has reached max value
- * 1 = stop when all scalefacs amplified or a scalefac has reached max value
- * 2 = stop when all scalefacs amplified - */ - this.noise_shaping_stop = 0; - - /** - * 0 = no, 1 = yes - */ - this.subblock_gain = 0; - /** - * 0 = no. 1=outside loop 2=inside loop(slow) - */ - this.use_best_huffman = 0; - - /** - * 0 = stop early after 0 distortion found. 1 = full search - */ - this.full_outer_loop = 0; - - //public IIISideInfo l3_side = new IIISideInfo(); - this.l3_side = new IIISideInfo(); - this.ms_ratio = new_float(2); - - /* used for padding */ - /** - * padding for the current frame? - */ - this.padding = 0; - this.frac_SpF = 0; - this.slot_lag = 0; - - /** - * optional ID3 tags - */ - //public ID3TagSpec tag_spec; - this.tag_spec = null; - this.nMusicCRC = 0; - - /* variables used by Quantize */ - //public int OldValue[] = new int[2]; - this.OldValue = new_int(2); - //public int CurrentStep[] = new int[2]; - this.CurrentStep = new_int(2); - - this.masking_lower = 0.; - //public int bv_scf[] = new int[576]; - this.bv_scf = new_int(576); - //public int pseudohalf[] = new int[L3Side.SFBMAX]; - this.pseudohalf = new_int(L3Side.SFBMAX); - - /** - * will be set in lame_init_params - */ - this.sfb21_extra = false; - - /* BPC = maximum number of filter convolution windows to precompute */ - //public float[][] inbuf_old = new float[2][]; - this.inbuf_old = new Array(2); - //public float[][] blackfilt = new float[2 * BPC + 1][]; - this.blackfilt = new Array(2 * LameInternalFlags.BPC + 1); - //public double itime[] = new double[2]; - this.itime = new_double(2); - this.sideinfo_len = 0; - - /* variables for newmdct.c */ - //public float sb_sample[][][][] = new float[2][2][18][Encoder.SBLIMIT]; - this.sb_sample = new_float_n([2, 2, 18, Encoder.SBLIMIT]); - this.amp_filter = new_float(32); - - /* variables for BitStream */ - - /** - *
-     * mpeg1: buffer=511 bytes  smallest frame: 96-38(sideinfo)=58
-     * max number of frames in reservoir:  8
-     * mpeg2: buffer=255 bytes.  smallest frame: 24-23bytes=1
-     * with VBR, if you are encoding all silence, it is possible to
-     * have 8kbs/24khz frames with 1byte of data each, which means we need
-     * to buffer up to 255 headers!
-     * 
- */ - /** - * also, max_header_buf has to be a power of two - */ - /** - * max size of header is 38 - */ - - function Header() { - this.write_timing = 0; - this.ptr = 0; - //public byte buf[] = new byte[MAX_HEADER_LEN]; - this.buf = new_byte(MAX_HEADER_LEN); - } - - this.header = new Array(LameInternalFlags.MAX_HEADER_BUF); - - this.h_ptr = 0; - this.w_ptr = 0; - this.ancillary_flag = 0; - - /* variables for Reservoir */ - /** - * in bits - */ - this.ResvSize = 0; - /** - * in bits - */ - this.ResvMax = 0; - - //public ScaleFac scalefac_band = new ScaleFac(); - this.scalefac_band = new ScaleFac(); - - /* daa from PsyModel */ - /* The static variables "r", "phi_sav", "new", "old" and "oldest" have */ - /* to be remembered for the unpredictability measure. For "r" and */ - /* "phi_sav", the first index from the left is the channel select and */ - /* the second index is the "age" of the data. */ - this.minval_l = new_float(Encoder.CBANDS); - this.minval_s = new_float(Encoder.CBANDS); - this.nb_1 = new_float_n([4, Encoder.CBANDS]); - this.nb_2 = new_float_n([4, Encoder.CBANDS]); - this.nb_s1 = new_float_n([4, Encoder.CBANDS]); - this.nb_s2 = new_float_n([4, Encoder.CBANDS]); - this.s3_ss = null; - this.s3_ll = null; - this.decay = 0.; - - //public III_psy_xmin[] thm = new III_psy_xmin[4]; - //public III_psy_xmin[] en = new III_psy_xmin[4]; - this.thm = new Array(4); - this.en = new Array(4); - - /** - * fft and energy calculation - */ - this.tot_ener = new_float(4); - - /* loudness calculation (for adaptive threshold of hearing) */ - /** - * loudness^2 approx. per granule and channel - */ - this.loudness_sq = new_float_n([2, 2]); - /** - * account for granule delay of L3psycho_anal - */ - this.loudness_sq_save = new_float(2); - - /** - * Scale Factor Bands - */ - this.mld_l = new_float(Encoder.SBMAX_l); - this.mld_s = new_float(Encoder.SBMAX_s); - this.bm_l = new_int(Encoder.SBMAX_l); - this.bo_l = new_int(Encoder.SBMAX_l); - this.bm_s = new_int(Encoder.SBMAX_s); - this.bo_s = new_int(Encoder.SBMAX_s); - this.npart_l = 0; - this.npart_s = 0; - - this.s3ind = new_int_n([Encoder.CBANDS, 2]); - this.s3ind_s = new_int_n([Encoder.CBANDS, 2]); - - this.numlines_s = new_int(Encoder.CBANDS); - this.numlines_l = new_int(Encoder.CBANDS); - this.rnumlines_l = new_float(Encoder.CBANDS); - this.mld_cb_l = new_float(Encoder.CBANDS); - this.mld_cb_s = new_float(Encoder.CBANDS); - this.numlines_s_num1 = 0; - this.numlines_l_num1 = 0; - - /* ratios */ - this.pe = new_float(4); - this.ms_ratio_s_old = 0.; - this.ms_ratio_l_old = 0.; - this.ms_ener_ratio_old = 0.; - - /** - * block type - */ - this.blocktype_old = new_int(2); - - /** - * variables used for --nspsytune - */ - this.nsPsy = new NsPsy(); - - /** - * used for Xing VBR header - */ - this.VBR_seek_table = new VBRSeekInfo(); - - /** - * all ATH related stuff - */ - //public ATH ATH; - this.ATH = null; - - this.PSY = null; - - this.nogap_total = 0; - this.nogap_current = 0; - - /* ReplayGain */ - this.decode_on_the_fly = true; - this.findReplayGain = true; - this.findPeakSample = true; - this.PeakSample = 0.; - this.RadioGain = 0; - this.AudiophileGain = 0; - //public ReplayGain rgdata; - this.rgdata = null; - - /** - * gain change required for preventing clipping - */ - this.noclipGainChange = 0; - /** - * user-specified scale factor required for preventing clipping - */ - this.noclipScale = 0.; - - /* simple statistics */ - this.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]); - /** - * norm/start/short/stop/mixed(short)/sum - */ - this.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]); - - //public PlottingData pinfo; - //public MPGLib.mpstr_tag hip; - this.pinfo = null; - this.hip = null; - - this.in_buffer_nsamples = 0; - //public float[] in_buffer_0; - //public float[] in_buffer_1; - this.in_buffer_0 = null; - this.in_buffer_1 = null; - - //public IIterationLoop iteration_loop; - this.iteration_loop = null; - - for (var i = 0; i < this.en.length; i++) { - this.en[i] = new III_psy_xmin(); - } - for (var i = 0; i < this.thm.length; i++) { - this.thm[i] = new III_psy_xmin(); - } - for (var i = 0; i < this.header.length; i++) { - this.header[i] = new Header(); - } - -} - - - -function FFT() { - - var window = new_float(Encoder.BLKSIZE); - var window_s = new_float(Encoder.BLKSIZE_s / 2); - - var costab = [ - 9.238795325112867e-01, 3.826834323650898e-01, - 9.951847266721969e-01, 9.801714032956060e-02, - 9.996988186962042e-01, 2.454122852291229e-02, - 9.999811752826011e-01, 6.135884649154475e-03 - ]; - - function fht(fz, fzPos, n) { - var tri = 0; - var k4; - var fi; - var gi; - - n <<= 1; - /* to get BLKSIZE, because of 3DNow! ASM routine */ - var fn = fzPos + n; - k4 = 4; - do { - var s1, c1; - var i, k1, k2, k3, kx; - kx = k4 >> 1; - k1 = k4; - k2 = k4 << 1; - k3 = k2 + k1; - k4 = k2 << 1; - fi = fzPos; - gi = fi + kx; - do { - var f0, f1, f2, f3; - f1 = fz[fi + 0] - fz[fi + k1]; - f0 = fz[fi + 0] + fz[fi + k1]; - f3 = fz[fi + k2] - fz[fi + k3]; - f2 = fz[fi + k2] + fz[fi + k3]; - fz[fi + k2] = f0 - f2; - fz[fi + 0] = f0 + f2; - fz[fi + k3] = f1 - f3; - fz[fi + k1] = f1 + f3; - f1 = fz[gi + 0] - fz[gi + k1]; - f0 = fz[gi + 0] + fz[gi + k1]; - f3 = (Util.SQRT2 * fz[gi + k3]); - f2 = (Util.SQRT2 * fz[gi + k2]); - fz[gi + k2] = f0 - f2; - fz[gi + 0] = f0 + f2; - fz[gi + k3] = f1 - f3; - fz[gi + k1] = f1 + f3; - gi += k4; - fi += k4; - } while (fi < fn); - c1 = costab[tri + 0]; - s1 = costab[tri + 1]; - for (i = 1; i < kx; i++) { - var c2, s2; - c2 = 1 - (2 * s1) * s1; - s2 = (2 * s1) * c1; - fi = fzPos + i; - gi = fzPos + k1 - i; - do { - var a, b, g0, f0, f1, g1, f2, g2, f3, g3; - b = s2 * fz[fi + k1] - c2 * fz[gi + k1]; - a = c2 * fz[fi + k1] + s2 * fz[gi + k1]; - f1 = fz[fi + 0] - a; - f0 = fz[fi + 0] + a; - g1 = fz[gi + 0] - b; - g0 = fz[gi + 0] + b; - b = s2 * fz[fi + k3] - c2 * fz[gi + k3]; - a = c2 * fz[fi + k3] + s2 * fz[gi + k3]; - f3 = fz[fi + k2] - a; - f2 = fz[fi + k2] + a; - g3 = fz[gi + k2] - b; - g2 = fz[gi + k2] + b; - b = s1 * f2 - c1 * g3; - a = c1 * f2 + s1 * g3; - fz[fi + k2] = f0 - a; - fz[fi + 0] = f0 + a; - fz[gi + k3] = g1 - b; - fz[gi + k1] = g1 + b; - b = c1 * g2 - s1 * f3; - a = s1 * g2 + c1 * f3; - fz[gi + k2] = g0 - a; - fz[gi + 0] = g0 + a; - fz[fi + k3] = f1 - b; - fz[fi + k1] = f1 + b; - gi += k4; - fi += k4; - } while (fi < fn); - c2 = c1; - c1 = c2 * costab[tri + 0] - s1 * costab[tri + 1]; - s1 = c2 * costab[tri + 1] + s1 * costab[tri + 0]; - } - tri += 2; - } while (k4 < n); - } - - var rv_tbl = [0x00, 0x80, 0x40, - 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, - 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, - 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, - 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, - 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, - 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, - 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, - 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c, - 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, - 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, - 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, - 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, - 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, - 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, - 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, - 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46, - 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, - 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, - 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, - 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, - 0xde, 0x3e, 0xbe, 0x7e, 0xfe]; - - this.fft_short = function (gfc, x_real, chn, buffer, bufPos) { - for (var b = 0; b < 3; b++) { - var x = Encoder.BLKSIZE_s / 2; - var k = 0xffff & ((576 / 3) * (b + 1)); - var j = Encoder.BLKSIZE_s / 8 - 1; - do { - var f0, f1, f2, f3, w; - var i = rv_tbl[j << 2] & 0xff; - - f0 = window_s[i] * buffer[chn][bufPos + i + k]; - w = window_s[0x7f - i] * buffer[chn][bufPos + i + k + 0x80]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window_s[i + 0x40] * buffer[chn][bufPos + i + k + 0x40]; - w = window_s[0x3f - i] * buffer[chn][bufPos + i + k + 0xc0]; - f3 = f2 - w; - f2 = f2 + w; - - x -= 4; - x_real[b][x + 0] = f0 + f2; - x_real[b][x + 2] = f0 - f2; - x_real[b][x + 1] = f1 + f3; - x_real[b][x + 3] = f1 - f3; - - f0 = window_s[i + 0x01] * buffer[chn][bufPos + i + k + 0x01]; - w = window_s[0x7e - i] * buffer[chn][bufPos + i + k + 0x81]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window_s[i + 0x41] * buffer[chn][bufPos + i + k + 0x41]; - w = window_s[0x3e - i] * buffer[chn][bufPos + i + k + 0xc1]; - f3 = f2 - w; - f2 = f2 + w; - - x_real[b][x + Encoder.BLKSIZE_s / 2 + 0] = f0 + f2; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 2] = f0 - f2; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 1] = f1 + f3; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 3] = f1 - f3; - } while (--j >= 0); - - fht(x_real[b], x, Encoder.BLKSIZE_s / 2); - /* BLKSIZE_s/2 because of 3DNow! ASM routine */ - /* BLKSIZE/2 because of 3DNow! ASM routine */ - } - } - - this.fft_long = function (gfc, y, chn, buffer, bufPos) { - var jj = Encoder.BLKSIZE / 8 - 1; - var x = Encoder.BLKSIZE / 2; - - do { - var f0, f1, f2, f3, w; - var i = rv_tbl[jj] & 0xff; - f0 = window[i] * buffer[chn][bufPos + i]; - w = window[i + 0x200] * buffer[chn][bufPos + i + 0x200]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window[i + 0x100] * buffer[chn][bufPos + i + 0x100]; - w = window[i + 0x300] * buffer[chn][bufPos + i + 0x300]; - f3 = f2 - w; - f2 = f2 + w; - - x -= 4; - y[x + 0] = f0 + f2; - y[x + 2] = f0 - f2; - y[x + 1] = f1 + f3; - y[x + 3] = f1 - f3; - - f0 = window[i + 0x001] * buffer[chn][bufPos + i + 0x001]; - w = window[i + 0x201] * buffer[chn][bufPos + i + 0x201]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window[i + 0x101] * buffer[chn][bufPos + i + 0x101]; - w = window[i + 0x301] * buffer[chn][bufPos + i + 0x301]; - f3 = f2 - w; - f2 = f2 + w; - - y[x + Encoder.BLKSIZE / 2 + 0] = f0 + f2; - y[x + Encoder.BLKSIZE / 2 + 2] = f0 - f2; - y[x + Encoder.BLKSIZE / 2 + 1] = f1 + f3; - y[x + Encoder.BLKSIZE / 2 + 3] = f1 - f3; - } while (--jj >= 0); - - fht(y, x, Encoder.BLKSIZE / 2); - /* BLKSIZE/2 because of 3DNow! ASM routine */ - } - - this.init_fft = function (gfc) { - /* The type of window used here will make no real difference, but */ - /* - * in the interest of merging nspsytune stuff - switch to blackman - * window - */ - for (var i = 0; i < Encoder.BLKSIZE; i++) - /* blackman window */ - window[i] = (0.42 - 0.5 * Math.cos(2 * Math.PI * (i + .5) - / Encoder.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (i + .5) - / Encoder.BLKSIZE)); - - for (var i = 0; i < Encoder.BLKSIZE_s / 2; i++) - window_s[i] = (0.5 * (1.0 - Math.cos(2.0 * Math.PI - * (i + 0.5) / Encoder.BLKSIZE_s))); - - } - -} - -/* - * psymodel.c - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 2001-2002 Naoki Shibata - * Copyright (c) 2000-2003 Takehiro Tominaga - * Copyright (c) 2000-2008 Robert Hegemann - * Copyright (c) 2000-2005 Gabriel Bouvigne - * Copyright (c) 2000-2005 Alexander Leidinger - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: PsyModel.java,v 1.27 2011/05/24 20:48:06 kenchis Exp $ */ - - -/* - PSYCHO ACOUSTICS - - - This routine computes the psycho acoustics, delayed by one granule. - - Input: buffer of PCM data (1024 samples). - - This window should be centered over the 576 sample granule window. - The routine will compute the psycho acoustics for - this granule, but return the psycho acoustics computed - for the *previous* granule. This is because the block - type of the previous granule can only be determined - after we have computed the psycho acoustics for the following - granule. - - Output: maskings and energies for each scalefactor band. - block type, PE, and some correlation measures. - The PE is used by CBR modes to determine if extra bits - from the bit reservoir should be used. The correlation - measures are used to determine mid/side or regular stereo. - */ -/* - Notation: - - barks: a non-linear frequency scale. Mapping from frequency to - barks is given by freq2bark() - - scalefactor bands: The spectrum (frequencies) are broken into - SBMAX "scalefactor bands". Thes bands - are determined by the MPEG ISO spec. In - the noise shaping/quantization code, we allocate - bits among the partition bands to achieve the - best possible quality - - partition bands: The spectrum is also broken into about - 64 "partition bands". Each partition - band is about .34 barks wide. There are about 2-5 - partition bands for each scalefactor band. - - LAME computes all psycho acoustic information for each partition - band. Then at the end of the computations, this information - is mapped to scalefactor bands. The energy in each scalefactor - band is taken as the sum of the energy in all partition bands - which overlap the scalefactor band. The maskings can be computed - in the same way (and thus represent the average masking in that band) - or by taking the minmum value multiplied by the number of - partition bands used (which represents a minimum masking in that band). - */ -/* - The general outline is as follows: - - 1. compute the energy in each partition band - 2. compute the tonality in each partition band - 3. compute the strength of each partion band "masker" - 4. compute the masking (via the spreading function applied to each masker) - 5. Modifications for mid/side masking. - - Each partition band is considiered a "masker". The strength - of the i'th masker in band j is given by: - - s3(bark(i)-bark(j))*strength(i) - - The strength of the masker is a function of the energy and tonality. - The more tonal, the less masking. LAME uses a simple linear formula - (controlled by NMT and TMN) which says the strength is given by the - energy divided by a linear function of the tonality. - */ -/* - s3() is the "spreading function". It is given by a formula - determined via listening tests. - - The total masking in the j'th partition band is the sum over - all maskings i. It is thus given by the convolution of - the strength with s3(), the "spreading function." - - masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength - - where "o" = convolution operator. s3 is given by a formula determined - via listening tests. It is normalized so that s3 o 1 = 1. - - Note: instead of a simple convolution, LAME also has the - option of using "additive masking" - - The most critical part is step 2, computing the tonality of each - partition band. LAME has two tonality estimators. The first - is based on the ISO spec, and measures how predictiable the - signal is over time. The more predictable, the more tonal. - The second measure is based on looking at the spectrum of - a single granule. The more peaky the spectrum, the more - tonal. By most indications, the latter approach is better. - - Finally, in step 5, the maskings for the mid and side - channel are possibly increased. Under certain circumstances, - noise in the mid & side channels is assumed to also - be masked by strong maskers in the L or R channels. - - - Other data computed by the psy-model: - - ms_ratio side-channel / mid-channel masking ratio (for previous granule) - ms_ratio_next side-channel / mid-channel masking ratio for this granule - - percep_entropy[2] L and R values (prev granule) of PE - A measure of how - much pre-echo is in the previous granule - percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy - energy[4] L,R,M,S energy in each channel, prev granule - blocktype_d[2] block type to use for previous granule - */ -//package mp3; - -//import java.util.Arrays; - - -function PsyModel() { - - var fft = new FFT(); - - var LOG10 = 2.30258509299404568402; - - var rpelev = 2; - var rpelev2 = 16; - var rpelev_s = 2; - var rpelev2_s = 16; - - /* size of each partition band, in barks: */ - var DELBARK = .34; - - /* tuned for output level (sensitive to energy scale) */ - var VO_SCALE = (1. / (14752 * 14752) / (Encoder.BLKSIZE / 2)); - - var temporalmask_sustain_sec = 0.01; - - var NS_PREECHO_ATT0 = 0.8; - var NS_PREECHO_ATT1 = 0.6; - var NS_PREECHO_ATT2 = 0.3; - - var NS_MSFIX = 3.5; - - var NSATTACKTHRE = 4.4; - var NSATTACKTHRE_S = 25; - - var NSFIRLEN = 21; - - /* size of each partition band, in barks: */ - var LN_TO_LOG10 = 0.2302585093; - - function NON_LINEAR_SCALE_ENERGY(x) { - return x; - } - - /** - *
-     *       L3psycho_anal.  Compute psycho acoustics.
-     *
-     *       Data returned to the calling program must be delayed by one
-     *       granule.
-     *
-     *       This is done in two places.
-     *       If we do not need to know the blocktype, the copying
-     *       can be done here at the top of the program: we copy the data for
-     *       the last granule (computed during the last call) before it is
-     *       overwritten with the new data.  It looks like this:
-     *
-     *       0. static psymodel_data
-     *       1. calling_program_data = psymodel_data
-     *       2. compute psymodel_data
-     *
-     *       For data which needs to know the blocktype, the copying must be
-     *       done at the end of this loop, and the old values must be saved:
-     *
-     *       0. static psymodel_data_old
-     *       1. compute psymodel_data
-     *       2. compute possible block type of this granule
-     *       3. compute final block type of previous granule based on #2.
-     *       4. calling_program_data = psymodel_data_old
-     *       5. psymodel_data_old = psymodel_data
-     *     psycho_loudness_approx
-     *       jd - 2001 mar 12
-     *    in:  energy   - BLKSIZE/2 elements of frequency magnitudes ^ 2
-     *         gfp      - uses out_samplerate, ATHtype (also needed for ATHformula)
-     *    returns: loudness^2 approximation, a positive value roughly tuned for a value
-     *             of 1.0 for signals near clipping.
-     *    notes:   When calibrated, feeding this function binary white noise at sample
-     *             values +32767 or -32768 should return values that approach 3.
-     *             ATHformula is used to approximate an equal loudness curve.
-     *    future:  Data indicates that the shape of the equal loudness curve varies
-     *             with intensity.  This function might be improved by using an equal
-     *             loudness curve shaped for typical playback levels (instead of the
-     *             ATH, that is shaped for the threshold).  A flexible realization might
-     *             simply bend the existing ATH curve to achieve the desired shape.
-     *             However, the potential gain may not be enough to justify an effort.
-     * 
- */ - function psycho_loudness_approx(energy, gfc) { - var loudness_power = 0.0; - /* apply weights to power in freq. bands */ - for (var i = 0; i < Encoder.BLKSIZE / 2; ++i) - loudness_power += energy[i] * gfc.ATH.eql_w[i]; - loudness_power *= VO_SCALE; - - return loudness_power; - } - - function compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, wsamp_lPos, wsamp_s, wsamp_sPos, gr_out, chn, buffer, bufPos) { - var gfc = gfp.internal_flags; - if (chn < 2) { - fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos); - fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos); - } - /* FFT data for mid and side channel is derived from L & R */ - else if (chn == 2) { - for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) { - var l = wsamp_l[wsamp_lPos + 0][j]; - var r = wsamp_l[wsamp_lPos + 1][j]; - wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5; - } - for (var b = 2; b >= 0; --b) { - for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) { - var l = wsamp_s[wsamp_sPos + 0][b][j]; - var r = wsamp_s[wsamp_sPos + 1][b][j]; - wsamp_s[wsamp_sPos + 0][b][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_s[wsamp_sPos + 1][b][j] = (l - r) * Util.SQRT2 * 0.5; - } - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]); - fftenergy[0] *= fftenergy[0]; - - for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) { - var re = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 - j]; - var im = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 + j]; - fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - for (var b = 2; b >= 0; --b) { - fftenergy_s[b][0] = (wsamp_s[wsamp_sPos + 0])[b][0]; - fftenergy_s[b][0] *= fftenergy_s[b][0]; - for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) { - var re = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s - / 2 - j]; - var im = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s - / 2 + j]; - fftenergy_s[b][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - } - /* total energy */ - { - var totalenergy = 0.0; - for (var j = 11; j < Encoder.HBLKSIZE; j++) - totalenergy += fftenergy[j]; - - gfc.tot_ener[chn] = totalenergy; - } - - if (gfp.analysis) { - for (var j = 0; j < Encoder.HBLKSIZE; j++) { - gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j]; - gfc.pinfo.energy_save[chn][j] = fftenergy[j]; - } - gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn]; - } - - /********************************************************************* - * compute loudness approximation (used for ATH auto-level adjustment) - *********************************************************************/ - if (gfp.athaa_loudapprox == 2 && chn < 2) { - // no loudness for mid/side ch - gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn]; - gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc); - } - } - - /* mask_add optimization */ - /* init the limit values used to avoid computing log in mask_add when it is not necessary */ - - /** - *
-     *  For example, with i = 10*log10(m2/m1)/10*16         (= log10(m2/m1)*16)
-     *
-     * abs(i)>8 is equivalent (as i is an integer) to
-     * abs(i)>=9
-     * i>=9 || i<=-9
-     * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16
-     * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16)
-     * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16
-     * exp10 is strictly increasing thus this is equivalent to
-     * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants
-     * 
- */ - - /** - * as in if(i>8) - */ - var I1LIMIT = 8; - /** - * as in if(i>24) . changed 23 - */ - var I2LIMIT = 23; - /** - * as in if(m<15) - */ - var MLIMIT = 15; - - var ma_max_i1; - var ma_max_i2; - var ma_max_m; - - /** - * This is the masking table:
- * According to tonality, values are going from 0dB (TMN) to 9.3dB (NMT).
- * After additive masking computation, 8dB are added, so final values are - * going from 8dB to 17.3dB - * - * pow(10, -0.0..-0.6) - */ - var tab = [1.0, 0.79433, 0.63096, 0.63096, - 0.63096, 0.63096, 0.63096, 0.25119, 0.11749]; - - function init_mask_add_max_values() { - ma_max_i1 = Math.pow(10, (I1LIMIT + 1) / 16.0); - ma_max_i2 = Math.pow(10, (I2LIMIT + 1) / 16.0); - ma_max_m = Math.pow(10, (MLIMIT) / 10.0); - } - - var table1 = [3.3246 * 3.3246, - 3.23837 * 3.23837, 3.15437 * 3.15437, 3.00412 * 3.00412, - 2.86103 * 2.86103, 2.65407 * 2.65407, 2.46209 * 2.46209, - 2.284 * 2.284, 2.11879 * 2.11879, 1.96552 * 1.96552, - 1.82335 * 1.82335, 1.69146 * 1.69146, 1.56911 * 1.56911, - 1.46658 * 1.46658, 1.37074 * 1.37074, 1.31036 * 1.31036, - 1.25264 * 1.25264, 1.20648 * 1.20648, 1.16203 * 1.16203, - 1.12765 * 1.12765, 1.09428 * 1.09428, 1.0659 * 1.0659, - 1.03826 * 1.03826, 1.01895 * 1.01895, 1]; - - var table2 = [1.33352 * 1.33352, - 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497, - 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382, - 1.22321 * 1.22321, 1.14758 * 1.14758, 1]; - - var table3 = [2.35364 * 2.35364, - 2.29259 * 2.29259, 2.23313 * 2.23313, 2.12675 * 2.12675, - 2.02545 * 2.02545, 1.87894 * 1.87894, 1.74303 * 1.74303, - 1.61695 * 1.61695, 1.49999 * 1.49999, 1.39148 * 1.39148, - 1.29083 * 1.29083, 1.19746 * 1.19746, 1.11084 * 1.11084, - 1.03826 * 1.03826]; - - /** - * addition of simultaneous masking Naoki Shibata 2000/7 - */ - function mask_add(m1, m2, kk, b, gfc, shortblock) { - var ratio; - - if (m2 > m1) { - if (m2 < (m1 * ma_max_i2)) - ratio = m2 / m1; - else - return (m1 + m2); - } else { - if (m1 >= (m2 * ma_max_i2)) - return (m1 + m2); - ratio = m1 / m2; - } - - /* Should always be true, just checking */ - - m1 += m2; - //if (((long)(b + 3) & 0xffffffff) <= 3 + 3) { - if ((b + 3) <= 3 + 3) { - /* approximately, 1 bark = 3 partitions */ - /* 65% of the cases */ - /* originally 'if(i > 8)' */ - if (ratio >= ma_max_i1) { - /* 43% of the total */ - return m1; - } - - /* 22% of the total */ - var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0)); - return m1 * table2[i]; - } - - /** - *
-         * m<15 equ log10((m1+m2)/gfc.ATH.cb[k])<1.5
-         * equ (m1+m2)/gfc.ATH.cb[k]<10^1.5
-         * equ (m1+m2)<10^1.5 * gfc.ATH.cb[k]
-         * 
- */ - var i = 0 | Util.FAST_LOG10_X(ratio, 16.0); - if (shortblock != 0) { - m2 = gfc.ATH.cb_s[kk] * gfc.ATH.adjust; - } else { - m2 = gfc.ATH.cb_l[kk] * gfc.ATH.adjust; - } - if (m1 < ma_max_m * m2) { - /* 3% of the total */ - /* Originally if (m > 0) { */ - if (m1 > m2) { - var f, r; - - f = 1.0; - if (i <= 13) - f = table3[i]; - - r = Util.FAST_LOG10_X(m1 / m2, 10.0 / 15.0); - return m1 * ((table1[i] - f) * r + f); - } - - if (i > 13) - return m1; - - return m1 * table3[i]; - } - - /* 10% of total */ - return m1 * table1[i]; - } - - var table2_ = [1.33352 * 1.33352, - 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497, - 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382, - 1.22321 * 1.22321, 1.14758 * 1.14758, 1]; - - /** - * addition of simultaneous masking Naoki Shibata 2000/7 - */ - function vbrpsy_mask_add(m1, m2, b) { - var ratio; - - if (m1 < 0) { - m1 = 0; - } - if (m2 < 0) { - m2 = 0; - } - if (m1 <= 0) { - return m2; - } - if (m2 <= 0) { - return m1; - } - if (m2 > m1) { - ratio = m2 / m1; - } else { - ratio = m1 / m2; - } - if (-2 <= b && b <= 2) { - /* approximately, 1 bark = 3 partitions */ - /* originally 'if(i > 8)' */ - if (ratio >= ma_max_i1) { - return m1 + m2; - } else { - var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0)); - return (m1 + m2) * table2_[i]; - } - } - if (ratio < ma_max_i2) { - return m1 + m2; - } - if (m1 < m2) { - m1 = m2; - } - return m1; - } - - /** - * compute interchannel masking effects - */ - function calc_interchannel_masking(gfp, ratio) { - var gfc = gfp.internal_flags; - if (gfc.channels_out > 1) { - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - var l = gfc.thm[0].l[sb]; - var r = gfc.thm[1].l[sb]; - gfc.thm[0].l[sb] += r * ratio; - gfc.thm[1].l[sb] += l * ratio; - } - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - var l = gfc.thm[0].s[sb][sblock]; - var r = gfc.thm[1].s[sb][sblock]; - gfc.thm[0].s[sb][sblock] += r * ratio; - gfc.thm[1].s[sb][sblock] += l * ratio; - } - } - } - } - - /** - * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper - */ - function msfix1(gfc) { - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - /* use this fix if L & R masking differs by 2db or less */ - /* if db = 10*log10(x2/x1) < 2 */ - /* if (x2 < 1.58*x1) { */ - if (gfc.thm[0].l[sb] > 1.58 * gfc.thm[1].l[sb] - || gfc.thm[1].l[sb] > 1.58 * gfc.thm[0].l[sb]) - continue; - var mld = gfc.mld_l[sb] * gfc.en[3].l[sb]; - var rmid = Math.max(gfc.thm[2].l[sb], - Math.min(gfc.thm[3].l[sb], mld)); - - mld = gfc.mld_l[sb] * gfc.en[2].l[sb]; - var rside = Math.max(gfc.thm[3].l[sb], - Math.min(gfc.thm[2].l[sb], mld)); - gfc.thm[2].l[sb] = rmid; - gfc.thm[3].l[sb] = rside; - } - - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - if (gfc.thm[0].s[sb][sblock] > 1.58 * gfc.thm[1].s[sb][sblock] - || gfc.thm[1].s[sb][sblock] > 1.58 * gfc.thm[0].s[sb][sblock]) - continue; - var mld = gfc.mld_s[sb] * gfc.en[3].s[sb][sblock]; - var rmid = Math.max(gfc.thm[2].s[sb][sblock], - Math.min(gfc.thm[3].s[sb][sblock], mld)); - - mld = gfc.mld_s[sb] * gfc.en[2].s[sb][sblock]; - var rside = Math.max(gfc.thm[3].s[sb][sblock], - Math.min(gfc.thm[2].s[sb][sblock], mld)); - - gfc.thm[2].s[sb][sblock] = rmid; - gfc.thm[3].s[sb][sblock] = rside; - } - } - } - - /** - * Adjust M/S maskings if user set "msfix" - * - * Naoki Shibata 2000 - */ - function ns_msfix(gfc, msfix, athadjust) { - var msfix2 = msfix; - var athlower = Math.pow(10, athadjust); - - msfix *= 2.0; - msfix2 *= 2.0; - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - var thmLR, thmM, thmS, ath; - ath = (gfc.ATH.cb_l[gfc.bm_l[sb]]) * athlower; - thmLR = Math.min(Math.max(gfc.thm[0].l[sb], ath), - Math.max(gfc.thm[1].l[sb], ath)); - thmM = Math.max(gfc.thm[2].l[sb], ath); - thmS = Math.max(gfc.thm[3].l[sb], ath); - if (thmLR * msfix < thmM + thmS) { - var f = thmLR * msfix2 / (thmM + thmS); - thmM *= f; - thmS *= f; - } - gfc.thm[2].l[sb] = Math.min(thmM, gfc.thm[2].l[sb]); - gfc.thm[3].l[sb] = Math.min(thmS, gfc.thm[3].l[sb]); - } - - athlower *= ( Encoder.BLKSIZE_s / Encoder.BLKSIZE); - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - var thmLR, thmM, thmS, ath; - ath = (gfc.ATH.cb_s[gfc.bm_s[sb]]) * athlower; - thmLR = Math.min(Math.max(gfc.thm[0].s[sb][sblock], ath), - Math.max(gfc.thm[1].s[sb][sblock], ath)); - thmM = Math.max(gfc.thm[2].s[sb][sblock], ath); - thmS = Math.max(gfc.thm[3].s[sb][sblock], ath); - - if (thmLR * msfix < thmM + thmS) { - var f = thmLR * msfix / (thmM + thmS); - thmM *= f; - thmS *= f; - } - gfc.thm[2].s[sb][sblock] = Math.min(gfc.thm[2].s[sb][sblock], - thmM); - gfc.thm[3].s[sb][sblock] = Math.min(gfc.thm[3].s[sb][sblock], - thmS); - } - } - } - - /** - * short block threshold calculation (part 2) - * - * partition band bo_s[sfb] is at the transition from scalefactor band sfb - * to the next one sfb+1; enn and thmm have to be split between them - */ - function convert_partition2scalefac_s(gfc, eb, thr, chn, sblock) { - var sb, b; - var enn = 0.0; - var thmm = 0.0; - for (sb = b = 0; sb < Encoder.SBMAX_s; ++b, ++sb) { - var bo_s_sb = gfc.bo_s[sb]; - var npart_s = gfc.npart_s; - var b_lim = bo_s_sb < npart_s ? bo_s_sb : npart_s; - while (b < b_lim) { - // iff failed, it may indicate some index error elsewhere - enn += eb[b]; - thmm += thr[b]; - b++; - } - gfc.en[chn].s[sb][sblock] = enn; - gfc.thm[chn].s[sb][sblock] = thmm; - - if (b >= npart_s) { - ++sb; - break; - } - // iff failed, it may indicate some index error elsewhere - { - /* at transition sfb . sfb+1 */ - var w_curr = gfc.PSY.bo_s_weight[sb]; - var w_next = 1.0 - w_curr; - enn = w_curr * eb[b]; - thmm = w_curr * thr[b]; - gfc.en[chn].s[sb][sblock] += enn; - gfc.thm[chn].s[sb][sblock] += thmm; - enn = w_next * eb[b]; - thmm = w_next * thr[b]; - } - } - /* zero initialize the rest */ - for (; sb < Encoder.SBMAX_s; ++sb) { - gfc.en[chn].s[sb][sblock] = 0; - gfc.thm[chn].s[sb][sblock] = 0; - } - } - - /** - * longblock threshold calculation (part 2) - */ - function convert_partition2scalefac_l(gfc, eb, thr, chn) { - var sb, b; - var enn = 0.0; - var thmm = 0.0; - for (sb = b = 0; sb < Encoder.SBMAX_l; ++b, ++sb) { - var bo_l_sb = gfc.bo_l[sb]; - var npart_l = gfc.npart_l; - var b_lim = bo_l_sb < npart_l ? bo_l_sb : npart_l; - while (b < b_lim) { - // iff failed, it may indicate some index error elsewhere - enn += eb[b]; - thmm += thr[b]; - b++; - } - gfc.en[chn].l[sb] = enn; - gfc.thm[chn].l[sb] = thmm; - - if (b >= npart_l) { - ++sb; - break; - } - { - /* at transition sfb . sfb+1 */ - var w_curr = gfc.PSY.bo_l_weight[sb]; - var w_next = 1.0 - w_curr; - enn = w_curr * eb[b]; - thmm = w_curr * thr[b]; - gfc.en[chn].l[sb] += enn; - gfc.thm[chn].l[sb] += thmm; - enn = w_next * eb[b]; - thmm = w_next * thr[b]; - } - } - /* zero initialize the rest */ - for (; sb < Encoder.SBMAX_l; ++sb) { - gfc.en[chn].l[sb] = 0; - gfc.thm[chn].l[sb] = 0; - } - } - - function compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) { - var gfc = gfp.internal_flags; - var j, b; - - for (b = j = 0; b < gfc.npart_s; ++b) { - var ebb = 0, m = 0; - var n = gfc.numlines_s[b]; - for (var i = 0; i < n; ++i, ++j) { - var el = fftenergy_s[sblock][j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - } - for (j = b = 0; b < gfc.npart_s; b++) { - var kk = gfc.s3ind_s[b][0]; - var ecb = gfc.s3_ss[j++] * eb[kk]; - ++kk; - while (kk <= gfc.s3ind_s[b][1]) { - ecb += gfc.s3_ss[j] * eb[kk]; - ++j; - ++kk; - } - - { /* limit calculated threshold by previous granule */ - var x = rpelev_s * gfc.nb_s1[chn][b]; - thr[b] = Math.min(ecb, x); - } - if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) { - /* limit calculated threshold by even older granule */ - var x = rpelev2_s * gfc.nb_s2[chn][b]; - var y = thr[b]; - thr[b] = Math.min(x, y); - } - - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = ecb; - } - for (; b <= Encoder.CBANDS; ++b) { - eb[b] = 0; - thr[b] = 0; - } - } - - function block_type_set(gfp, uselongblock, blocktype_d, blocktype) { - var gfc = gfp.internal_flags; - - if (gfp.short_blocks == ShortBlock.short_block_coupled - /* force both channels to use the same block type */ - /* this is necessary if the frame is to be encoded in ms_stereo. */ - /* But even without ms_stereo, FhG does this */ - && !(uselongblock[0] != 0 && uselongblock[1] != 0)) - uselongblock[0] = uselongblock[1] = 0; - - /* - * update the blocktype of the previous granule, since it depends on - * what happend in this granule - */ - for (var chn = 0; chn < gfc.channels_out; chn++) { - blocktype[chn] = Encoder.NORM_TYPE; - /* disable short blocks */ - if (gfp.short_blocks == ShortBlock.short_block_dispensed) - uselongblock[chn] = 1; - if (gfp.short_blocks == ShortBlock.short_block_forced) - uselongblock[chn] = 0; - - if (uselongblock[chn] != 0) { - /* no attack : use long blocks */ - if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE) - blocktype[chn] = Encoder.STOP_TYPE; - } else { - /* attack : use short blocks */ - blocktype[chn] = Encoder.SHORT_TYPE; - if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) { - gfc.blocktype_old[chn] = Encoder.START_TYPE; - } - if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE) - gfc.blocktype_old[chn] = Encoder.SHORT_TYPE; - } - - blocktype_d[chn] = gfc.blocktype_old[chn]; - // value returned to calling program - gfc.blocktype_old[chn] = blocktype[chn]; - // save for next call to l3psy_anal - } - } - - function NS_INTERP(x, y, r) { - /* was pow((x),(r))*pow((y),1-(r)) */ - if (r >= 1.0) { - /* 99.7% of the time */ - return x; - } - if (r <= 0.0) - return y; - if (y > 0.0) { - /* rest of the time */ - return (Math.pow(x / y, r) * y); - } - /* never happens */ - return 0.0; - } - - /** - * these values are tuned only for 44.1kHz... - */ - var regcoef_s = [11.8, 13.6, 17.2, 32, 46.5, - 51.3, 57.5, 67.1, 71.5, 84.6, 97.6, 130, - /* 255.8 */ - ]; - - function pecalc_s(mr, masking_lower) { - var pe_s = 1236.28 / 4; - for (var sb = 0; sb < Encoder.SBMAX_s - 1; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - var thm = mr.thm.s[sb][sblock]; - if (thm > 0.0) { - var x = thm * masking_lower; - var en = mr.en.s[sb][sblock]; - if (en > x) { - if (en > x * 1e10) { - pe_s += regcoef_s[sb] * (10.0 * LOG10); - } else { - pe_s += regcoef_s[sb] * Util.FAST_LOG10(en / x); - } - } - } - } - } - - return pe_s; - } - - /** - * these values are tuned only for 44.1kHz... - */ - var regcoef_l = [6.8, 5.8, 5.8, 6.4, 6.5, 9.9, - 12.1, 14.4, 15, 18.9, 21.6, 26.9, 34.2, 40.2, 46.8, 56.5, - 60.7, 73.9, 85.7, 93.4, 126.1, - /* 241.3 */ - ]; - - function pecalc_l(mr, masking_lower) { - var pe_l = 1124.23 / 4; - for (var sb = 0; sb < Encoder.SBMAX_l - 1; sb++) { - var thm = mr.thm.l[sb]; - if (thm > 0.0) { - var x = thm * masking_lower; - var en = mr.en.l[sb]; - if (en > x) { - if (en > x * 1e10) { - pe_l += regcoef_l[sb] * (10.0 * LOG10); - } else { - pe_l += regcoef_l[sb] * Util.FAST_LOG10(en / x); - } - } - } - } - return pe_l; - } - - function calc_energy(gfc, fftenergy, eb, max, avg) { - var b, j; - - for (b = j = 0; b < gfc.npart_l; ++b) { - var ebb = 0, m = 0; - var i; - for (i = 0; i < gfc.numlines_l[b]; ++i, ++j) { - var el = fftenergy[j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - max[b] = m; - avg[b] = ebb * gfc.rnumlines_l[b]; - } - } - - function calc_mask_index_l(gfc, max, avg, mask_idx) { - var last_tab_entry = tab.length - 1; - var b = 0; - var a = avg[b] + avg[b + 1]; - if (a > 0.0) { - var m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - - for (b = 1; b < gfc.npart_l - 1; b++) { - a = avg[b - 1] + avg[b] + avg[b + 1]; - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - a = 20.0 - * (m * 3.0 - a) - / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - + gfc.numlines_l[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - - a = avg[b - 1] + avg[b]; - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - - var fircoef = [ - -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2, - -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2, - -5.52212e-17 * 2, -0.313819 * 2 - ]; - - this.L3psycho_anal_ns = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) { - /* - * to get a good cache performance, one has to think about the sequence, - * in which the variables are used. - */ - var gfc = gfp.internal_flags; - - /* fft and energy calculation */ - var wsamp_L = new_float_n([2, Encoder.BLKSIZE]); - var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]); - - /* convolution */ - var eb_l = new_float(Encoder.CBANDS + 1); - var eb_s = new_float(Encoder.CBANDS + 1); - var thr = new_float(Encoder.CBANDS + 2); - - /* block type */ - var blocktype = new_int(2), uselongblock = new_int(2); - - /* usual variables like loop indices, etc.. */ - var numchn, chn; - var b, i, j, k; - var sb, sblock; - - /* variables used for --nspsytune */ - var ns_hpfsmpl = new_float_n([2, 576]); - var pcfact; - var mask_idx_l = new_int(Encoder.CBANDS + 2), mask_idx_s = new_int(Encoder.CBANDS + 2); - - Arrays.fill(mask_idx_s, 0); - - numchn = gfc.channels_out; - /* chn=2 and 3 = Mid and Side channels */ - if (gfp.mode == MPEGMode.JOINT_STEREO) - numchn = 4; - - if (gfp.VBR == VbrMode.vbr_off) - pcfact = gfc.ResvMax == 0 ? 0 : ( gfc.ResvSize) - / gfc.ResvMax * 0.5; - else if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh - || gfp.VBR == VbrMode.vbr_mt) { - pcfact = 0.6; - } else - pcfact = 1.0; - - /********************************************************************** - * Apply HPF of fs/4 to the input signal. This is used for attack - * detection / handling. - **********************************************************************/ - /* Don't copy the input buffer into a temporary buffer */ - /* unroll the loop 2 times */ - for (chn = 0; chn < gfc.channels_out; chn++) { - /* apply high pass filter of fs/4 */ - var firbuf = buffer[chn]; - var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192; - for (i = 0; i < 576; i++) { - var sum1, sum2; - sum1 = firbuf[firbufPos + i + 10]; - sum2 = 0.0; - for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { - sum1 += fircoef[j] - * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i - + NSFIRLEN - j]); - sum2 += fircoef[j + 1] - * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos - + i + NSFIRLEN - j - 1]); - } - ns_hpfsmpl[chn][i] = sum1 + sum2; - } - masking_ratio[gr_out][chn].en.assign(gfc.en[chn]); - masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]); - if (numchn > 2) { - /* MS maskings */ - /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */ - masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]); - masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]); - } - } - - for (chn = 0; chn < numchn; chn++) { - var wsamp_l; - var wsamp_s; - var en_subshort = new_float(12); - var en_short = [0, 0, 0, 0]; - var attack_intensity = new_float(12); - var ns_uselongblock = 1; - var attackThreshold; - var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS); - var ns_attacks = [0, 0, 0, 0]; - var fftenergy = new_float(Encoder.HBLKSIZE); - var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]); - - /* - * rh 20040301: the following loops do access one off the limits so - * I increase the array dimensions by one and initialize the - * accessed values to zero - */ - - /*************************************************************** - * determine the block type (window type) - ***************************************************************/ - /* calculate energies of each sub-shortblocks */ - for (i = 0; i < 3; i++) { - en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6]; - attack_intensity[i] = en_subshort[i] - / gfc.nsPsy.last_en_subshort[chn][i + 4]; - en_short[0] += en_subshort[i]; - } - - if (chn == 2) { - for (i = 0; i < 576; i++) { - var l, r; - l = ns_hpfsmpl[0][i]; - r = ns_hpfsmpl[1][i]; - ns_hpfsmpl[0][i] = l + r; - ns_hpfsmpl[1][i] = l - r; - } - } - { - var pf = ns_hpfsmpl[chn & 1]; - var pfPos = 0; - for (i = 0; i < 9; i++) { - var pfe = pfPos + 576 / 9; - var p = 1.; - for (; pfPos < pfe; pfPos++) - if (p < Math.abs(pf[pfPos])) - p = Math.abs(pf[pfPos]); - - gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p; - en_short[1 + i / 3] += p; - if (p > en_subshort[i + 3 - 2]) { - p = p / en_subshort[i + 3 - 2]; - } else if (en_subshort[i + 3 - 2] > p * 10.0) { - p = en_subshort[i + 3 - 2] / (p * 10.0); - } else - p = 0.0; - attack_intensity[i + 3] = p; - } - } - - if (gfp.analysis) { - var x = attack_intensity[0]; - for (i = 1; i < 12; i++) - if (x < attack_intensity[i]) - x = attack_intensity[i]; - gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn]; - gfc.pinfo.ers_save[chn] = x; - } - - /* compare energies between sub-shortblocks */ - attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s - : gfc.nsPsy.attackthre; - for (i = 0; i < 12; i++) - if (0 == ns_attacks[i / 3] - && attack_intensity[i] > attackThreshold) - ns_attacks[i / 3] = (i % 3) + 1; - - /* - * should have energy change between short blocks, in order to avoid - * periodic signals - */ - for (i = 1; i < 4; i++) { - var ratio; - if (en_short[i - 1] > en_short[i]) { - ratio = en_short[i - 1] / en_short[i]; - } else { - ratio = en_short[i] / en_short[i - 1]; - } - if (ratio < 1.7) { - ns_attacks[i] = 0; - if (i == 1) - ns_attacks[0] = 0; - } - } - - if (ns_attacks[0] != 0 && gfc.nsPsy.lastAttacks[chn] != 0) - ns_attacks[0] = 0; - - if (gfc.nsPsy.lastAttacks[chn] == 3 - || (ns_attacks[0] + ns_attacks[1] + ns_attacks[2] + ns_attacks[3]) != 0) { - ns_uselongblock = 0; - - if (ns_attacks[1] != 0 && ns_attacks[0] != 0) - ns_attacks[1] = 0; - if (ns_attacks[2] != 0 && ns_attacks[1] != 0) - ns_attacks[2] = 0; - if (ns_attacks[3] != 0 && ns_attacks[2] != 0) - ns_attacks[3] = 0; - } - - if (chn < 2) { - uselongblock[chn] = ns_uselongblock; - } else { - if (ns_uselongblock == 0) { - uselongblock[0] = uselongblock[1] = 0; - } - } - - /* - * there is a one granule delay. Copy maskings computed last call - * into masking_ratio to return to calling program. - */ - energy[chn] = gfc.tot_ener[chn]; - - /********************************************************************* - * compute FFTs - *********************************************************************/ - wsamp_s = wsamp_S; - wsamp_l = wsamp_L; - compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, (chn & 1), - wsamp_s, (chn & 1), gr_out, chn, buffer, bufPos); - - /********************************************************************* - * Calculate the energy and the tonality of each partition. - *********************************************************************/ - calc_energy(gfc, fftenergy, eb_l, max, avg); - calc_mask_index_l(gfc, max, avg, mask_idx_l); - /* compute masking thresholds for short blocks */ - for (sblock = 0; sblock < 3; sblock++) { - var enn, thmm; - compute_masking_s(gfp, fftenergy_s, eb_s, thr, chn, sblock); - convert_partition2scalefac_s(gfc, eb_s, thr, chn, sblock); - /**** short block pre-echo control ****/ - for (sb = 0; sb < Encoder.SBMAX_s; sb++) { - thmm = gfc.thm[chn].s[sb][sblock]; - - thmm *= NS_PREECHO_ATT0; - if (ns_attacks[sblock] >= 2 || ns_attacks[sblock + 1] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT1 * pcfact); - thmm = Math.min(thmm, p); - } - - if (ns_attacks[sblock] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } else if ((sblock != 0 && ns_attacks[sblock - 1] == 3) - || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) { - var idx = (sblock != 2) ? sblock + 1 : 0; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } - - /* pulse like signal detection for fatboy.wav and so on */ - enn = en_subshort[sblock * 3 + 3] - + en_subshort[sblock * 3 + 4] - + en_subshort[sblock * 3 + 5]; - if (en_subshort[sblock * 3 + 5] * 6 < enn) { - thmm *= 0.5; - if (en_subshort[sblock * 3 + 4] * 6 < enn) - thmm *= 0.5; - } - - gfc.thm[chn].s[sb][sblock] = thmm; - } - } - gfc.nsPsy.lastAttacks[chn] = ns_attacks[2]; - - /********************************************************************* - * convolve the partitioned energy and unpredictability with the - * spreading function, s3_l[b][k] - ********************************************************************/ - k = 0; - { - for (b = 0; b < gfc.npart_l; b++) { - /* - * convolve the partitioned energy with the spreading - * function - */ - var kk = gfc.s3ind[b][0]; - var eb2 = eb_l[kk] * tab[mask_idx_l[kk]]; - var ecb = gfc.s3_ll[k++] * eb2; - while (++kk <= gfc.s3ind[b][1]) { - eb2 = eb_l[kk] * tab[mask_idx_l[kk]]; - ecb = mask_add(ecb, gfc.s3_ll[k++] * eb2, kk, kk - b, - gfc, 0); - } - ecb *= 0.158489319246111; - /* pow(10,-0.8) */ - - /**** long block pre-echo control ****/ - /** - *
-                     * dont use long block pre-echo control if previous granule was
-                     * a short block.  This is to avoid the situation:
-                     * frame0:  quiet (very low masking)
-                     * frame1:  surge  (triggers short blocks)
-                     * frame2:  regular frame.  looks like pre-echo when compared to
-                     *          frame0, but all pre-echo was in frame1.
-                     * 
- */ - /* - * chn=0,1 L and R channels - * - * chn=2,3 S and M channels. - */ - - if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) - thr[b] = ecb; - else - thr[b] = NS_INTERP( - Math.min(ecb, Math.min(rpelev - * gfc.nb_1[chn][b], rpelev2 - * gfc.nb_2[chn][b])), ecb, pcfact); - - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = ecb; - } - } - for (; b <= Encoder.CBANDS; ++b) { - eb_l[b] = 0; - thr[b] = 0; - } - /* compute masking thresholds for long blocks */ - convert_partition2scalefac_l(gfc, eb_l, thr, chn); - } - /* end loop over chn */ - - if (gfp.mode == MPEGMode.STEREO || gfp.mode == MPEGMode.JOINT_STEREO) { - if (gfp.interChRatio > 0.0) { - calc_interchannel_masking(gfp, gfp.interChRatio); - } - } - - if (gfp.mode == MPEGMode.JOINT_STEREO) { - var msfix; - msfix1(gfc); - msfix = gfp.msfix; - if (Math.abs(msfix) > 0.0) - ns_msfix(gfc, msfix, gfp.ATHlower * gfc.ATH.adjust); - } - - /*************************************************************** - * determine final block type - ***************************************************************/ - block_type_set(gfp, uselongblock, blocktype_d, blocktype); - - /********************************************************************* - * compute the value of PE to return ... no delay and advance - *********************************************************************/ - for (chn = 0; chn < numchn; chn++) { - var ppe; - var ppePos = 0; - var type; - var mr; - - if (chn > 1) { - ppe = percep_MS_entropy; - ppePos = -2; - type = Encoder.NORM_TYPE; - if (blocktype_d[0] == Encoder.SHORT_TYPE - || blocktype_d[1] == Encoder.SHORT_TYPE) - type = Encoder.SHORT_TYPE; - mr = masking_MS_ratio[gr_out][chn - 2]; - } else { - ppe = percep_entropy; - ppePos = 0; - type = blocktype_d[chn]; - mr = masking_ratio[gr_out][chn]; - } - - if (type == Encoder.SHORT_TYPE) - ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower); - else - ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower); - - if (gfp.analysis) - gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn]; - - } - return 0; - } - - function vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, fftenergy, wsamp_l, wsamp_lPos) { - var gfc = gfp.internal_flags; - if (chn < 2) { - fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos); - } else if (chn == 2) { - /* FFT data for mid and side channel is derived from L & R */ - for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) { - var l = wsamp_l[wsamp_lPos + 0][j]; - var r = wsamp_l[wsamp_lPos + 1][j]; - wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5; - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]); - fftenergy[0] *= fftenergy[0]; - - for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) { - var re = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 - j]; - var im = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 + j]; - fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - /* total energy */ - { - var totalenergy = 0.0; - for (var j = 11; j < Encoder.HBLKSIZE; j++) - totalenergy += fftenergy[j]; - - gfc.tot_ener[chn] = totalenergy; - } - - if (gfp.analysis) { - for (var j = 0; j < Encoder.HBLKSIZE; j++) { - gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j]; - gfc.pinfo.energy_save[chn][j] = fftenergy[j]; - } - gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn]; - } - } - - function vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, fftenergy_s, wsamp_s, wsamp_sPos) { - var gfc = gfp.internal_flags; - - if (sblock == 0 && chn < 2) { - fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos); - } - if (chn == 2) { - /* FFT data for mid and side channel is derived from L & R */ - for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) { - var l = wsamp_s[wsamp_sPos + 0][sblock][j]; - var r = wsamp_s[wsamp_sPos + 1][sblock][j]; - wsamp_s[wsamp_sPos + 0][sblock][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_s[wsamp_sPos + 1][sblock][j] = (l - r) * Util.SQRT2 * 0.5; - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy_s[sblock][0] = wsamp_s[wsamp_sPos + 0][sblock][0]; - fftenergy_s[sblock][0] *= fftenergy_s[sblock][0]; - for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) { - var re = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 - j]; - var im = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 + j]; - fftenergy_s[sblock][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - } - - /** - * compute loudness approximation (used for ATH auto-level adjustment) - */ - function vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, fftenergy) { - var gfc = gfp.internal_flags; - if (gfp.athaa_loudapprox == 2 && chn < 2) { - // no loudness for mid/side ch - gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn]; - gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc); - } - } - - var fircoef_ = [-8.65163e-18 * 2, - -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2, - -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, - 0.0931738 * 2, -5.52212e-17 * 2, -0.313819 * 2]; - - /** - * Apply HPF of fs/4 to the input signal. This is used for attack detection - * / handling. - */ - function vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, energy, sub_short_factor, ns_attacks, uselongblock) { - var ns_hpfsmpl = new_float_n([2, 576]); - var gfc = gfp.internal_flags; - var n_chn_out = gfc.channels_out; - /* chn=2 and 3 = Mid and Side channels */ - var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 : n_chn_out; - /* Don't copy the input buffer into a temporary buffer */ - /* unroll the loop 2 times */ - for (var chn = 0; chn < n_chn_out; chn++) { - /* apply high pass filter of fs/4 */ - firbuf = buffer[chn]; - var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192; - for (var i = 0; i < 576; i++) { - var sum1, sum2; - sum1 = firbuf[firbufPos + i + 10]; - sum2 = 0.0; - for (var j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { - sum1 += fircoef_[j] - * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i - + NSFIRLEN - j]); - sum2 += fircoef_[j + 1] - * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos - + i + NSFIRLEN - j - 1]); - } - ns_hpfsmpl[chn][i] = sum1 + sum2; - } - masking_ratio[gr_out][chn].en.assign(gfc.en[chn]); - masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]); - if (n_chn_psy > 2) { - /* MS maskings */ - /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */ - masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]); - masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]); - } - } - for (var chn = 0; chn < n_chn_psy; chn++) { - var attack_intensity = new_float(12); - var en_subshort = new_float(12); - var en_short = [0, 0, 0, 0]; - var pf = ns_hpfsmpl[chn & 1]; - var pfPos = 0; - var attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s - : gfc.nsPsy.attackthre; - var ns_uselongblock = 1; - - if (chn == 2) { - for (var i = 0, j = 576; j > 0; ++i, --j) { - var l = ns_hpfsmpl[0][i]; - var r = ns_hpfsmpl[1][i]; - ns_hpfsmpl[0][i] = l + r; - ns_hpfsmpl[1][i] = l - r; - } - } - /*************************************************************** - * determine the block type (window type) - ***************************************************************/ - /* calculate energies of each sub-shortblocks */ - for (var i = 0; i < 3; i++) { - en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6]; - attack_intensity[i] = en_subshort[i] - / gfc.nsPsy.last_en_subshort[chn][i + 4]; - en_short[0] += en_subshort[i]; - } - - for (var i = 0; i < 9; i++) { - var pfe = pfPos + 576 / 9; - var p = 1.; - for (; pfPos < pfe; pfPos++) - if (p < Math.abs(pf[pfPos])) - p = Math.abs(pf[pfPos]); - - gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p; - en_short[1 + i / 3] += p; - if (p > en_subshort[i + 3 - 2]) { - p = p / en_subshort[i + 3 - 2]; - } else if (en_subshort[i + 3 - 2] > p * 10.0) { - p = en_subshort[i + 3 - 2] / (p * 10.0); - } else { - p = 0.0; - } - attack_intensity[i + 3] = p; - } - /* pulse like signal detection for fatboy.wav and so on */ - for (var i = 0; i < 3; ++i) { - var enn = en_subshort[i * 3 + 3] - + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5]; - var factor = 1.; - if (en_subshort[i * 3 + 5] * 6 < enn) { - factor *= 0.5; - if (en_subshort[i * 3 + 4] * 6 < enn) { - factor *= 0.5; - } - } - sub_short_factor[chn][i] = factor; - } - - if (gfp.analysis) { - var x = attack_intensity[0]; - for (var i = 1; i < 12; i++) { - if (x < attack_intensity[i]) { - x = attack_intensity[i]; - } - } - gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn]; - gfc.pinfo.ers_save[chn] = x; - } - - /* compare energies between sub-shortblocks */ - for (var i = 0; i < 12; i++) { - if (0 == ns_attacks[chn][i / 3] - && attack_intensity[i] > attackThreshold) { - ns_attacks[chn][i / 3] = (i % 3) + 1; - } - } - - /* - * should have energy change between short blocks, in order to avoid - * periodic signals - */ - /* Good samples to show the effect are Trumpet test songs */ - /* - * GB: tuned (1) to avoid too many short blocks for test sample - * TRUMPET - */ - /* - * RH: tuned (2) to let enough short blocks through for test sample - * FSOL and SNAPS - */ - for (var i = 1; i < 4; i++) { - var u = en_short[i - 1]; - var v = en_short[i]; - var m = Math.max(u, v); - if (m < 40000) { /* (2) */ - if (u < 1.7 * v && v < 1.7 * u) { /* (1) */ - if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) { - ns_attacks[chn][0] = 0; - } - ns_attacks[chn][i] = 0; - } - } - } - - if (ns_attacks[chn][0] <= gfc.nsPsy.lastAttacks[chn]) { - ns_attacks[chn][0] = 0; - } - - if (gfc.nsPsy.lastAttacks[chn] == 3 - || (ns_attacks[chn][0] + ns_attacks[chn][1] - + ns_attacks[chn][2] + ns_attacks[chn][3]) != 0) { - ns_uselongblock = 0; - - if (ns_attacks[chn][1] != 0 && ns_attacks[chn][0] != 0) { - ns_attacks[chn][1] = 0; - } - if (ns_attacks[chn][2] != 0 && ns_attacks[chn][1] != 0) { - ns_attacks[chn][2] = 0; - } - if (ns_attacks[chn][3] != 0 && ns_attacks[chn][2] != 0) { - ns_attacks[chn][3] = 0; - } - } - if (chn < 2) { - uselongblock[chn] = ns_uselongblock; - } else { - if (ns_uselongblock == 0) { - uselongblock[0] = uselongblock[1] = 0; - } - } - - /* - * there is a one granule delay. Copy maskings computed last call - * into masking_ratio to return to calling program. - */ - energy[chn] = gfc.tot_ener[chn]; - } - } - - function vbrpsy_skip_masking_s(gfc, chn, sblock) { - if (sblock == 0) { - for (var b = 0; b < gfc.npart_s; b++) { - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = 0; - } - } - } - - function vbrpsy_skip_masking_l(gfc, chn) { - for (var b = 0; b < gfc.npart_l; b++) { - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = 0; - } - } - - function psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx) { - var last_tab_entry = tab.length - 1; - var b = 0; - var a = avg[b] + avg[b + 1]; - if (a > 0.0) { - var m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - - for (b = 1; b < gfc.npart_s - 1; b++) { - a = avg[b - 1] + avg[b] + avg[b + 1]; - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - a = 20.0 - * (m * 3.0 - a) - / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - + gfc.numlines_s[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - - a = avg[b - 1] + avg[b]; - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - - function vbrpsy_compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) { - var gfc = gfp.internal_flags; - var max = new float[Encoder.CBANDS], avg = new_float(Encoder.CBANDS); - var i, j, b; - var mask_idx_s = new int[Encoder.CBANDS]; - - for (b = j = 0; b < gfc.npart_s; ++b) { - var ebb = 0, m = 0; - var n = gfc.numlines_s[b]; - for (i = 0; i < n; ++i, ++j) { - var el = fftenergy_s[sblock][j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - max[b] = m; - avg[b] = ebb / n; - } - for (; b < Encoder.CBANDS; ++b) { - max[b] = 0; - avg[b] = 0; - } - psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx_s); - for (j = b = 0; b < gfc.npart_s; b++) { - var kk = gfc.s3ind_s[b][0]; - var last = gfc.s3ind_s[b][1]; - var dd, dd_n; - var x, ecb, avg_mask; - dd = mask_idx_s[kk]; - dd_n = 1; - ecb = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]]; - ++j; - ++kk; - while (kk <= last) { - dd += mask_idx_s[kk]; - dd_n += 1; - x = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]]; - ecb = vbrpsy_mask_add(ecb, x, kk - b); - ++j; - ++kk; - } - dd = (1 + 2 * dd) / (2 * dd_n); - avg_mask = tab[dd] * 0.5; - ecb *= avg_mask; - thr[b] = ecb; - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = ecb; - { - /* - * if THR exceeds EB, the quantization routines will take the - * difference from other bands. in case of strong tonal samples - * (tonaltest.wav) this leads to heavy distortions. that's why - * we limit THR here. - */ - x = max[b]; - x *= gfc.minval_s[b]; - x *= avg_mask; - if (thr[b] > x) { - thr[b] = x; - } - } - if (gfc.masking_lower > 1) { - thr[b] *= gfc.masking_lower; - } - if (thr[b] > eb[b]) { - thr[b] = eb[b]; - } - if (gfc.masking_lower < 1) { - thr[b] *= gfc.masking_lower; - } - - } - for (; b < Encoder.CBANDS; ++b) { - eb[b] = 0; - thr[b] = 0; - } - } - - function vbrpsy_compute_masking_l(gfc, fftenergy, eb_l, thr, chn) { - var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS); - var mask_idx_l = new_int(Encoder.CBANDS + 2); - var b; - - /********************************************************************* - * Calculate the energy and the tonality of each partition. - *********************************************************************/ - calc_energy(gfc, fftenergy, eb_l, max, avg); - calc_mask_index_l(gfc, max, avg, mask_idx_l); - - /********************************************************************* - * convolve the partitioned energy and unpredictability with the - * spreading function, s3_l[b][k] - ********************************************************************/ - var k = 0; - for (b = 0; b < gfc.npart_l; b++) { - var x, ecb, avg_mask, t; - /* convolve the partitioned energy with the spreading function */ - var kk = gfc.s3ind[b][0]; - var last = gfc.s3ind[b][1]; - var dd = 0, dd_n = 0; - dd = mask_idx_l[kk]; - dd_n += 1; - ecb = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]]; - ++k; - ++kk; - while (kk <= last) { - dd += mask_idx_l[kk]; - dd_n += 1; - x = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]]; - t = vbrpsy_mask_add(ecb, x, kk - b); - ecb = t; - ++k; - ++kk; - } - dd = (1 + 2 * dd) / (2 * dd_n); - avg_mask = tab[dd] * 0.5; - ecb *= avg_mask; - - /**** long block pre-echo control ****/ - /** - *
-             * dont use long block pre-echo control if previous granule was
-             * a short block.  This is to avoid the situation:
-             * frame0:  quiet (very low masking)
-             * frame1:  surge  (triggers short blocks)
-             * frame2:  regular frame.  looks like pre-echo when compared to
-             *          frame0, but all pre-echo was in frame1.
-             * 
- */ - /* - * chn=0,1 L and R channels chn=2,3 S and M channels. - */ - if (gfc.blocktype_old[chn & 0x01] == Encoder.SHORT_TYPE) { - var ecb_limit = rpelev * gfc.nb_1[chn][b]; - if (ecb_limit > 0) { - thr[b] = Math.min(ecb, ecb_limit); - } else { - /** - *
-                     * Robert 071209:
-                     * Because we don't calculate long block psy when we know a granule
-                     * should be of short blocks, we don't have any clue how the granule
-                     * before would have looked like as a long block. So we have to guess
-                     * a little bit for this END_TYPE block.
-                     * Most of the time we get away with this sloppyness. (fingers crossed :)
-                     * The speed increase is worth it.
-                     * 
- */ - thr[b] = Math.min(ecb, eb_l[b] * NS_PREECHO_ATT2); - } - } else { - var ecb_limit_2 = rpelev2 * gfc.nb_2[chn][b]; - var ecb_limit_1 = rpelev * gfc.nb_1[chn][b]; - var ecb_limit; - if (ecb_limit_2 <= 0) { - ecb_limit_2 = ecb; - } - if (ecb_limit_1 <= 0) { - ecb_limit_1 = ecb; - } - if (gfc.blocktype_old[chn & 0x01] == Encoder.NORM_TYPE) { - ecb_limit = Math.min(ecb_limit_1, ecb_limit_2); - } else { - ecb_limit = ecb_limit_1; - } - thr[b] = Math.min(ecb, ecb_limit); - } - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = ecb; - { - /* - * if THR exceeds EB, the quantization routines will take the - * difference from other bands. in case of strong tonal samples - * (tonaltest.wav) this leads to heavy distortions. that's why - * we limit THR here. - */ - x = max[b]; - x *= gfc.minval_l[b]; - x *= avg_mask; - if (thr[b] > x) { - thr[b] = x; - } - } - if (gfc.masking_lower > 1) { - thr[b] *= gfc.masking_lower; - } - if (thr[b] > eb_l[b]) { - thr[b] = eb_l[b]; - } - if (gfc.masking_lower < 1) { - thr[b] *= gfc.masking_lower; - } - } - for (; b < Encoder.CBANDS; ++b) { - eb_l[b] = 0; - thr[b] = 0; - } - } - - function vbrpsy_compute_block_type(gfp, uselongblock) { - var gfc = gfp.internal_flags; - - if (gfp.short_blocks == ShortBlock.short_block_coupled - /* force both channels to use the same block type */ - /* this is necessary if the frame is to be encoded in ms_stereo. */ - /* But even without ms_stereo, FhG does this */ - && !(uselongblock[0] != 0 && uselongblock[1] != 0)) - uselongblock[0] = uselongblock[1] = 0; - - for (var chn = 0; chn < gfc.channels_out; chn++) { - /* disable short blocks */ - if (gfp.short_blocks == ShortBlock.short_block_dispensed) { - uselongblock[chn] = 1; - } - if (gfp.short_blocks == ShortBlock.short_block_forced) { - uselongblock[chn] = 0; - } - } - } - - function vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d) { - var gfc = gfp.internal_flags; - - /* - * update the blocktype of the previous granule, since it depends on - * what happend in this granule - */ - for (var chn = 0; chn < gfc.channels_out; chn++) { - var blocktype = Encoder.NORM_TYPE; - /* disable short blocks */ - - if (uselongblock[chn] != 0) { - /* no attack : use long blocks */ - if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE) - blocktype = Encoder.STOP_TYPE; - } else { - /* attack : use short blocks */ - blocktype = Encoder.SHORT_TYPE; - if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) { - gfc.blocktype_old[chn] = Encoder.START_TYPE; - } - if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE) - gfc.blocktype_old[chn] = Encoder.SHORT_TYPE; - } - - blocktype_d[chn] = gfc.blocktype_old[chn]; - // value returned to calling program - gfc.blocktype_old[chn] = blocktype; - // save for next call to l3psy_anal - } - } - - /** - * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper - */ - function vbrpsy_compute_MS_thresholds(eb, thr, cb_mld, ath_cb, athadjust, msfix, n) { - var msfix2 = msfix * 2; - var athlower = msfix > 0 ? Math.pow(10, athadjust) : 1; - var rside, rmid; - for (var b = 0; b < n; ++b) { - var ebM = eb[2][b]; - var ebS = eb[3][b]; - var thmL = thr[0][b]; - var thmR = thr[1][b]; - var thmM = thr[2][b]; - var thmS = thr[3][b]; - - /* use this fix if L & R masking differs by 2db or less */ - if (thmL <= 1.58 * thmR && thmR <= 1.58 * thmL) { - var mld_m = cb_mld[b] * ebS; - var mld_s = cb_mld[b] * ebM; - rmid = Math.max(thmM, Math.min(thmS, mld_m)); - rside = Math.max(thmS, Math.min(thmM, mld_s)); - } else { - rmid = thmM; - rside = thmS; - } - if (msfix > 0) { - /***************************************************************/ - /* Adjust M/S maskings if user set "msfix" */ - /***************************************************************/ - /* Naoki Shibata 2000 */ - var thmLR, thmMS; - var ath = ath_cb[b] * athlower; - thmLR = Math.min(Math.max(thmL, ath), Math.max(thmR, ath)); - thmM = Math.max(rmid, ath); - thmS = Math.max(rside, ath); - thmMS = thmM + thmS; - if (thmMS > 0 && (thmLR * msfix2) < thmMS) { - var f = thmLR * msfix2 / thmMS; - thmM *= f; - thmS *= f; - } - rmid = Math.min(thmM, rmid); - rside = Math.min(thmS, rside); - } - if (rmid > ebM) { - rmid = ebM; - } - if (rside > ebS) { - rside = ebS; - } - thr[2][b] = rmid; - thr[3][b] = rside; - } - } - - this.L3psycho_anal_vbr = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) { - var gfc = gfp.internal_flags; - - /* fft and energy calculation */ - var wsamp_l; - var wsamp_s; - var fftenergy = new_float(Encoder.HBLKSIZE); - var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]); - var wsamp_L = new_float_n([2, Encoder.BLKSIZE]); - var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]); - var eb = new_float_n([4, Encoder.CBANDS]), thr = new_float_n([4, Encoder.CBANDS]); - var sub_short_factor = new_float_n([4, 3]); - var pcfact = 0.6; - - /* block type */ - var ns_attacks = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], - [0, 0, 0, 0]]; - var uselongblock = new_int(2); - - /* usual variables like loop indices, etc.. */ - - /* chn=2 and 3 = Mid and Side channels */ - var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 - : gfc.channels_out; - - vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, - masking_MS_ratio, energy, sub_short_factor, ns_attacks, - uselongblock); - - vbrpsy_compute_block_type(gfp, uselongblock); - - /* LONG BLOCK CASE */ - { - for (var chn = 0; chn < n_chn_psy; chn++) { - var ch01 = chn & 0x01; - wsamp_l = wsamp_L; - vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, - fftenergy, wsamp_l, ch01); - - vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, - fftenergy); - - if (uselongblock[ch01] != 0) { - vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn], - chn); - } else { - vbrpsy_skip_masking_l(gfc, chn); - } - } - if ((uselongblock[0] + uselongblock[1]) == 2) { - /* M/S channel */ - if (gfp.mode == MPEGMode.JOINT_STEREO) { - vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_l, - gfc.ATH.cb_l, gfp.ATHlower * gfc.ATH.adjust, - gfp.msfix, gfc.npart_l); - } - } - /* TODO: apply adaptive ATH masking here ?? */ - for (var chn = 0; chn < n_chn_psy; chn++) { - var ch01 = chn & 0x01; - if (uselongblock[ch01] != 0) { - convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn); - } - } - } - - /* SHORT BLOCKS CASE */ - { - for (var sblock = 0; sblock < 3; sblock++) { - for (var chn = 0; chn < n_chn_psy; ++chn) { - var ch01 = chn & 0x01; - - if (uselongblock[ch01] != 0) { - vbrpsy_skip_masking_s(gfc, chn, sblock); - } else { - /* compute masking thresholds for short blocks */ - wsamp_s = wsamp_S; - vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, - fftenergy_s, wsamp_s, ch01); - vbrpsy_compute_masking_s(gfp, fftenergy_s, eb[chn], - thr[chn], chn, sblock); - } - } - if ((uselongblock[0] + uselongblock[1]) == 0) { - /* M/S channel */ - if (gfp.mode == MPEGMode.JOINT_STEREO) { - vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_s, - gfc.ATH.cb_s, gfp.ATHlower * gfc.ATH.adjust, - gfp.msfix, gfc.npart_s); - } - /* L/R channel */ - } - /* TODO: apply adaptive ATH masking here ?? */ - for (var chn = 0; chn < n_chn_psy; ++chn) { - var ch01 = chn & 0x01; - if (0 == uselongblock[ch01]) { - convert_partition2scalefac_s(gfc, eb[chn], thr[chn], - chn, sblock); - } - } - } - - /**** short block pre-echo control ****/ - for (var chn = 0; chn < n_chn_psy; chn++) { - var ch01 = chn & 0x01; - - if (uselongblock[ch01] != 0) { - continue; - } - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - var new_thmm = new_float(3); - for (var sblock = 0; sblock < 3; sblock++) { - var thmm = gfc.thm[chn].s[sb][sblock]; - thmm *= NS_PREECHO_ATT0; - - if (ns_attacks[chn][sblock] >= 2 - || ns_attacks[chn][sblock + 1] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT1 * pcfact); - thmm = Math.min(thmm, p); - } else if (ns_attacks[chn][sblock] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } else if ((sblock != 0 && ns_attacks[chn][sblock - 1] == 3) - || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) { - var idx = (sblock != 2) ? sblock + 1 : 0; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } - - /* pulse like signal detection for fatboy.wav and so on */ - thmm *= sub_short_factor[chn][sblock]; - - new_thmm[sblock] = thmm; - } - for (var sblock = 0; sblock < 3; sblock++) { - gfc.thm[chn].s[sb][sblock] = new_thmm[sblock]; - } - } - } - } - for (var chn = 0; chn < n_chn_psy; chn++) { - gfc.nsPsy.lastAttacks[chn] = ns_attacks[chn][2]; - } - - /*************************************************************** - * determine final block type - ***************************************************************/ - vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d); - - /********************************************************************* - * compute the value of PE to return ... no delay and advance - *********************************************************************/ - for (var chn = 0; chn < n_chn_psy; chn++) { - var ppe; - var ppePos; - var type; - var mr; - - if (chn > 1) { - ppe = percep_MS_entropy; - ppePos = -2; - type = Encoder.NORM_TYPE; - if (blocktype_d[0] == Encoder.SHORT_TYPE - || blocktype_d[1] == Encoder.SHORT_TYPE) - type = Encoder.SHORT_TYPE; - mr = masking_MS_ratio[gr_out][chn - 2]; - } else { - ppe = percep_entropy; - ppePos = 0; - type = blocktype_d[chn]; - mr = masking_ratio[gr_out][chn]; - } - - if (type == Encoder.SHORT_TYPE) { - ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower); - } else { - ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower); - } - - if (gfp.analysis) { - gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn]; - } - } - return 0; - } - - function s3_func_x(bark, hf_slope) { - var tempx = bark, tempy; - - if (tempx >= 0) { - tempy = -tempx * 27; - } else { - tempy = tempx * hf_slope; - } - if (tempy <= -72.0) { - return 0; - } - return Math.exp(tempy * LN_TO_LOG10); - } - - function norm_s3_func_x(hf_slope) { - var lim_a = 0, lim_b = 0; - { - var x = 0, l, h; - for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x -= 1) - ; - l = x; - h = 0; - while (Math.abs(h - l) > 1e-12) { - x = (h + l) / 2; - if (s3_func_x(x, hf_slope) > 0) { - h = x; - } else { - l = x; - } - } - lim_a = l; - } - { - var x = 0, l, h; - for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x += 1) - ; - l = 0; - h = x; - while (Math.abs(h - l) > 1e-12) { - x = (h + l) / 2; - if (s3_func_x(x, hf_slope) > 0) { - l = x; - } else { - h = x; - } - } - lim_b = h; - } - { - var sum = 0; - var m = 1000; - var i; - for (i = 0; i <= m; ++i) { - var x = lim_a + i * (lim_b - lim_a) / m; - var y = s3_func_x(x, hf_slope); - sum += y; - } - { - var norm = (m + 1) / (sum * (lim_b - lim_a)); - /* printf( "norm = %lf\n",norm); */ - return norm; - } - } - } - - /** - * The spreading function. Values returned in units of energy - */ - function s3_func(bark) { - var tempx, x, tempy, temp; - tempx = bark; - if (tempx >= 0) - tempx *= 3; - else - tempx *= 1.5; - - if (tempx >= 0.5 && tempx <= 2.5) { - temp = tempx - 0.5; - x = 8.0 * (temp * temp - 2.0 * temp); - } else - x = 0.0; - tempx += 0.474; - tempy = 15.811389 + 7.5 * tempx - 17.5 - * Math.sqrt(1.0 + tempx * tempx); - - if (tempy <= -60.0) - return 0.0; - - tempx = Math.exp((x + tempy) * LN_TO_LOG10); - - /** - *
-         * Normalization.  The spreading function should be normalized so that:
-         * +inf
-         * /
-         * |  s3 [ bark ]  d(bark)   =  1
-         * /
-         * -inf
-         * 
- */ - tempx /= .6609193; - return tempx; - } - - /** - * see for example "Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7 - */ - function freq2bark(freq) { - /* input: freq in hz output: barks */ - if (freq < 0) - freq = 0; - freq = freq * 0.001; - return 13.0 * Math.atan(.76 * freq) + 3.5 - * Math.atan(freq * freq / (7.5 * 7.5)); - } - - function init_numline(numlines, bo, bm, bval, bval_width, mld, bo_w, sfreq, blksize, scalepos, deltafreq, sbmax) { - var b_frq = new_float(Encoder.CBANDS + 1); - var sample_freq_frac = sfreq / (sbmax > 15 ? 2 * 576 : 2 * 192); - var partition = new_int(Encoder.HBLKSIZE); - var i; - sfreq /= blksize; - var j = 0; - var ni = 0; - /* compute numlines, the number of spectral lines in each partition band */ - /* each partition band should be about DELBARK wide. */ - for (i = 0; i < Encoder.CBANDS; i++) { - var bark1; - var j2; - bark1 = freq2bark(sfreq * j); - - b_frq[i] = sfreq * j; - - for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK - && j2 <= blksize / 2; j2++) - ; - - numlines[i] = j2 - j; - ni = i + 1; - - while (j < j2) { - partition[j++] = i; - } - if (j > blksize / 2) { - j = blksize / 2; - ++i; - break; - } - } - b_frq[i] = sfreq * j; - - for (var sfb = 0; sfb < sbmax; sfb++) { - var i1, i2, start, end; - var arg; - start = scalepos[sfb]; - end = scalepos[sfb + 1]; - - i1 = 0 | Math.floor(.5 + deltafreq * (start - .5)); - if (i1 < 0) - i1 = 0; - i2 = 0 | Math.floor(.5 + deltafreq * (end - .5)); - - if (i2 > blksize / 2) - i2 = blksize / 2; - - bm[sfb] = (partition[i1] + partition[i2]) / 2; - bo[sfb] = partition[i2]; - var f_tmp = sample_freq_frac * end; - /* - * calculate how much of this band belongs to current scalefactor - * band - */ - bo_w[sfb] = (f_tmp - b_frq[bo[sfb]]) - / (b_frq[bo[sfb] + 1] - b_frq[bo[sfb]]); - if (bo_w[sfb] < 0) { - bo_w[sfb] = 0; - } else { - if (bo_w[sfb] > 1) { - bo_w[sfb] = 1; - } - } - /* setup stereo demasking thresholds */ - /* formula reverse enginerred from plot in paper */ - arg = freq2bark(sfreq * scalepos[sfb] * deltafreq); - arg = ( Math.min(arg, 15.5) / 15.5); - - mld[sfb] = Math.pow(10.0, - 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5); - } - - /* compute bark values of each critical band */ - j = 0; - for (var k = 0; k < ni; k++) { - var w = numlines[k]; - var bark1, bark2; - - bark1 = freq2bark(sfreq * (j)); - bark2 = freq2bark(sfreq * (j + w - 1)); - bval[k] = .5 * (bark1 + bark2); - - bark1 = freq2bark(sfreq * (j - .5)); - bark2 = freq2bark(sfreq * (j + w - .5)); - bval_width[k] = bark2 - bark1; - j += w; - } - - return ni; - } - - function init_s3_values(s3ind, npart, bval, bval_width, norm, use_old_s3) { - var s3 = new_float_n([Encoder.CBANDS, Encoder.CBANDS]); - /* - * The s3 array is not linear in the bark scale. - * - * bval[x] should be used to get the bark value. - */ - var j; - var numberOfNoneZero = 0; - - /** - *
-         * s[i][j], the value of the spreading function,
-         * centered at band j (masker), for band i (maskee)
-         *
-         * i.e.: sum over j to spread into signal barkval=i
-         * NOTE: i and j are used opposite as in the ISO docs
-         * 
- */ - if (use_old_s3) { - for (var i = 0; i < npart; i++) { - for (j = 0; j < npart; j++) { - var v = s3_func(bval[i] - bval[j]) * bval_width[j]; - s3[i][j] = v * norm[i]; - } - } - } else { - for (j = 0; j < npart; j++) { - var hf_slope = 15 + Math.min(21 / bval[j], 12); - var s3_x_norm = norm_s3_func_x(hf_slope); - for (var i = 0; i < npart; i++) { - var v = s3_x_norm - * s3_func_x(bval[i] - bval[j], hf_slope) - * bval_width[j]; - s3[i][j] = v * norm[i]; - } - } - } - for (var i = 0; i < npart; i++) { - for (j = 0; j < npart; j++) { - if (s3[i][j] > 0.0) - break; - } - s3ind[i][0] = j; - - for (j = npart - 1; j > 0; j--) { - if (s3[i][j] > 0.0) - break; - } - s3ind[i][1] = j; - numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1); - } - - var p = new_float(numberOfNoneZero); - var k = 0; - for (var i = 0; i < npart; i++) - for (j = s3ind[i][0]; j <= s3ind[i][1]; j++) - p[k++] = s3[i][j]; - - return p; - } - - function stereo_demask(f) { - /* setup stereo demasking thresholds */ - /* formula reverse enginerred from plot in paper */ - var arg = freq2bark(f); - arg = (Math.min(arg, 15.5) / 15.5); - - return Math.pow(10.0, - 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5); - } - - /** - * NOTE: the bitrate reduction from the inter-channel masking effect is low - * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr - * does not use this feature. (Robert 071216) - */ - this.psymodel_init = function (gfp) { - var gfc = gfp.internal_flags; - var i; - var useOldS3 = true; - var bvl_a = 13, bvl_b = 24; - var snr_l_a = 0, snr_l_b = 0; - var snr_s_a = -8.25, snr_s_b = -4.5; - var bval = new_float(Encoder.CBANDS); - var bval_width = new_float(Encoder.CBANDS); - var norm = new_float(Encoder.CBANDS); - var sfreq = gfp.out_samplerate; - - switch (gfp.experimentalZ) { - default: - case 0: - useOldS3 = true; - break; - case 1: - useOldS3 = (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) ? false - : true; - break; - case 2: - useOldS3 = false; - break; - case 3: - bvl_a = 8; - snr_l_a = -1.75; - snr_l_b = -0.0125; - snr_s_a = -8.25; - snr_s_b = -2.25; - break; - } - gfc.ms_ener_ratio_old = .25; - gfc.blocktype_old[0] = gfc.blocktype_old[1] = Encoder.NORM_TYPE; - // the vbr header is long blocks - - for (i = 0; i < 4; ++i) { - for (var j = 0; j < Encoder.CBANDS; ++j) { - gfc.nb_1[i][j] = 1e20; - gfc.nb_2[i][j] = 1e20; - gfc.nb_s1[i][j] = gfc.nb_s2[i][j] = 1.0; - } - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - gfc.en[i].l[sb] = 1e20; - gfc.thm[i].l[sb] = 1e20; - } - for (var j = 0; j < 3; ++j) { - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - gfc.en[i].s[sb][j] = 1e20; - gfc.thm[i].s[sb][j] = 1e20; - } - gfc.nsPsy.lastAttacks[i] = 0; - } - for (var j = 0; j < 9; j++) - gfc.nsPsy.last_en_subshort[i][j] = 10.; - } - - /* init. for loudness approx. -jd 2001 mar 27 */ - gfc.loudness_sq_save[0] = gfc.loudness_sq_save[1] = 0.0; - - /************************************************************************* - * now compute the psychoacoustic model specific constants - ************************************************************************/ - /* compute numlines, bo, bm, bval, bval_width, mld */ - - gfc.npart_l = init_numline(gfc.numlines_l, gfc.bo_l, gfc.bm_l, bval, - bval_width, gfc.mld_l, gfc.PSY.bo_l_weight, sfreq, - Encoder.BLKSIZE, gfc.scalefac_band.l, Encoder.BLKSIZE - / (2.0 * 576), Encoder.SBMAX_l); - /* compute the spreading function */ - for (i = 0; i < gfc.npart_l; i++) { - var snr = snr_l_a; - if (bval[i] >= bvl_a) { - snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a - * (bvl_b - bval[i]) / (bvl_b - bvl_a); - } - norm[i] = Math.pow(10.0, snr / 10.0); - if (gfc.numlines_l[i] > 0) { - gfc.rnumlines_l[i] = 1.0 / gfc.numlines_l[i]; - } else { - gfc.rnumlines_l[i] = 0; - } - } - gfc.s3_ll = init_s3_values(gfc.s3ind, gfc.npart_l, bval, bval_width, - norm, useOldS3); - - /* compute long block specific values, ATH and MINVAL */ - var j = 0; - for (i = 0; i < gfc.npart_l; i++) { - var x; - - /* ATH */ - x = Float.MAX_VALUE; - for (var k = 0; k < gfc.numlines_l[i]; k++, j++) { - var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE); - var level; - /* - * ATH below 100 Hz constant, not further climbing - */ - level = this.ATHformula(freq * 1000, gfp) - 20; - // scale to FFT units; returned value is in dB - level = Math.pow(10., 0.1 * level); - // convert from dB . energy - level *= gfc.numlines_l[i]; - if (x > level) - x = level; - } - gfc.ATH.cb_l[i] = x; - - /* - * MINVAL. For low freq, the strength of the masking is limited by - * minval this is an ISO MPEG1 thing, dont know if it is really - * needed - */ - /* - * FIXME: it does work to reduce low-freq problems in S53-Wind-Sax - * and lead-voice samples, but introduces some 3 kbps bit bloat too. - * TODO: Further refinement of the shape of this hack. - */ - x = -20 + bval[i] * 20 / 10; - if (x > 6) { - x = 100; - } - if (x < -15) { - x = -15; - } - x -= 8.; - gfc.minval_l[i] = (Math.pow(10.0, x / 10.) * gfc.numlines_l[i]); - } - - /************************************************************************ - * do the same things for short blocks - ************************************************************************/ - gfc.npart_s = init_numline(gfc.numlines_s, gfc.bo_s, gfc.bm_s, bval, - bval_width, gfc.mld_s, gfc.PSY.bo_s_weight, sfreq, - Encoder.BLKSIZE_s, gfc.scalefac_band.s, Encoder.BLKSIZE_s - / (2.0 * 192), Encoder.SBMAX_s); - - /* SNR formula. short block is normalized by SNR. is it still right ? */ - j = 0; - for (i = 0; i < gfc.npart_s; i++) { - var x; - var snr = snr_s_a; - if (bval[i] >= bvl_a) { - snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a - * (bvl_b - bval[i]) / (bvl_b - bvl_a); - } - norm[i] = Math.pow(10.0, snr / 10.0); - - /* ATH */ - x = Float.MAX_VALUE; - for (var k = 0; k < gfc.numlines_s[i]; k++, j++) { - var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE_s); - var level; - /* freq = Min(.1,freq); */ - /* - * ATH below 100 Hz constant, not - * further climbing - */ - level = this.ATHformula(freq * 1000, gfp) - 20; - // scale to FFT units; returned value is in dB - level = Math.pow(10., 0.1 * level); - // convert from dB . energy - level *= gfc.numlines_s[i]; - if (x > level) - x = level; - } - gfc.ATH.cb_s[i] = x; - - /* - * MINVAL. For low freq, the strength of the masking is limited by - * minval this is an ISO MPEG1 thing, dont know if it is really - * needed - */ - x = (-7.0 + bval[i] * 7.0 / 12.0); - if (bval[i] > 12) { - x *= 1 + Math.log(1 + x) * 3.1; - } - if (bval[i] < 12) { - x *= 1 + Math.log(1 - x) * 2.3; - } - if (x < -15) { - x = -15; - } - x -= 8; - gfc.minval_s[i] = Math.pow(10.0, x / 10) - * gfc.numlines_s[i]; - } - - gfc.s3_ss = init_s3_values(gfc.s3ind_s, gfc.npart_s, bval, bval_width, - norm, useOldS3); - - init_mask_add_max_values(); - fft.init_fft(gfc); - - /* setup temporal masking */ - gfc.decay = Math.exp(-1.0 * LOG10 - / (temporalmask_sustain_sec * sfreq / 192.0)); - - { - var msfix; - msfix = NS_MSFIX; - if ((gfp.exp_nspsytune & 2) != 0) - msfix = 1.0; - if (Math.abs(gfp.msfix) > 0.0) - msfix = gfp.msfix; - gfp.msfix = msfix; - - /* - * spread only from npart_l bands. Normally, we use the spreading - * function to convolve from npart_l down to npart_l bands - */ - for (var b = 0; b < gfc.npart_l; b++) - if (gfc.s3ind[b][1] > gfc.npart_l - 1) - gfc.s3ind[b][1] = gfc.npart_l - 1; - } - - /* - * prepare for ATH auto adjustment: we want to decrease the ATH by 12 dB - * per second - */ - var frame_duration = (576. * gfc.mode_gr / sfreq); - gfc.ATH.decay = Math.pow(10., -12. / 10. * frame_duration); - gfc.ATH.adjust = 0.01; - /* minimum, for leading low loudness */ - gfc.ATH.adjustLimit = 1.0; - /* on lead, allow adjust up to maximum */ - - - if (gfp.ATHtype != -1) { - /* compute equal loudness weights (eql_w) */ - var freq; - var freq_inc = gfp.out_samplerate - / (Encoder.BLKSIZE); - var eql_balance = 0.0; - freq = 0.0; - for (i = 0; i < Encoder.BLKSIZE / 2; ++i) { - /* convert ATH dB to relative power (not dB) */ - /* to determine eql_w */ - freq += freq_inc; - gfc.ATH.eql_w[i] = 1. / Math.pow(10, this.ATHformula(freq, gfp) / 10); - eql_balance += gfc.ATH.eql_w[i]; - } - eql_balance = 1.0 / eql_balance; - for (i = Encoder.BLKSIZE / 2; --i >= 0;) { /* scale weights */ - gfc.ATH.eql_w[i] *= eql_balance; - } - } - { - for (var b = j = 0; b < gfc.npart_s; ++b) { - for (i = 0; i < gfc.numlines_s[b]; ++i) { - ++j; - } - } - for (var b = j = 0; b < gfc.npart_l; ++b) { - for (i = 0; i < gfc.numlines_l[b]; ++i) { - ++j; - } - } - } - j = 0; - for (i = 0; i < gfc.npart_l; i++) { - var freq = sfreq * (j + gfc.numlines_l[i] / 2) / (1.0 * Encoder.BLKSIZE); - gfc.mld_cb_l[i] = stereo_demask(freq); - j += gfc.numlines_l[i]; - } - for (; i < Encoder.CBANDS; ++i) { - gfc.mld_cb_l[i] = 1; - } - j = 0; - for (i = 0; i < gfc.npart_s; i++) { - var freq = sfreq * (j + gfc.numlines_s[i] / 2) / (1.0 * Encoder.BLKSIZE_s); - gfc.mld_cb_s[i] = stereo_demask(freq); - j += gfc.numlines_s[i]; - } - for (; i < Encoder.CBANDS; ++i) { - gfc.mld_cb_s[i] = 1; - } - return 0; - } - - /** - * Those ATH formulas are returning their minimum value for input = -1 - */ - function ATHformula_GB(f, value) { - /** - *
-         *  from Painter & Spanias
-         *           modified by Gabriel Bouvigne to better fit the reality
-         *           ath =    3.640 * pow(f,-0.8)
-         *           - 6.800 * exp(-0.6*pow(f-3.4,2.0))
-         *           + 6.000 * exp(-0.15*pow(f-8.7,2.0))
-         *           + 0.6* 0.001 * pow(f,4.0);
-         *
-         *
-         *           In the past LAME was using the Painter &Spanias formula.
-         *           But we had some recurrent problems with HF content.
-         *           We measured real ATH values, and found the older formula
-         *           to be inaccurate in the higher part. So we made this new
-         *           formula and this solved most of HF problematic test cases.
-         *           The tradeoff is that in VBR mode it increases a lot the
-         *           bitrate.
-         * 
- */ - - /* - * This curve can be adjusted according to the VBR scale: it adjusts - * from something close to Painter & Spanias on V9 up to Bouvigne's - * formula for V0. This way the VBR bitrate is more balanced according - * to the -V value. - */ - - // the following Hack allows to ask for the lowest value - if (f < -.3) - f = 3410; - - // convert to khz - f /= 1000; - f = Math.max(0.1, f); - var ath = 3.640 * Math.pow(f, -0.8) - 6.800 - * Math.exp(-0.6 * Math.pow(f - 3.4, 2.0)) + 6.000 - * Math.exp(-0.15 * Math.pow(f - 8.7, 2.0)) - + (0.6 + 0.04 * value) * 0.001 * Math.pow(f, 4.0); - return ath; - } - - this.ATHformula = function (f, gfp) { - var ath; - switch (gfp.ATHtype) { - case 0: - ath = ATHformula_GB(f, 9); - break; - case 1: - // over sensitive, should probably be removed - ath = ATHformula_GB(f, -1); - break; - case 2: - ath = ATHformula_GB(f, 0); - break; - case 3: - // modification of GB formula by Roel - ath = ATHformula_GB(f, 1) + 6; - break; - case 4: - ath = ATHformula_GB(f, gfp.ATHcurve); - break; - default: - ath = ATHformula_GB(f, 0); - break; - } - return ath; - } - -} - - - -function Lame() { - var self = this; - var LAME_MAXALBUMART = (128 * 1024); - - Lame.V9 = 410; - Lame.V8 = 420; - Lame.V7 = 430; - Lame.V6 = 440; - Lame.V5 = 450; - Lame.V4 = 460; - Lame.V3 = 470; - Lame.V2 = 480; - Lame.V1 = 490; - Lame.V0 = 500; - - /* still there for compatibility */ - - Lame.R3MIX = 1000; - Lame.STANDARD = 1001; - Lame.EXTREME = 1002; - Lame.INSANE = 1003; - Lame.STANDARD_FAST = 1004; - Lame.EXTREME_FAST = 1005; - Lame.MEDIUM = 1006; - Lame.MEDIUM_FAST = 1007; - - /** - * maximum size of mp3buffer needed if you encode at most 1152 samples for - * each call to lame_encode_buffer. see lame_encode_buffer() below - * (LAME_MAXMP3BUFFER is now obsolete) - */ - var LAME_MAXMP3BUFFER = (16384 + LAME_MAXALBUMART); - Lame.LAME_MAXMP3BUFFER = LAME_MAXMP3BUFFER; - - var ga; - var bs; - var p; - var qupvt; - var qu; - var psy = new PsyModel(); - var vbr; - var ver; - var id3; - var mpglib; - this.enc = new Encoder(); - - this.setModules = function (_ga, _bs, _p, _qupvt, _qu, _vbr, _ver, _id3, _mpglib) { - ga = _ga; - bs = _bs; - p = _p; - qupvt = _qupvt; - qu = _qu; - vbr = _vbr; - ver = _ver; - id3 = _id3; - mpglib = _mpglib; - this.enc.setModules(bs, psy, qupvt, vbr); - } - - /** - * PSY Model related stuff - */ - function PSY() { - /** - * The dbQ stuff. - */ - this.mask_adjust = 0.; - /** - * The dbQ stuff. - */ - this.mask_adjust_short = 0.; - /* at transition from one scalefactor band to next */ - /** - * Band weight long scalefactor bands. - */ - this.bo_l_weight = new_float(Encoder.SBMAX_l); - /** - * Band weight short scalefactor bands. - */ - this.bo_s_weight = new_float(Encoder.SBMAX_s); - } - - function LowPassHighPass() { - this.lowerlimit = 0.; - } - - function BandPass(bitrate, lPass) { - this.lowpass = lPass; - } - - var LAME_ID = 0xFFF88E3B; - - function lame_init_old(gfp) { - var gfc; - - gfp.class_id = LAME_ID; - - gfc = gfp.internal_flags = new LameInternalFlags(); - - /* Global flags. set defaults here for non-zero values */ - /* see lame.h for description */ - /* - * set integer values to -1 to mean that LAME will compute the best - * value, UNLESS the calling program as set it (and the value is no - * longer -1) - */ - - gfp.mode = MPEGMode.NOT_SET; - gfp.original = 1; - gfp.in_samplerate = 44100; - gfp.num_channels = 2; - gfp.num_samples = -1; - - gfp.bWriteVbrTag = true; - gfp.quality = -1; - gfp.short_blocks = null; - gfc.subblock_gain = -1; - - gfp.lowpassfreq = 0; - gfp.highpassfreq = 0; - gfp.lowpasswidth = -1; - gfp.highpasswidth = -1; - - gfp.VBR = VbrMode.vbr_off; - gfp.VBR_q = 4; - gfp.ATHcurve = -1; - gfp.VBR_mean_bitrate_kbps = 128; - gfp.VBR_min_bitrate_kbps = 0; - gfp.VBR_max_bitrate_kbps = 0; - gfp.VBR_hard_min = 0; - gfc.VBR_min_bitrate = 1; - /* not 0 ????? */ - gfc.VBR_max_bitrate = 13; - /* not 14 ????? */ - - gfp.quant_comp = -1; - gfp.quant_comp_short = -1; - - gfp.msfix = -1; - - gfc.resample_ratio = 1; - - gfc.OldValue[0] = 180; - gfc.OldValue[1] = 180; - gfc.CurrentStep[0] = 4; - gfc.CurrentStep[1] = 4; - gfc.masking_lower = 1; - gfc.nsPsy.attackthre = -1; - gfc.nsPsy.attackthre_s = -1; - - gfp.scale = -1; - - gfp.athaa_type = -1; - gfp.ATHtype = -1; - /* default = -1 = set in lame_init_params */ - gfp.athaa_loudapprox = -1; - /* 1 = flat loudness approx. (total energy) */ - /* 2 = equal loudness curve */ - gfp.athaa_sensitivity = 0.0; - /* no offset */ - gfp.useTemporal = null; - gfp.interChRatio = -1; - - /* - * The reason for int mf_samples_to_encode = ENCDELAY + POSTDELAY; - * ENCDELAY = internal encoder delay. And then we have to add - * POSTDELAY=288 because of the 50% MDCT overlap. A 576 MDCT granule - * decodes to 1152 samples. To synthesize the 576 samples centered under - * this granule we need the previous granule for the first 288 samples - * (no problem), and the next granule for the next 288 samples (not - * possible if this is last granule). So we need to pad with 288 samples - * to make sure we can encode the 576 samples we are interested in. - */ - gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY; - gfp.encoder_padding = 0; - gfc.mf_size = Encoder.ENCDELAY - Encoder.MDCTDELAY; - /* - * we pad input with this many 0's - */ - - gfp.findReplayGain = false; - gfp.decode_on_the_fly = false; - - gfc.decode_on_the_fly = false; - gfc.findReplayGain = false; - gfc.findPeakSample = false; - - gfc.RadioGain = 0; - gfc.AudiophileGain = 0; - gfc.noclipGainChange = 0; - gfc.noclipScale = -1.0; - - gfp.preset = 0; - - gfp.write_id3tag_automatic = true; - return 0; - } - - this.lame_init = function () { - var gfp = new LameGlobalFlags(); - - var ret = lame_init_old(gfp); - if (ret != 0) { - return null; - } - - gfp.lame_allocated_gfp = 1; - return gfp; - } - - function filter_coef(x) { - if (x > 1.0) - return 0.0; - if (x <= 0.0) - return 1.0; - - return Math.cos(Math.PI / 2 * x); - } - - this.nearestBitrateFullIndex = function (bitrate) { - /* borrowed from DM abr presets */ - - var full_bitrate_table = [8, 16, 24, 32, 40, 48, 56, 64, 80, - 96, 112, 128, 160, 192, 224, 256, 320]; - - var lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0; - - /* We assume specified bitrate will be 320kbps */ - upper_range_kbps = full_bitrate_table[16]; - upper_range = 16; - lower_range_kbps = full_bitrate_table[16]; - lower_range = 16; - - /* - * Determine which significant bitrates the value specified falls - * between, if loop ends without breaking then we were correct above - * that the value was 320 - */ - for (var b = 0; b < 16; b++) { - if ((Math.max(bitrate, full_bitrate_table[b + 1])) != bitrate) { - upper_range_kbps = full_bitrate_table[b + 1]; - upper_range = b + 1; - lower_range_kbps = full_bitrate_table[b]; - lower_range = (b); - break; - /* We found upper range */ - } - } - - /* Determine which range the value specified is closer to */ - if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) { - return lower_range; - } - return upper_range; - } - - function optimum_samplefreq(lowpassfreq, input_samplefreq) { - /* - * Rules: - * - * - if possible, sfb21 should NOT be used - */ - var suggested_samplefreq = 44100; - - if (input_samplefreq >= 48000) - suggested_samplefreq = 48000; - else if (input_samplefreq >= 44100) - suggested_samplefreq = 44100; - else if (input_samplefreq >= 32000) - suggested_samplefreq = 32000; - else if (input_samplefreq >= 24000) - suggested_samplefreq = 24000; - else if (input_samplefreq >= 22050) - suggested_samplefreq = 22050; - else if (input_samplefreq >= 16000) - suggested_samplefreq = 16000; - else if (input_samplefreq >= 12000) - suggested_samplefreq = 12000; - else if (input_samplefreq >= 11025) - suggested_samplefreq = 11025; - else if (input_samplefreq >= 8000) - suggested_samplefreq = 8000; - - if (lowpassfreq == -1) - return suggested_samplefreq; - - if (lowpassfreq <= 15960) - suggested_samplefreq = 44100; - if (lowpassfreq <= 15250) - suggested_samplefreq = 32000; - if (lowpassfreq <= 11220) - suggested_samplefreq = 24000; - if (lowpassfreq <= 9970) - suggested_samplefreq = 22050; - if (lowpassfreq <= 7230) - suggested_samplefreq = 16000; - if (lowpassfreq <= 5420) - suggested_samplefreq = 12000; - if (lowpassfreq <= 4510) - suggested_samplefreq = 11025; - if (lowpassfreq <= 3970) - suggested_samplefreq = 8000; - - if (input_samplefreq < suggested_samplefreq) { - /* - * choose a valid MPEG sample frequency above the input sample - * frequency to avoid SFB21/12 bitrate bloat rh 061115 - */ - if (input_samplefreq > 44100) { - return 48000; - } - if (input_samplefreq > 32000) { - return 44100; - } - if (input_samplefreq > 24000) { - return 32000; - } - if (input_samplefreq > 22050) { - return 24000; - } - if (input_samplefreq > 16000) { - return 22050; - } - if (input_samplefreq > 12000) { - return 16000; - } - if (input_samplefreq > 11025) { - return 12000; - } - if (input_samplefreq > 8000) { - return 11025; - } - return 8000; - } - return suggested_samplefreq; - } - - /** - * convert samp freq in Hz to index - */ - function SmpFrqIndex(sample_freq, gpf) { - switch (sample_freq) { - case 44100: - gpf.version = 1; - return 0; - case 48000: - gpf.version = 1; - return 1; - case 32000: - gpf.version = 1; - return 2; - case 22050: - gpf.version = 0; - return 0; - case 24000: - gpf.version = 0; - return 1; - case 16000: - gpf.version = 0; - return 2; - case 11025: - gpf.version = 0; - return 0; - case 12000: - gpf.version = 0; - return 1; - case 8000: - gpf.version = 0; - return 2; - default: - gpf.version = 0; - return -1; - } - } - - /** - * @param bRate - * legal rates from 8 to 320 - */ - function FindNearestBitrate(bRate, version, samplerate) { - /* MPEG-1 or MPEG-2 LSF */ - if (samplerate < 16000) - version = 2; - - var bitrate = Tables.bitrate_table[version][1]; - - for (var i = 2; i <= 14; i++) { - if (Tables.bitrate_table[version][i] > 0) { - if (Math.abs(Tables.bitrate_table[version][i] - bRate) < Math - .abs(bitrate - bRate)) - bitrate = Tables.bitrate_table[version][i]; - } - } - return bitrate; - } - - /** - * @param bRate - * legal rates from 32 to 448 kbps - * @param version - * MPEG-1 or MPEG-2/2.5 LSF - */ - function BitrateIndex(bRate, version, samplerate) { - /* convert bitrate in kbps to index */ - if (samplerate < 16000) - version = 2; - for (var i = 0; i <= 14; i++) { - if (Tables.bitrate_table[version][i] > 0) { - if (Tables.bitrate_table[version][i] == bRate) { - return i; - } - } - } - return -1; - } - - function optimum_bandwidth(lh, bitrate) { - /** - *
-         *  Input:
-         *      bitrate     total bitrate in kbps
-         *
-         *   Output:
-         *      lowerlimit: best lowpass frequency limit for input filter in Hz
-         *      upperlimit: best highpass frequency limit for input filter in Hz
-         * 
- */ - var freq_map = [new BandPass(8, 2000), - new BandPass(16, 3700), new BandPass(24, 3900), - new BandPass(32, 5500), new BandPass(40, 7000), - new BandPass(48, 7500), new BandPass(56, 10000), - new BandPass(64, 11000), new BandPass(80, 13500), - new BandPass(96, 15100), new BandPass(112, 15600), - new BandPass(128, 17000), new BandPass(160, 17500), - new BandPass(192, 18600), new BandPass(224, 19400), - new BandPass(256, 19700), new BandPass(320, 20500)]; - - var table_index = self.nearestBitrateFullIndex(bitrate); - lh.lowerlimit = freq_map[table_index].lowpass; - } - - function lame_init_params_ppflt(gfp) { - var gfc = gfp.internal_flags; - /***************************************************************/ - /* compute info needed for polyphase filter (filter type==0, default) */ - /***************************************************************/ - - var lowpass_band = 32; - var highpass_band = -1; - - if (gfc.lowpass1 > 0) { - var minband = 999; - for (var band = 0; band <= 31; band++) { - var freq = (band / 31.0); - /* this band and above will be zeroed: */ - if (freq >= gfc.lowpass2) { - lowpass_band = Math.min(lowpass_band, band); - } - if (gfc.lowpass1 < freq && freq < gfc.lowpass2) { - minband = Math.min(minband, band); - } - } - - /* - * compute the *actual* transition band implemented by the polyphase - * filter - */ - if (minband == 999) { - gfc.lowpass1 = (lowpass_band - .75) / 31.0; - } else { - gfc.lowpass1 = (minband - .75) / 31.0; - } - gfc.lowpass2 = lowpass_band / 31.0; - } - - /* - * make sure highpass filter is within 90% of what the effective - * highpass frequency will be - */ - if (gfc.highpass2 > 0) { - if (gfc.highpass2 < .9 * (.75 / 31.0)) { - gfc.highpass1 = 0; - gfc.highpass2 = 0; - System.err.println("Warning: highpass filter disabled. " - + "highpass frequency too small\n"); - } - } - - if (gfc.highpass2 > 0) { - var maxband = -1; - for (var band = 0; band <= 31; band++) { - var freq = band / 31.0; - /* this band and below will be zereod */ - if (freq <= gfc.highpass1) { - highpass_band = Math.max(highpass_band, band); - } - if (gfc.highpass1 < freq && freq < gfc.highpass2) { - maxband = Math.max(maxband, band); - } - } - /* - * compute the *actual* transition band implemented by the polyphase - * filter - */ - gfc.highpass1 = highpass_band / 31.0; - if (maxband == -1) { - gfc.highpass2 = (highpass_band + .75) / 31.0; - } else { - gfc.highpass2 = (maxband + .75) / 31.0; - } - } - - for (var band = 0; band < 32; band++) { - var fc1, fc2; - var freq = band / 31.0; - if (gfc.highpass2 > gfc.highpass1) { - fc1 = filter_coef((gfc.highpass2 - freq) - / (gfc.highpass2 - gfc.highpass1 + 1e-20)); - } else { - fc1 = 1.0; - } - if (gfc.lowpass2 > gfc.lowpass1) { - fc2 = filter_coef((freq - gfc.lowpass1) - / (gfc.lowpass2 - gfc.lowpass1 + 1e-20)); - } else { - fc2 = 1.0; - } - gfc.amp_filter[band] = (fc1 * fc2); - } - } - - function lame_init_qval(gfp) { - var gfc = gfp.internal_flags; - - switch (gfp.quality) { - default: - case 9: /* no psymodel, no noise shaping */ - gfc.psymodel = 0; - gfc.noise_shaping = 0; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 8: - gfp.quality = 7; - //$FALL-THROUGH$ - case 7: - /* - * use psymodel (for short block and m/s switching), but no noise - * shapping - */ - gfc.psymodel = 1; - gfc.noise_shaping = 0; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 6: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 5: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 4: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 3: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 1; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 2: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 1; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - /* inner loop */ - gfc.full_outer_loop = 0; - break; - - case 1: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 2; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 0: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 2; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - /* - * type 2 disabled because of it slowness, in favor of full outer - * loop search - */ - gfc.full_outer_loop = 0; - /* - * full outer loop search disabled because of audible distortions it - * may generate rh 060629 - */ - break; - } - - } - - function lame_init_bitstream(gfp) { - var gfc = gfp.internal_flags; - gfp.frameNum = 0; - - if (gfp.write_id3tag_automatic) { - id3.id3tag_write_v2(gfp); - } - /* initialize histogram data optionally used by frontend */ - - gfc.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]); - gfc.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]); - - gfc.PeakSample = 0.0; - - /* Write initial VBR Header to bitstream and init VBR data */ - if (gfp.bWriteVbrTag) - vbr.InitVbrTag(gfp); - } - - /******************************************************************** - * initialize internal params based on data in gf (globalflags struct filled - * in by calling program) - * - * OUTLINE: - * - * We first have some complex code to determine bitrate, output samplerate - * and mode. It is complicated by the fact that we allow the user to set - * some or all of these parameters, and need to determine best possible - * values for the rest of them: - * - * 1. set some CPU related flags 2. check if we are mono.mono, stereo.mono - * or stereo.stereo 3. compute bitrate and output samplerate: user may have - * set compression ratio user may have set a bitrate user may have set a - * output samplerate 4. set some options which depend on output samplerate - * 5. compute the actual compression ratio 6. set mode based on compression - * ratio - * - * The remaining code is much simpler - it just sets options based on the - * mode & compression ratio: - * - * set allow_diff_short based on mode select lowpass filter based on - * compression ratio & mode set the bitrate index, and min/max bitrates for - * VBR modes disable VBR tag if it is not appropriate initialize the - * bitstream initialize scalefac_band data set sideinfo_len (based on - * channels, CRC, out_samplerate) write an id3v2 tag into the bitstream - * write VBR tag into the bitstream set mpeg1/2 flag estimate the number of - * frames (based on a lot of data) - * - * now we set more flags: nspsytune: see code VBR modes see code CBR/ABR see - * code - * - * Finally, we set the algorithm flags based on the gfp.quality value - * lame_init_qval(gfp); - * - ********************************************************************/ - this.lame_init_params = function (gfp) { - var gfc = gfp.internal_flags; - - gfc.Class_ID = 0; - if (gfc.ATH == null) - gfc.ATH = new ATH(); - if (gfc.PSY == null) - gfc.PSY = new PSY(); - if (gfc.rgdata == null) - gfc.rgdata = new ReplayGain(); - - gfc.channels_in = gfp.num_channels; - if (gfc.channels_in == 1) - gfp.mode = MPEGMode.MONO; - gfc.channels_out = (gfp.mode == MPEGMode.MONO) ? 1 : 2; - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - if (gfp.mode == MPEGMode.MONO) - gfp.force_ms = false; - /* - * don't allow forced mid/side stereo for mono output - */ - - if (gfp.VBR == VbrMode.vbr_off && gfp.VBR_mean_bitrate_kbps != 128 - && gfp.brate == 0) - gfp.brate = gfp.VBR_mean_bitrate_kbps; - - if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_mtrh - || gfp.VBR == VbrMode.vbr_mt) { - /* these modes can handle free format condition */ - } else { - gfp.free_format = false; - /* mode can't be mixed with free format */ - } - - if (gfp.VBR == VbrMode.vbr_off && gfp.brate == 0) { - /* no bitrate or compression ratio specified, use 11.025 */ - if (BitStream.EQ(gfp.compression_ratio, 0)) - gfp.compression_ratio = 11.025; - /* - * rate to compress a CD down to exactly 128000 bps - */ - } - - /* find bitrate if user specify a compression ratio */ - if (gfp.VBR == VbrMode.vbr_off && gfp.compression_ratio > 0) { - - if (gfp.out_samplerate == 0) - gfp.out_samplerate = map2MP3Frequency((int)(0.97 * gfp.in_samplerate)); - /* - * round up with a margin of 3 % - */ - - /* - * choose a bitrate for the output samplerate which achieves - * specified compression ratio - */ - gfp.brate = 0 | (gfp.out_samplerate * 16 * gfc.channels_out / (1.e3 * gfp.compression_ratio)); - - /* we need the version for the bitrate table look up */ - gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp); - - if (!gfp.free_format) /* - * for non Free Format find the nearest allowed - * bitrate - */ - gfp.brate = FindNearestBitrate(gfp.brate, gfp.version, - gfp.out_samplerate); - } - - if (gfp.out_samplerate != 0) { - if (gfp.out_samplerate < 16000) { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 8); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 64); - } else if (gfp.out_samplerate < 32000) { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 8); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 160); - } else { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 32); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 320); - } - } - - /****************************************************************/ - /* if a filter has not been enabled, see if we should add one: */ - /****************************************************************/ - if (gfp.lowpassfreq == 0) { - var lowpass = 16000.; - - switch (gfp.VBR) { - case VbrMode.vbr_off: - { - var lh = new LowPassHighPass(); - optimum_bandwidth(lh, gfp.brate); - lowpass = lh.lowerlimit; - break; - } - case VbrMode.vbr_abr: - { - var lh = new LowPassHighPass(); - optimum_bandwidth(lh, gfp.VBR_mean_bitrate_kbps); - lowpass = lh.lowerlimit; - break; - } - case VbrMode.vbr_rh: - { - var x = [19500, 19000, 18600, 18000, 17500, 16000, - 15600, 14900, 12500, 10000, 3950]; - if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) { - var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac; - lowpass = linear_int(a, b, m); - } else { - lowpass = 19500; - } - break; - } - default: - { - var x = [19500, 19000, 18500, 18000, 17500, 16500, - 15500, 14500, 12500, 9500, 3950]; - if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) { - var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac; - lowpass = linear_int(a, b, m); - } else { - lowpass = 19500; - } - } - } - if (gfp.mode == MPEGMode.MONO - && (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr)) - lowpass *= 1.5; - - gfp.lowpassfreq = lowpass | 0; - } - - if (gfp.out_samplerate == 0) { - if (2 * gfp.lowpassfreq > gfp.in_samplerate) { - gfp.lowpassfreq = gfp.in_samplerate / 2; - } - gfp.out_samplerate = optimum_samplefreq(gfp.lowpassfreq | 0, - gfp.in_samplerate); - } - - gfp.lowpassfreq = Math.min(20500, gfp.lowpassfreq); - gfp.lowpassfreq = Math.min(gfp.out_samplerate / 2, gfp.lowpassfreq); - - if (gfp.VBR == VbrMode.vbr_off) { - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.brate); - } - if (gfp.VBR == VbrMode.vbr_abr) { - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.VBR_mean_bitrate_kbps); - } - - /* - * do not compute ReplayGain values and do not find the peak sample if - * we can't store them - */ - if (!gfp.bWriteVbrTag) { - gfp.findReplayGain = false; - gfp.decode_on_the_fly = false; - gfc.findPeakSample = false; - } - gfc.findReplayGain = gfp.findReplayGain; - gfc.decode_on_the_fly = gfp.decode_on_the_fly; - - if (gfc.decode_on_the_fly) - gfc.findPeakSample = true; - - if (gfc.findReplayGain) { - if (ga.InitGainAnalysis(gfc.rgdata, gfp.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR) { - gfp.internal_flags = null; - return -6; - } - } - - if (gfc.decode_on_the_fly && !gfp.decode_only) { - if (gfc.hip != null) { - mpglib.hip_decode_exit(gfc.hip); - } - gfc.hip = mpglib.hip_decode_init(); - } - - gfc.mode_gr = gfp.out_samplerate <= 24000 ? 1 : 2; - /* - * Number of granules per frame - */ - gfp.framesize = 576 * gfc.mode_gr; - gfp.encoder_delay = Encoder.ENCDELAY; - - gfc.resample_ratio = gfp.in_samplerate / gfp.out_samplerate; - - /** - *
-         *  sample freq       bitrate     compression ratio
-         *     [kHz]      [kbps/channel]   for 16 bit input
-         *     44.1            56               12.6
-         *     44.1            64               11.025
-         *     44.1            80                8.82
-         *     22.05           24               14.7
-         *     22.05           32               11.025
-         *     22.05           40                8.82
-         *     16              16               16.0
-         *     16              24               10.667
-         * 
- */ - /** - *
-         *  For VBR, take a guess at the compression_ratio.
-         *  For example:
-         *
-         *    VBR_q    compression     like
-         *     -        4.4         320 kbps/44 kHz
-         *   0...1      5.5         256 kbps/44 kHz
-         *     2        7.3         192 kbps/44 kHz
-         *     4        8.8         160 kbps/44 kHz
-         *     6       11           128 kbps/44 kHz
-         *     9       14.7          96 kbps
-         *
-         *  for lower bitrates, downsample with --resample
-         * 
- */ - switch (gfp.VBR) { - case VbrMode.vbr_mt: - case VbrMode.vbr_rh: - case VbrMode.vbr_mtrh: - { - /* numbers are a bit strange, but they determine the lowpass value */ - var cmp = [5.7, 6.5, 7.3, 8.2, 10, 11.9, 13, 14, - 15, 16.5]; - gfp.compression_ratio = cmp[gfp.VBR_q]; - } - break; - case VbrMode.vbr_abr: - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.VBR_mean_bitrate_kbps); - break; - default: - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.brate); - break; - } - - /* - * mode = -1 (not set by user) or mode = MONO (because of only 1 input - * channel). If mode has not been set, then select J-STEREO - */ - if (gfp.mode == MPEGMode.NOT_SET) { - gfp.mode = MPEGMode.JOINT_STEREO; - } - - /* apply user driven high pass filter */ - if (gfp.highpassfreq > 0) { - gfc.highpass1 = 2. * gfp.highpassfreq; - - if (gfp.highpasswidth >= 0) - gfc.highpass2 = 2. * (gfp.highpassfreq + gfp.highpasswidth); - else - /* 0% above on default */ - gfc.highpass2 = (1 + 0.00) * 2. * gfp.highpassfreq; - - gfc.highpass1 /= gfp.out_samplerate; - gfc.highpass2 /= gfp.out_samplerate; - } else { - gfc.highpass1 = 0; - gfc.highpass2 = 0; - } - /* apply user driven low pass filter */ - if (gfp.lowpassfreq > 0) { - gfc.lowpass2 = 2. * gfp.lowpassfreq; - if (gfp.lowpasswidth >= 0) { - gfc.lowpass1 = 2. * (gfp.lowpassfreq - gfp.lowpasswidth); - if (gfc.lowpass1 < 0) /* has to be >= 0 */ - gfc.lowpass1 = 0; - } else { /* 0% below on default */ - gfc.lowpass1 = (1 - 0.00) * 2. * gfp.lowpassfreq; - } - gfc.lowpass1 /= gfp.out_samplerate; - gfc.lowpass2 /= gfp.out_samplerate; - } else { - gfc.lowpass1 = 0; - gfc.lowpass2 = 0; - } - - /**********************************************************************/ - /* compute info needed for polyphase filter (filter type==0, default) */ - /**********************************************************************/ - lame_init_params_ppflt(gfp); - /******************************************************* - * samplerate and bitrate index - *******************************************************/ - gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp); - if (gfc.samplerate_index < 0) { - gfp.internal_flags = null; - return -1; - } - - if (gfp.VBR == VbrMode.vbr_off) { - if (gfp.free_format) { - gfc.bitrate_index = 0; - } else { - gfp.brate = FindNearestBitrate(gfp.brate, gfp.version, - gfp.out_samplerate); - gfc.bitrate_index = BitrateIndex(gfp.brate, gfp.version, - gfp.out_samplerate); - if (gfc.bitrate_index <= 0) { - gfp.internal_flags = null; - return -1; - } - } - } else { - gfc.bitrate_index = 1; - } - - /* for CBR, we will write an "info" tag. */ - - if (gfp.analysis) - gfp.bWriteVbrTag = false; - - /* some file options not allowed if output is: not specified or stdout */ - if (gfc.pinfo != null) - gfp.bWriteVbrTag = false; - /* disable Xing VBR tag */ - - bs.init_bit_stream_w(gfc); - - var j = gfc.samplerate_index + (3 * gfp.version) + 6 - * (gfp.out_samplerate < 16000 ? 1 : 0); - for (var i = 0; i < Encoder.SBMAX_l + 1; i++) - gfc.scalefac_band.l[i] = qupvt.sfBandIndex[j].l[i]; - - for (var i = 0; i < Encoder.PSFB21 + 1; i++) { - var size = (gfc.scalefac_band.l[22] - gfc.scalefac_band.l[21]) - / Encoder.PSFB21; - var start = gfc.scalefac_band.l[21] + i * size; - gfc.scalefac_band.psfb21[i] = start; - } - gfc.scalefac_band.psfb21[Encoder.PSFB21] = 576; - - for (var i = 0; i < Encoder.SBMAX_s + 1; i++) - gfc.scalefac_band.s[i] = qupvt.sfBandIndex[j].s[i]; - - for (var i = 0; i < Encoder.PSFB12 + 1; i++) { - var size = (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]) - / Encoder.PSFB12; - var start = gfc.scalefac_band.s[12] + i * size; - gfc.scalefac_band.psfb12[i] = start; - } - gfc.scalefac_band.psfb12[Encoder.PSFB12] = 192; - /* determine the mean bitrate for main data */ - if (gfp.version == 1) /* MPEG 1 */ - gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 17 : 4 + 32; - else - /* MPEG 2 */ - gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 9 : 4 + 17; - - if (gfp.error_protection) - gfc.sideinfo_len += 2; - - lame_init_bitstream(gfp); - - gfc.Class_ID = LAME_ID; - - { - var k; - - for (k = 0; k < 19; k++) - gfc.nsPsy.pefirbuf[k] = 700 * gfc.mode_gr * gfc.channels_out; - - if (gfp.ATHtype == -1) - gfp.ATHtype = 4; - } - - switch (gfp.VBR) { - - case VbrMode.vbr_mt: - gfp.VBR = VbrMode.vbr_mtrh; - //$FALL-THROUGH$ - case VbrMode.vbr_mtrh: - { - if (gfp.useTemporal == null) { - gfp.useTemporal = false; - /* off by default for this VBR mode */ - } - - p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0); - /** - *
-                 *   The newer VBR code supports only a limited
-                 *     subset of quality levels:
-                 *     9-5=5 are the same, uses x^3/4 quantization
-                 *   4-0=0 are the same  5 plus best huffman divide code
-                 * 
- */ - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - if (gfp.quality < 5) - gfp.quality = 0; - if (gfp.quality > 5) - gfp.quality = 5; - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - /* - * sfb21 extra only with MPEG-1 at higher sampling rates - */ - if (gfp.experimentalY) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = (gfp.out_samplerate > 44000); - - gfc.iteration_loop = new VBRNewIterationLoop(qu); - break; - - } - case VbrMode.vbr_rh: - { - - p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0); - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - /* - * sfb21 extra only with MPEG-1 at higher sampling rates - */ - if (gfp.experimentalY) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = (gfp.out_samplerate > 44000); - - /* - * VBR needs at least the output of GPSYCHO, so we have to garantee - * that by setting a minimum quality level, actually level 6 does - * it. down to level 6 - */ - if (gfp.quality > 6) - gfp.quality = 6; - - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - - gfc.iteration_loop = new VBROldIterationLoop(qu); - break; - } - - default: /* cbr/abr */ - { - var vbrmode; - - /* - * no sfb21 extra with CBR code - */ - gfc.sfb21_extra = false; - - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - - vbrmode = gfp.VBR; - if (vbrmode == VbrMode.vbr_off) - gfp.VBR_mean_bitrate_kbps = gfp.brate; - /* second, set parameters depending on bitrate */ - p.apply_preset(gfp, gfp.VBR_mean_bitrate_kbps, 0); - gfp.VBR = vbrmode; - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - if (vbrmode == VbrMode.vbr_off) { - gfc.iteration_loop = new CBRNewIterationLoop(qu); - } else { - gfc.iteration_loop = new ABRIterationLoop(qu); - } - break; - } - } - /* initialize default values common for all modes */ - - if (gfp.VBR != VbrMode.vbr_off) { /* choose a min/max bitrate for VBR */ - /* if the user didn't specify VBR_max_bitrate: */ - gfc.VBR_min_bitrate = 1; - /* - * default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1) - */ - gfc.VBR_max_bitrate = 14; - /* - * default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1) - */ - if (gfp.out_samplerate < 16000) - gfc.VBR_max_bitrate = 8; - /* default: allow 64 kbps (MPEG-2.5) */ - if (gfp.VBR_min_bitrate_kbps != 0) { - gfp.VBR_min_bitrate_kbps = FindNearestBitrate( - gfp.VBR_min_bitrate_kbps, gfp.version, - gfp.out_samplerate); - gfc.VBR_min_bitrate = BitrateIndex(gfp.VBR_min_bitrate_kbps, - gfp.version, gfp.out_samplerate); - if (gfc.VBR_min_bitrate < 0) - return -1; - } - if (gfp.VBR_max_bitrate_kbps != 0) { - gfp.VBR_max_bitrate_kbps = FindNearestBitrate( - gfp.VBR_max_bitrate_kbps, gfp.version, - gfp.out_samplerate); - gfc.VBR_max_bitrate = BitrateIndex(gfp.VBR_max_bitrate_kbps, - gfp.version, gfp.out_samplerate); - if (gfc.VBR_max_bitrate < 0) - return -1; - } - gfp.VBR_min_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate]; - gfp.VBR_max_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate]; - gfp.VBR_mean_bitrate_kbps = Math.min( - Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate], - gfp.VBR_mean_bitrate_kbps); - gfp.VBR_mean_bitrate_kbps = Math.max( - Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate], - gfp.VBR_mean_bitrate_kbps); - } - - /* just another daily changing developer switch */ - if (gfp.tune) { - gfc.PSY.mask_adjust += gfp.tune_value_a; - gfc.PSY.mask_adjust_short += gfp.tune_value_a; - } - - /* initialize internal qval settings */ - lame_init_qval(gfp); - /* - * automatic ATH adjustment on - */ - if (gfp.athaa_type < 0) - gfc.ATH.useAdjust = 3; - else - gfc.ATH.useAdjust = gfp.athaa_type; - - /* initialize internal adaptive ATH settings -jd */ - gfc.ATH.aaSensitivityP = Math.pow(10.0, gfp.athaa_sensitivity - / -10.0); - - if (gfp.short_blocks == null) { - gfp.short_blocks = ShortBlock.short_block_allowed; - } - - /* - * Note Jan/2003: Many hardware decoders cannot handle short blocks in - * regular stereo mode unless they are coupled (same type in both - * channels) it is a rare event (1 frame per min. or so) that LAME would - * use uncoupled short blocks, so lets turn them off until we decide how - * to handle this. No other encoders allow uncoupled short blocks, even - * though it is in the standard. - */ - /* - * rh 20040217: coupling makes no sense for mono and dual-mono streams - */ - if (gfp.short_blocks == ShortBlock.short_block_allowed - && (gfp.mode == MPEGMode.JOINT_STEREO || gfp.mode == MPEGMode.STEREO)) { - gfp.short_blocks = ShortBlock.short_block_coupled; - } - - if (gfp.quant_comp < 0) - gfp.quant_comp = 1; - if (gfp.quant_comp_short < 0) - gfp.quant_comp_short = 0; - - if (gfp.msfix < 0) - gfp.msfix = 0; - - /* select psychoacoustic model */ - gfp.exp_nspsytune = gfp.exp_nspsytune | 1; - - if (gfp.internal_flags.nsPsy.attackthre < 0) - gfp.internal_flags.nsPsy.attackthre = PsyModel.NSATTACKTHRE; - if (gfp.internal_flags.nsPsy.attackthre_s < 0) - gfp.internal_flags.nsPsy.attackthre_s = PsyModel.NSATTACKTHRE_S; - - - if (gfp.scale < 0) - gfp.scale = 1; - - if (gfp.ATHtype < 0) - gfp.ATHtype = 4; - - if (gfp.ATHcurve < 0) - gfp.ATHcurve = 4; - - if (gfp.athaa_loudapprox < 0) - gfp.athaa_loudapprox = 2; - - if (gfp.interChRatio < 0) - gfp.interChRatio = 0; - - if (gfp.useTemporal == null) - gfp.useTemporal = true; - /* on by default */ - - /* - * padding method as described in - * "MPEG-Layer3 / Bitstream Syntax and Decoding" by Martin Sieler, Ralph - * Sperschneider - * - * note: there is no padding for the very first frame - * - * Robert Hegemann 2000-06-22 - */ - gfc.slot_lag = gfc.frac_SpF = 0; - if (gfp.VBR == VbrMode.vbr_off) - gfc.slot_lag = gfc.frac_SpF = (((gfp.version + 1) * 72000 * gfp.brate) % gfp.out_samplerate) | 0; - - qupvt.iteration_init(gfp); - psy.psymodel_init(gfp); - return 0; - } - - function update_inbuffer_size(gfc, nsamples) { - if (gfc.in_buffer_0 == null || gfc.in_buffer_nsamples < nsamples) { - gfc.in_buffer_0 = new_float(nsamples); - gfc.in_buffer_1 = new_float(nsamples); - gfc.in_buffer_nsamples = nsamples; - } - } - - this.lame_encode_flush = function (gfp, mp3buffer, mp3bufferPos, mp3buffer_size) { - var gfc = gfp.internal_flags; - var buffer = new_short_n([2, 1152]); - var imp3 = 0, mp3count, mp3buffer_size_remaining; - - /* - * we always add POSTDELAY=288 padding to make sure granule with real - * data can be complety decoded (because of 50% overlap with next - * granule - */ - var end_padding; - var frames_left; - var samples_to_encode = gfc.mf_samples_to_encode - Encoder.POSTDELAY; - var mf_needed = calcNeeded(gfp); - - /* Was flush already called? */ - if (gfc.mf_samples_to_encode < 1) { - return 0; - } - mp3count = 0; - - if (gfp.in_samplerate != gfp.out_samplerate) { - /* - * delay due to resampling; needs to be fixed, if resampling code - * gets changed - */ - samples_to_encode += 16. * gfp.out_samplerate / gfp.in_samplerate; - } - end_padding = gfp.framesize - (samples_to_encode % gfp.framesize); - if (end_padding < 576) - end_padding += gfp.framesize; - gfp.encoder_padding = end_padding; - - frames_left = (samples_to_encode + end_padding) / gfp.framesize; - - /* - * send in a frame of 0 padding until all internal sample buffers are - * flushed - */ - while (frames_left > 0 && imp3 >= 0) { - var bunch = mf_needed - gfc.mf_size; - var frame_num = gfp.frameNum; - - bunch *= gfp.in_samplerate; - bunch /= gfp.out_samplerate; - if (bunch > 1152) - bunch = 1152; - if (bunch < 1) - bunch = 1; - - mp3buffer_size_remaining = mp3buffer_size - mp3count; - - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - imp3 = this.lame_encode_buffer(gfp, buffer[0], buffer[1], bunch, - mp3buffer, mp3bufferPos, mp3buffer_size_remaining); - - mp3bufferPos += imp3; - mp3count += imp3; - frames_left -= (frame_num != gfp.frameNum) ? 1 : 0; - } - /* - * Set gfc.mf_samples_to_encode to 0, so we may detect and break loops - * calling it more than once in a row. - */ - gfc.mf_samples_to_encode = 0; - - if (imp3 < 0) { - /* some type of fatal error */ - return imp3; - } - - mp3buffer_size_remaining = mp3buffer_size - mp3count; - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - /* mp3 related stuff. bit buffer might still contain some mp3 data */ - bs.flush_bitstream(gfp); - imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos, - mp3buffer_size_remaining, 1); - if (imp3 < 0) { - /* some type of fatal error */ - return imp3; - } - mp3bufferPos += imp3; - mp3count += imp3; - mp3buffer_size_remaining = mp3buffer_size - mp3count; - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - if (gfp.write_id3tag_automatic) { - /* write a id3 tag to the bitstream */ - id3.id3tag_write_v1(gfp); - - imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos, - mp3buffer_size_remaining, 0); - - if (imp3 < 0) { - return imp3; - } - mp3count += imp3; - } - return mp3count; - }; - - this.lame_encode_buffer = function (gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) { - var gfc = gfp.internal_flags; - var in_buffer = [null, null]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - update_inbuffer_size(gfc, nsamples); - - in_buffer[0] = gfc.in_buffer_0; - in_buffer[1] = gfc.in_buffer_1; - - /* make a copy of input buffer, changing type to sample_t */ - for (var i = 0; i < nsamples; i++) { - in_buffer[0][i] = buffer_l[i]; - if (gfc.channels_in > 1) - in_buffer[1][i] = buffer_r[i]; - } - - return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1], - nsamples, mp3buf, mp3bufPos, mp3buf_size); - } - - function calcNeeded(gfp) { - var mf_needed = Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET; - /* - * amount needed for FFT - */ - mf_needed = Math.max(mf_needed, 512 + gfp.framesize - 32); - - return mf_needed; - } - - function lame_encode_buffer_sample(gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) { - var gfc = gfp.internal_flags; - var mp3size = 0, ret, i, ch, mf_needed; - var mp3out; - var mfbuf = [null, null]; - var in_buffer = [null, null]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - /* copy out any tags that may have been written into bitstream */ - mp3out = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 0); - if (mp3out < 0) - return mp3out; - /* not enough buffer space */ - mp3bufPos += mp3out; - mp3size += mp3out; - - in_buffer[0] = buffer_l; - in_buffer[1] = buffer_r; - - /* Apply user defined re-scaling */ - - /* user selected scaling of the samples */ - if (BitStream.NEQ(gfp.scale, 0) && BitStream.NEQ(gfp.scale, 1.0)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] *= gfp.scale; - if (gfc.channels_out == 2) - in_buffer[1][i] *= gfp.scale; - } - } - - /* user selected scaling of the channel 0 (left) samples */ - if (BitStream.NEQ(gfp.scale_left, 0) - && BitStream.NEQ(gfp.scale_left, 1.0)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] *= gfp.scale_left; - } - } - - /* user selected scaling of the channel 1 (right) samples */ - if (BitStream.NEQ(gfp.scale_right, 0) - && BitStream.NEQ(gfp.scale_right, 1.0)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[1][i] *= gfp.scale_right; - } - } - - /* Downsample to Mono if 2 channels in and 1 channel out */ - if (gfp.num_channels == 2 && gfc.channels_out == 1) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] = 0.5 * ( in_buffer[0][i] + in_buffer[1][i]); - in_buffer[1][i] = 0.0; - } - } - - mf_needed = calcNeeded(gfp); - - mfbuf[0] = gfc.mfbuf[0]; - mfbuf[1] = gfc.mfbuf[1]; - - var in_bufferPos = 0; - while (nsamples > 0) { - var in_buffer_ptr = [null, null]; - var n_in = 0; - /* number of input samples processed with fill_buffer */ - var n_out = 0; - /* number of samples output with fill_buffer */ - /* n_in <> n_out if we are resampling */ - - in_buffer_ptr[0] = in_buffer[0]; - in_buffer_ptr[1] = in_buffer[1]; - /* copy in new samples into mfbuf, with resampling */ - var inOut = new InOut(); - fill_buffer(gfp, mfbuf, in_buffer_ptr, in_bufferPos, nsamples, - inOut); - n_in = inOut.n_in; - n_out = inOut.n_out; - - /* compute ReplayGain of resampled input if requested */ - if (gfc.findReplayGain && !gfc.decode_on_the_fly) - if (ga.AnalyzeSamples(gfc.rgdata, mfbuf[0], gfc.mf_size, - mfbuf[1], gfc.mf_size, n_out, gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR) - return -6; - - /* update in_buffer counters */ - nsamples -= n_in; - in_bufferPos += n_in; - if (gfc.channels_out == 2) - ;// in_bufferPos += n_in; - - /* update mfbuf[] counters */ - gfc.mf_size += n_out; - - /* - * lame_encode_flush may have set gfc.mf_sample_to_encode to 0 so we - * have to reinitialize it here when that happened. - */ - if (gfc.mf_samples_to_encode < 1) { - gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY; - } - gfc.mf_samples_to_encode += n_out; - - if (gfc.mf_size >= mf_needed) { - /* encode the frame. */ - /* mp3buf = pointer to current location in buffer */ - /* mp3buf_size = size of original mp3 output buffer */ - /* = 0 if we should not worry about the */ - /* buffer size because calling program is */ - /* to lazy to compute it */ - /* mp3size = size of data written to buffer so far */ - /* mp3buf_size-mp3size = amount of space avalable */ - - var buf_size = mp3buf_size - mp3size; - if (mp3buf_size == 0) - buf_size = 0; - - ret = lame_encode_frame(gfp, mfbuf[0], mfbuf[1], mp3buf, - mp3bufPos, buf_size); - - if (ret < 0) - return ret; - mp3bufPos += ret; - mp3size += ret; - - /* shift out old samples */ - gfc.mf_size -= gfp.framesize; - gfc.mf_samples_to_encode -= gfp.framesize; - for (ch = 0; ch < gfc.channels_out; ch++) - for (i = 0; i < gfc.mf_size; i++) - mfbuf[ch][i] = mfbuf[ch][i + gfp.framesize]; - } - } - - return mp3size; - } - - function lame_encode_frame(gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) { - var ret = self.enc.lame_encode_mp3_frame(gfp, inbuf_l, inbuf_r, mp3buf, - mp3bufPos, mp3buf_size); - gfp.frameNum++; - return ret; - } - - function InOut() { - this.n_in = 0; - this.n_out = 0; - } - - - function NumUsed() { - this.num_used = 0; - } - - /** - * Greatest common divisor. - *

- * Joint work of Euclid and M. Hendry - */ - function gcd(i, j) { - return j != 0 ? gcd(j, i % j) : i; - } - - /** - * Resampling via FIR filter, blackman window. - */ - function blackman(x, fcn, l) { - /* - * This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C - * S.D. Stearns and R.A. David, Prentice-Hall, 1992 - */ - var wcn = (Math.PI * fcn); - - x /= l; - if (x < 0) - x = 0; - if (x > 1) - x = 1; - var x2 = x - .5; - - var bkwn = 0.42 - 0.5 * Math.cos(2 * x * Math.PI) + 0.08 * Math.cos(4 * x * Math.PI); - if (Math.abs(x2) < 1e-9) - return (wcn / Math.PI); - else - return (bkwn * Math.sin(l * wcn * x2) / (Math.PI * l * x2)); - } - - function fill_buffer_resample(gfp, outbuf, outbufPos, desired_len, inbuf, in_bufferPos, len, num_used, ch) { - var gfc = gfp.internal_flags; - var i, j = 0, k; - /* number of convolution functions to pre-compute */ - var bpc = gfp.out_samplerate - / gcd(gfp.out_samplerate, gfp.in_samplerate); - if (bpc > LameInternalFlags.BPC) - bpc = LameInternalFlags.BPC; - - var intratio = (Math.abs(gfc.resample_ratio - - Math.floor(.5 + gfc.resample_ratio)) < .0001) ? 1 : 0; - var fcn = 1.00 / gfc.resample_ratio; - if (fcn > 1.00) - fcn = 1.00; - var filter_l = 31; - if (0 == filter_l % 2) - --filter_l; - /* must be odd */ - filter_l += intratio; - /* unless resample_ratio=int, it must be even */ - - var BLACKSIZE = filter_l + 1; - /* size of data needed for FIR */ - - if (gfc.fill_buffer_resample_init == 0) { - gfc.inbuf_old[0] = new_float(BLACKSIZE); - gfc.inbuf_old[1] = new_float(BLACKSIZE); - for (i = 0; i <= 2 * bpc; ++i) - gfc.blackfilt[i] = new_float(BLACKSIZE); - - gfc.itime[0] = 0; - gfc.itime[1] = 0; - - /* precompute blackman filter coefficients */ - for (j = 0; j <= 2 * bpc; j++) { - var sum = 0.; - var offset = (j - bpc) / (2. * bpc); - for (i = 0; i <= filter_l; i++) - sum += gfc.blackfilt[j][i] = blackman(i - offset, fcn, - filter_l); - for (i = 0; i <= filter_l; i++) - gfc.blackfilt[j][i] /= sum; - } - gfc.fill_buffer_resample_init = 1; - } - - var inbuf_old = gfc.inbuf_old[ch]; - - /* time of j'th element in inbuf = itime + j/ifreq; */ - /* time of k'th element in outbuf = j/ofreq */ - for (k = 0; k < desired_len; k++) { - var time0; - var joff; - - time0 = k * gfc.resample_ratio; - /* time of k'th output sample */ - j = 0 | Math.floor(time0 - gfc.itime[ch]); - - /* check if we need more input data */ - if ((filter_l + j - filter_l / 2) >= len) - break; - - /* blackman filter. by default, window centered at j+.5(filter_l%2) */ - /* but we want a window centered at time0. */ - var offset = (time0 - gfc.itime[ch] - (j + .5 * (filter_l % 2))); - - /* find the closest precomputed window for this offset: */ - joff = 0 | Math.floor((offset * 2 * bpc) + bpc + .5); - var xvalue = 0.; - for (i = 0; i <= filter_l; ++i) { - /* force integer index */ - var j2 = 0 | (i + j - filter_l / 2); - var y; - y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[in_bufferPos - + j2]; - xvalue += y * gfc.blackfilt[joff][i]; - } - outbuf[outbufPos + k] = xvalue; - } - - /* k = number of samples added to outbuf */ - /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */ - - /* how many samples of input data were used: */ - num_used.num_used = Math.min(len, filter_l + j - filter_l / 2); - - /* - * adjust our input time counter. Incriment by the number of samples - * used, then normalize so that next output sample is at time 0, next - * input buffer is at time itime[ch] - */ - gfc.itime[ch] += num_used.num_used - k * gfc.resample_ratio; - - /* save the last BLACKSIZE samples into the inbuf_old buffer */ - if (num_used.num_used >= BLACKSIZE) { - for (i = 0; i < BLACKSIZE; i++) - inbuf_old[i] = inbuf[in_bufferPos + num_used.num_used + i - - BLACKSIZE]; - } else { - /* shift in num_used.num_used samples into inbuf_old */ - var n_shift = BLACKSIZE - num_used.num_used; - /* - * number of samples to - * shift - */ - - /* - * shift n_shift samples by num_used.num_used, to make room for the - * num_used new samples - */ - for (i = 0; i < n_shift; ++i) - inbuf_old[i] = inbuf_old[i + num_used.num_used]; - - /* shift in the num_used.num_used samples */ - for (j = 0; i < BLACKSIZE; ++i, ++j) - inbuf_old[i] = inbuf[in_bufferPos + j]; - - } - return k; - /* return the number samples created at the new samplerate */ - } - - function fill_buffer(gfp, mfbuf, in_buffer, in_bufferPos, nsamples, io) { - var gfc = gfp.internal_flags; - - /* copy in new samples into mfbuf, with resampling if necessary */ - if ((gfc.resample_ratio < .9999) || (gfc.resample_ratio > 1.0001)) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - var numUsed = new NumUsed(); - io.n_out = fill_buffer_resample(gfp, mfbuf[ch], gfc.mf_size, - gfp.framesize, in_buffer[ch], in_bufferPos, nsamples, - numUsed, ch); - io.n_in = numUsed.num_used; - } - } else { - io.n_out = Math.min(gfp.framesize, nsamples); - io.n_in = io.n_out; - for (var i = 0; i < io.n_out; ++i) { - mfbuf[0][gfc.mf_size + i] = in_buffer[0][in_bufferPos + i]; - if (gfc.channels_out == 2) - mfbuf[1][gfc.mf_size + i] = in_buffer[1][in_bufferPos + i]; - } - } - } - -} - - - -function GetAudio() { - var parse; - var mpg; - - this.setModules = function (parse2, mpg2) { - parse = parse2; - mpg = mpg2; - } -} - - -function Parse() { - var ver; - var id3; - var pre; - - this.setModules = function (ver2, id32, pre2) { - ver = ver2; - id3 = id32; - pre = pre2; - } -} - -function MPGLib() { -} - -function ID3Tag() { - var bits; - var ver; - - this.setModules = function (_bits, _ver) { - bits = _bits; - ver = _ver; - } -} - -function Mp3Encoder(channels, samplerate, kbps) { - if (arguments.length != 3) { - console.error('WARN: Mp3Encoder(channels, samplerate, kbps) not specified'); - channels = 1; - samplerate = 44100; - kbps = 128; - } - var lame = new Lame(); - var gaud = new GetAudio(); - var ga = new GainAnalysis(); - var bs = new BitStream(); - var p = new Presets(); - var qupvt = new QuantizePVT(); - var qu = new Quantize(); - var vbr = new VBRTag(); - var ver = new Version(); - var id3 = new ID3Tag(); - var rv = new Reservoir(); - var tak = new Takehiro(); - var parse = new Parse(); - var mpg = new MPGLib(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - var gfp = lame.lame_init(); - - gfp.num_channels = channels; - gfp.in_samplerate = samplerate; - gfp.brate = kbps; - gfp.mode = MPEGMode.STEREO; - gfp.quality = 3; - gfp.bWriteVbrTag = false; - gfp.disable_reservoir = true; - gfp.write_id3tag_automatic = false; - - var retcode = lame.lame_init_params(gfp); - var maxSamples = 1152; - var mp3buf_size = 0 | (1.25 * maxSamples + 7200); - var mp3buf = new_byte(mp3buf_size); - - this.encodeBuffer = function (left, right) { - if (channels == 1) { - right = left; - } - if (left.length > maxSamples) { - maxSamples = left.length; - mp3buf_size = 0 | (1.25 * maxSamples + 7200); - mp3buf = new_byte(mp3buf_size); - } - - var _sz = lame.lame_encode_buffer(gfp, left, right, left.length, mp3buf, 0, mp3buf_size); - return new Int8Array(mp3buf.subarray(0, _sz)); - }; - - this.flush = function () { - var _sz = lame.lame_encode_flush(gfp, mp3buf, 0, mp3buf_size); - return new Int8Array(mp3buf.subarray(0, _sz)); - }; -} - -function WavHeader() { - this.dataOffset = 0; - this.dataLen = 0; - this.channels = 0; - this.sampleRate = 0; -} - -function fourccToInt(fourcc) { - return fourcc.charCodeAt(0) << 24 | fourcc.charCodeAt(1) << 16 | fourcc.charCodeAt(2) << 8 | fourcc.charCodeAt(3); -} - -WavHeader.RIFF = fourccToInt("RIFF"); -WavHeader.WAVE = fourccToInt("WAVE"); -WavHeader.fmt_ = fourccToInt("fmt "); -WavHeader.data = fourccToInt("data"); - -WavHeader.readHeader = function (dataView) { - var w = new WavHeader(); - - var header = dataView.getUint32(0, false); - if (WavHeader.RIFF != header) { - return; - } - var fileLen = dataView.getUint32(4, true); - if (WavHeader.WAVE != dataView.getUint32(8, false)) { - return; - } - if (WavHeader.fmt_ != dataView.getUint32(12, false)) { - return; - } - var fmtLen = dataView.getUint32(16, true); - var pos = 16 + 4; - switch (fmtLen) { - case 16: - case 18: - w.channels = dataView.getUint16(pos + 2, true); - w.sampleRate = dataView.getUint32(pos + 4, true); - break; - default: - throw 'extended fmt chunk not implemented'; - } - pos += fmtLen; - var data = WavHeader.data; - var len = 0; - while (data != header) { - header = dataView.getUint32(pos, false); - len = dataView.getUint32(pos + 4, true); - if (data == header) { - break; - } - pos += (len + 8); - } - w.dataLen = len; - w.dataOffset = pos + 8; - return w; -}; - -L3Side.SFBMAX = (Encoder.SBMAX_s * 3); -//testFullLength(); -lamejs.Mp3Encoder = Mp3Encoder; -lamejs.WavHeader = WavHeader; -} -//fs=require('fs'); -lamejs(); - -export default lamejs; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.js deleted file mode 100644 index 76e0cf6c6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.js +++ /dev/null @@ -1,308 +0,0 @@ -function lamejs(){function X(c){return new Int32Array(c)}function K(c){return new Float32Array(c)}function ca(c){if(1==c.length)return K(c[0]);var k=c[0];c=c.slice(1);for(var n=[],u=0;uf.sampleWindow-f.totsamp?f.sampleWindow-f.totsamp:d;if(lMAX_ORDER-l&&(g=MAX_ORDER-l)}else e=v+l,q=b,D=m+l,p=a;c(q,e,f.lstepbuf,f.lstep+f.totsamp,g,B[f.reqindex]);c(p,D,f.rstepbuf,f.rstep+f.totsamp,g,B[f.reqindex]);k(f.lstepbuf,f.lstep+f.totsamp,f.loutbuf,f.lout+f.totsamp,g,w[f.reqindex]);k(f.rstepbuf,f.rstep+f.totsamp,f.routbuf,f.rout+f.totsamp,g,w[f.reqindex]);e=f.lout+f.totsamp;q=f.loutbuf; -D=f.rout+f.totsamp;p=f.routbuf;for(var r=g%8;0!=r--;)f.lsum+=n(q[e++]),f.rsum+=n(p[D++]);for(r=g/8;0!=r--;)f.lsum+=n(q[e+0])+n(q[e+1])+n(q[e+2])+n(q[e+3])+n(q[e+4])+n(q[e+5])+n(q[e+6])+n(q[e+7]),e+=8,f.rsum+=n(p[D+0])+n(p[D+1])+n(p[D+2])+n(p[D+3])+n(p[D+4])+n(p[D+5])+n(p[D+6])+n(p[D+7]),D+=8;d-=g;l+=g;f.totsamp+=g;f.totsamp==f.sampleWindow&&(e=10*Y.STEPS_per_dB*Math.log10((f.lsum+f.rsum)/f.totsamp*.5+1E-37),e=0>=e?0:0|e,e>=f.A.length&&(e=f.A.length-1),f.A[e]++,f.lsum=f.rsum=0,T.arraycopy(f.loutbuf, -f.totsamp,f.loutbuf,0,MAX_ORDER),T.arraycopy(f.routbuf,f.totsamp,f.routbuf,0,MAX_ORDER),T.arraycopy(f.lstepbuf,f.totsamp,f.lstepbuf,0,MAX_ORDER),T.arraycopy(f.rstepbuf,f.totsamp,f.rstepbuf,0,MAX_ORDER),f.totsamp=0);if(f.totsamp>f.sampleWindow)return GAIN_ANALYSIS_ERROR}u=(m-=b[a])););b=64.82-a/Y.STEPS_per_dB}for(c=0;cf&&(f=0);9k&&(k+=64);b.exp_nspsytune|=k<<2}0!=a?b.quant_comp=f[m].quant_comp:0=c)return V(b,c,a);b.preset=0;return c}}function qb(){function u(a){this.bits=0|a}function k(a,d,p,b,e,c){d=.5946/d;for(a>>=1;0!=a--;)e[c++]=d>p[b++]? -0:1,e[c++]=d>p[b++]?0:1}function n(a,d,b,e,c,l){a>>=1;var h=a%2;for(a>>=1;0!=a--;){var p=b[e++]*d;var r=b[e++]*d;var t=0|p;var f=b[e++]*d;var g=0|r;var J=b[e++]*d;var D=0|f;p+=B.adj43[t];t=0|J;r+=B.adj43[g];c[l++]=0|p;f+=B.adj43[D];c[l++]=0|r;J+=B.adj43[t];c[l++]=0|f;c[l++]=0|J}0!=h&&(p=b[e++]*d,r=b[e++]*d,p+=B.adj43[0|p],r+=B.adj43[0|r],c[l++]=0|p,c[l++]=0|r)}function V(a,d,b,e){var p,c=d,h=p=0;do{var r=a[c++],l=a[c++];p>=16;p>a&&(p=a,d++);e.bits+=p;return d;case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:c=d;d=f[p-1];r=h=p=0;l=w.ht[d].xlen;var g=w.ht[d].hlen,D=w.ht[d+1].hlen,q=w.ht[d+2].hlen;do{var m=a[c+0]*l+a[c+1];c+=2;p+=g[m];h+=D[m];r+=q[m]}while(ch&&(p=h,a++);p>r&&(p=r,a=d+2);e.bits+=p;return a;default:if(p>ia.IXMAX_VAL)return e.bits=ia.LARGE_BITS,-1;p-=15;for(c=24;32>c&&!(w.ht[c].linmax>=p);c++);for(h=c-8;24>h&&!(w.ht[h].linmax>=p);h++);p=h;r=65536*w.ht[p].xlen+w.ht[c].xlen;h=0;do l=a[d++],g=a[d++],0!=l&&(14>=16;h>a&&(h=a,p=c);e.bits+=h;return p}}function E(a,d,p,b,e,l,h,g){for(var r=d.big_values,f=2;f=r)break;var t=e[f-2]+d.count1bits;if(p.part2_3_length<=t)break;t=new u(t);x=V(b,x,r,t);t=t.bits;p.part2_3_length<=t||(p.assign(d),p.part2_3_length=t,p.region0_count=l[f-2],p.region1_count=f-2-l[f-2],p.table_select[0]=h[f-2],p.table_select[1]=g[f-2],p.table_select[2]=x)}}var B=null;this.qupvt=null;this.setModules=function(a){B=this.qupvt=a};var ha=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1],[1,1],[1,1],[1,2],[2,2],[2,3],[2,3],[3,4],[3,4],[3,4],[4,5],[4,5],[4,6],[5,6],[5,6],[5,7],[6,7],[6,7]],f=[1,2, -5,7,7,10,10,13,13,13,13,13,13,13,13];this.noquant_count_bits=function(a,d,p){var b=d.l3_enc,e=Math.min(576,d.max_nonzero_coeff+2>>1<<1);null!=p&&(p.sfb_count1=0);for(;1h&&(f=h,d.count1table_select=1);d.count1bits=f;d.big_values=e;if(0==e)return f;d.block_type==c.SHORT_TYPE?(l=3*a.scalefac_band.s[3], -l>d.big_values&&(l=d.big_values),h=d.big_values):d.block_type==c.NORM_TYPE?(l=d.region0_count=a.bv_scf[e-2],h=d.region1_count=a.bv_scf[e-1],h=a.scalefac_band.l[l+h+2],l=a.scalefac_band.l[l+1],hh&&(l=h));l=Math.min(l,e);h=Math.min(h,e);0l)return ia.LARGE_BITS;l=B.IPOW20(e.global_gain);var h,f=0,g=0,r=0,D=0,m=0,q=p,v=0,C=d,I=0;var Q=null!=b&&e.global_gain==b.global_gain;var S=e.block_type==c.SHORT_TYPE?38:21;for(h=0;h<=S;h++){var u=-1;if(Q||e.block_type==c.NORM_TYPE)u= -e.global_gain-(e.scalefac[h]+(0!=e.preflag?B.pretab[h]:0)<e.max_nonzero_coeff&&(h=e.max_nonzero_coeff-f+1,na.fill(p,e.max_nonzero_coeff,576,0),Z=h,0>Z&&(Z=0),h=S+1);0==g&&0==r&&(q=p,v=m,C=d,I=D);null!=b&&0=b.sfb_count1&&0=b.step[h]?(0!=g&&(n(g,l,C,I,q,v),g=0,q=p,v=m,C=d,I=D),r+=Z):(0!=r&&(k(r,l,C,I,q,v),r=0,q= -p,v=m,C=d,I=D),g+=Z);if(0>=Z){0!=r&&(k(r,l,C,I,q,v),r=0);0!=g&&(n(g,l,C,I,q,v),g=0);break}}h<=S&&(m+=e.width[h],D+=e.width[h],f+=e.width[h])}0!=g&&n(g,l,C,I,q,v);0!=r&&k(r,l,C,I,q,v);if(0!=(a.substep_shaping&2))for(l=0,S=.634521682242439/B.IPOW20(e.global_gain+e.scalefac_scale),f=0;f=S?p[g]:0;return this.noquant_count_bits(a,e,b)};this.best_huffman_divide=function(a,d){var e=new rb,b=d.l3_enc,l=X(23),f=X(23), -h=X(23),g=X(23);if(d.block_type!=c.SHORT_TYPE||1!=a.mode_gr){e.assign(d);if(d.block_type==c.NORM_TYPE){for(var y=d.big_values,m=0;22>=m;m++)l[m]=ia.LARGE_BITS;for(m=0;16>m;m++){var D=a.scalefac_band.l[m+1];if(D>=y)break;var q=0,k=new u(q),v=V(b,0,D,k);q=k.bits;for(var C=0;8>C;C++){var I=a.scalefac_band.l[m+C+2];if(I>=y)break;k=q;k=new u(k);I=V(b,D,I,k);k=k.bits;l[m+C]>k&&(l[m+C]=k,f[m+C]=m,h[m+C]=v,g[m+C]=I)}}E(a,e,d,b,l,f,h,g)}y=e.big_values;if(!(0==y||1<(b[y-2]|b[y-1])||(y=d.count1+2,576e.big_values;y-=4)q=2*(2*(2*b[y-4]+b[y-3])+b[y-2])+b[y-1],m+=w.t32l[q],D+=w.t33l[q];e.big_values=y;e.count1table_select=0;m>D&&(m=D,e.count1table_select=1);e.count1bits=m;e.block_type==c.NORM_TYPE?E(a,e,d,b,l,f,h,g):(e.part2_3_length=m,m=a.scalefac_band.l[8],m>y&&(m=y),0m&&(a=new u(e.part2_3_length),e.table_select[1]=V(b,m,y,a),e.part2_3_length=a.bits),d.part2_3_length>e.part2_3_length&&d.assign(e))}}}; -var b=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],v=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],a=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],m=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];qb.slen1_tab=a;qb.slen2_tab=m;this.best_scalefac_store=function(d,e,p,l){var f=l.tt[e][p],g,h,r=0;for(g=h=0;gy&&0==f.l3_enc[y+h];y++);0==y&&(f.scalefac[g]=r=-2)}if(0==f.scalefac_scale&&0==f.preflag){for(g=h=0;g>=1);f.scalefac_scale=r=1}}if(0==f.preflag&&f.block_type!=c.SHORT_TYPE&&2==d.mode_gr){for(g=11;gg;g++)l.scfsi[p][g]=0;if(2==d.mode_gr&&1==e&&l.tt[0][p].block_type!=c.SHORT_TYPE&&l.tt[1][p].block_type!=c.SHORT_TYPE){e=l.tt[1][p];h=l.tt[0][p];for(r=0;rg;g++)-1!=e.scalefac[g]&&(l++,pr;r++)pg&&(e.part2_length=g,e.scalefac_compress=r));r=0}for(g=0;gd;d++)gm[d]&&(a.part2_length=m[d],a.scalefac_compress=d);return a.part2_length==ia.LARGE_BITS};var d=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(a,e){var b,f,l,m,h=X(4),x=e.scalefac;a=0!=e.preflag?2:0;for(l=0;4>l;l++)h[l]=0;if(e.block_type==c.SHORT_TYPE){var y=1;var k=B.nr_of_sfb_block[a][y]; -for(b=m=0;4>b;b++){var q=k[b]/3;for(l=0;lf;f++)x[3*m+f]>h[b]&&(h[b]=x[3*m+f])}}else for(y=0,k=B.nr_of_sfb_block[a][y],b=m=0;4>b;b++)for(q=k[b],l=0;lh[b]&&(h[b]=x[m]);q=!1;for(b=0;4>b;b++)h[b]>d[a][b]&&(q=!0);if(!q){e.sfb_partition_table=B.nr_of_sfb_block[a][y];for(b=0;4>b;b++)e.slen[b]=g[h[b]];y=e.slen[0];b=e.slen[1];h=e.slen[2];f=e.slen[3];switch(a){case 0:e.scalefac_compress=(5*y+b<<4)+(h<<2)+f;break;case 1:e.scalefac_compress=400+(5*y+b<<2)+h;break;case 2:e.scalefac_compress= -500+3*y+b;break;default:T.err.printf("intensity stereo not implemented yet\n")}}if(!q)for(b=e.part2_length=0;4>b;b++)e.part2_length+=e.slen[b]*e.sfb_partition_table[b];return q};var g=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(a){for(var d=2;576>=d;d+=2){for(var e=0,b;a.scalefac_band.l[++e]d;)b--;0>b&&(b=ha[e][0]);a.bv_scf[d-2]=b;for(b=ha[e][1];a.scalefac_band.l[b+a.bv_scf[d-2]+2]>d;)b--;0>b&&(b=ha[e][1]);a.bv_scf[d-1]=b}}}function xc(){var c; -this.setModules=function(k){c=k};this.ResvFrameBegin=function(k,n){var u=k.internal_flags,E=u.l3_side,B=c.getframebits(k);n.bits=(B-8*u.sideinfo_len)/u.mode_gr;var w=2048*u.mode_gr-8;if(320w&&(u.ResvMax=w);if(0>u.ResvMax||k.disable_reservoir)u.ResvMax=0;k=n.bits*u.mode_gr+Math.min(u.ResvSize,u.ResvMax);k>f&&(k=f);E.resvDrain_pre=0;null!=u.pinfo&& -(u.pinfo.mean_bits=n.bits/2,u.pinfo.resvsize=u.ResvSize);return k};this.ResvMaxBits=function(c,n,u,E){var k=c.internal_flags,w=k.ResvSize,f=k.ResvMax;0!=E&&(w+=n);0!=(k.substep_shaping&1)&&(f*=.9);u.bits=n;10*w>9*f?(E=w-9*f/10,u.bits+=E,k.substep_shaping|=128):(E=0,k.substep_shaping&=127,c.disable_reservoir||0!=(k.substep_shaping&1)||(u.bits-=.1*n));c=w<6*k.ResvMax/10?w:6*k.ResvMax/10;c-=E;0>c&&(c=0);return c};this.ResvAdjust=function(c,n){c.ResvSize-=n.part2_3_length+n.part2_length};this.ResvFrameEnd= -function(c,n){var k,u=c.l3_side;c.ResvSize+=n*c.mode_gr;n=0;u.resvDrain_post=0;u.resvDrain_pre=0;0!=(k=c.ResvSize%8)&&(n+=k);k=c.ResvSize-n-c.ResvMax;0>b<> -3]|=d>>e<<8-(b&7)-h;b+=h}a.header[a.h_ptr].ptr=b}function V(a,d){a<<=8;for(var e=0;8>e;e++)a<<=1,d<<=1,0!=((d^a)&65536)&&(d^=32773);return d}function E(a,d){var e=w.ht[d.count1table_select+32],b,h=0,c=d.big_values,g=d.big_values;for(b=(d.count1-d.big_values)/4;0d.xr[g+0]&&l++);p=d.l3_enc[c+1];0!=p&&(f+=4,l*=2,0>d.xr[g+1]&&l++);p=d.l3_enc[c+2];0!=p&&(f+=2,l*=2,0>d.xr[g+2]&&l++);p=d.l3_enc[c+3];0!=p&&(f++,l*=2,0>d.xr[g+3]&&l++);c+=4;g+=4;u(a,l+e.table[f], -e.hlen[f]);h+=e.hlen[f]}return h}function B(a,d,e,b,h){var c=w.ht[d],g=0;if(0==d)return g;for(;eh.xr[e]&&m++,l--);15h.xr[e+1]&&m++,l--);C=C*r+k;f-=l;l+=c.hlen[C];u(a,c.table[C],l);u(a,m,f);g+=l+f}return g}function K(a,d){var e=3*a.scalefac_band.s[3];e>d.big_values&&(e=d.big_values);var b=B(a,d.table_select[0],0,e,d);return b+=B(a, -d.table_select[1],e,d.big_values,d)}function f(a,d){var e=d.big_values;var b=d.region0_count+1;var h=a.scalefac_band.l[b];b+=d.region1_count+1;var c=a.scalefac_band.l[b];h>e&&(h=e);c>e&&(c=e);b=B(a,d.table_select[0],0,h,d);b+=B(a,d.table_select[1],h,c,d);return b+=B(a,d.table_select[2],c,e,d)}function b(){this.total=0}function v(d,e){var b=d.internal_flags;var c=b.w_ptr;var h=b.h_ptr-1;-1==h&&(h=da.MAX_HEADER_BUF-1);var l=b.header[h].write_timing-g;e.total=l;if(0<=l){var f=1+h-c;hl&&T.err.println("strange error flushing buffer ... \n");return l}var a=this,m=null,z=null,e=null,l=null;this.setModules=function(a,d,b,c){m=a;z=d;e=b;l=c};var d=null,g=0,q=0,D=0;this.getframebits=function(a){var d=a.internal_flags;return 8*(0|72E3*(a.version+1)*(0!=d.bitrate_index?w.bitrate_table[a.version][d.bitrate_index]:a.brate)/a.out_samplerate+d.padding)};this.CRC_writeheader= -function(a,d){var e=V(d[2]&255,65535);e=V(d[3]&255,e);for(var b=6;b>8);d[5]=byte(e&255)};this.flush_bitstream=function(a){var d=a.internal_flags,e;var c=d.l3_side;0>(e=v(a,new b))||(k(a,e),d.ResvSize=0,c.main_data_begin=0,d.findReplayGain&&(c=m.GetTitleGain(d.rgdata),d.RadioGain=Math.floor(10*c+.5)|0),d.findPeakSample&&(d.noclipGainChange=Math.ceil(200*Math.log10(d.PeakSample/32767))|0,0>h<a.out_samplerate?n(h,4094,12):n(h,4095,12);n(h,a.version,1);n(h,1,2);n(h,a.error_protection?0:1,1);n(h,h.bitrate_index,4);n(h,h.samplerate_index,2);n(h,h.padding,1);n(h,a.extension,1);n(h,a.mode.ordinal(),2);n(h,h.mode_ext,2);n(h,a.copyright,1);n(h,a.original,1);n(h,a.emphasis,2);a.error_protection&&n(h,0,16);if(1==a.version){n(h,m.main_data_begin,9);2==h.channels_out?n(h,m.private_bits,3):n(h,m.private_bits,5);for(y=0;yp;p++)n(h,m.scfsi[y][p], -1);for(p=0;2>p;p++)for(y=0;ym;m++)for(y=0;yQ;Q++){var w=C.sfb_partition_table[Q]/3,Z=C.slen[Q];for(I=0;IQ;Q++)for(w=C.sfb_partition_table[Q],Z=C.slen[Q],I=0;I ResvSize");8*e.main_data_begin!=d.ResvSize&&(T.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n", -8*e.main_data_begin,d.ResvSize,e.resvDrain_post,e.resvDrain_pre,8*d.sideinfo_len,h-e.resvDrain_post-8*d.sideinfo_len,h,h%8,l),T.err.println("This is a fatal error. It has several possible causes:"),T.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),T.err.println(" 9%% Your system is overclocked"),T.err.println(" 1%% bug in LAME encoding library"),d.ResvSize=8*e.main_data_begin);if(1E9=g)return 0;if(0!=c&&g>c)return-1;T.arraycopy(d,0,e,b,g);q=-1;D=0;if(0!=h&&(c=X(1),c[0]=a.nMusicCRC,l.updateMusicCRC(c,e,b,g),a.nMusicCRC=c[0],0a.PeakSample?a.PeakSample=c[0][p]:-c[0][p]>a.PeakSample&&(a.PeakSample=-c[0][p]);if(1< -a.channels_out)for(p=0;pa.PeakSample?a.PeakSample=c[1][p]:-c[1][p]>a.PeakSample&&(a.PeakSample=-c[1][p])}if(a.findReplayGain&&m.AnalyzeSamples(a.rgdata,c[0],0,c[1],0,f,a.channels_out)==Y.GAIN_ANALYSIS_ERROR)return-6}}return g};this.init_bit_stream_w=function(a){d=new Int8Array(W.LAME_MAXMP3BUFFER);a.h_ptr=a.w_ptr=0;a.header[a.h_ptr].write_timing=0;q=-1;g=D=0}}function zb(){function c(a,b){var d=a[b+0]&255;d=d<<8|a[b+1]&255;d=d<<8|a[b+2]&255;return d=d<<8|a[b+3]&255}function k(a,b,d){a[b+ -0]=d>>24&255;a[b+1]=d>>16&255;a[b+2]=d>>8&255;a[b+3]=d&255}function n(a,b,d){a[b+0]=d>>8&255;a[b+1]=d&255}function V(a,b,d){return 255&(a<a.out_samplerate?0:1);b[1]=V(b[1],1,a.version);b[1]=V(b[1],2,1);b[1]=V(b[1],1,a.error_protection?0:1);b[2]=V(b[2],4,d.bitrate_index);b[2]=V(b[2],2,d.samplerate_index);b[2]=V(b[2],1,0);b[2]=V(b[2],1,a.extension);b[3]=V(b[3],2,a.mode.ordinal());b[3]=V(b[3], -2,d.mode_ext);b[3]=V(b[3],1,a.copyright);b[3]=V(b[3],1,a.original);b[3]=V(b[3],2,a.emphasis);b[0]=255;d=b[1]&241;var e=1==a.version?128:16E3>a.out_samplerate?32:64;a.VBR==G.vbr_off&&(e=a.brate);e=a.free_format?0:255&16*K.BitrateIndex(e,a.version,a.out_samplerate);b[1]=1==a.version?255&(d|10):255&(d|2);d=b[2]&13;b[2]=255&(e|d)}function B(a,b){return b=b>>8^z[(b^a)&255]}var K,f,b;this.setModules=function(a,c,d){K=a;f=c;b=d};var v=zb.NUMTOCENTRIES,a=zb.MAXFRAMESIZE,m=v+4+4+4+4+4+9+1+1+8+1+1+3+1+1+2+ -4+2+2,z=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8E3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16E3,65089,64001, -15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32E3,48577, -48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];this.addVbrFrame= -function(a){var b=a.internal_flags;var d=b.VBR_seek_table;a=w.bitrate_table[a.version][b.bitrate_index];d.nVbrNumFrames++;d.sum+=a;d.seen++;if(!(d.seen>3&1,f=a[d+2]>>2&3,m=a[d+3]>>6&3,p=a[d+2]>>4&15;p=w.bitrate_table[e][p];b.samprate=14==a[d+1]>>4?w.samplerate_table[2][f]:w.samplerate_table[e][f]; -f=d=0!=e?3!=m?d+36:d+21:3!=m?d+21:d+13;if(!(new String(a,f,4(),null)).equals("Xing")&&!(new String(a,f,4(),null)).equals("Info"))return null;d+=4;b.hId=e;f=b.flags=c(a,d);d+=4;0!=(f&1)&&(b.frames=c(a,d),d+=4);0!=(f&2)&&(b.bytes=c(a,d),d+=4);if(0!=(f&4)){if(null!=b.toc)for(m=0;m>4;p=(a[d+1]&15)<<8;p+=a[d+2]&255;if(0>e||3E3p||3E3b.out_samplerate?32:64;b.VBR==G.vbr_off&&(d=b.brate);d=72E3*(b.version+1)*d/b.out_samplerate;var c=e.sideinfo_len+m;e.VBR_seek_table.TotalFrameSize=d;if(da)b.bWriteVbrTag=!1;else for(e.VBR_seek_table.nVbrNumFrames=0,e.VBR_seek_table.nBytesWritten=0,e.VBR_seek_table.sum=0,e.VBR_seek_table.seen=0,e.VBR_seek_table.want=1,e.VBR_seek_table.pos=0,null==e.VBR_seek_table.bag&&(e.VBR_seek_table.bag= -new int[400],e.VBR_seek_table.size=400),d=new Int8Array(a),E(b,d),e=e.VBR_seek_table.TotalFrameSize,c=0;c=d.VBR_seek_table.pos)return 0;if(c.length=m.pos))for(l=1;lm.pos-1&&(p=m.pos-1);p=0|256*m.bag[p]/m.sum;255t.RadioGain&&(t.RadioGain=-510),w=11264,w=0<=t.RadioGain?w|t.RadioGain:w|512|-t.RadioGain);t.findPeakSample&&(z=Math.abs(0|t.PeakSample/32767*Math.pow(2,23)+.5));-1!=ma&&(0h&&(h=0);switch(a.mode){case MONO:Q=0;break;case STEREO:Q=1;break; -case DUAL_CHANNEL:Q=2;break;case JOINT_STEREO:Q=a.force_ms?4:3;break;default:Q=7}C=32E3>=a.in_samplerate?0:48E3==a.in_samplerate?2:48E3a.scale_right||a.disable_reservoir&&320>a.brate||a.noATH||a.ATHonly||0==L||32E3>=a.in_samplerate)F=1;O=O+(Q<<2)+(F<<5)+(C<<6);t=t.nMusicCRC;k(c,e+p,h);p+=4;for(h=0;9>h;h++)c[e+p+h]= -255&x.charAt(h);p+=9;c[e+p]=255&y;p++;c[e+p]=255&A;p++;k(c,e+p,z);p+=4;n(c,e+p,w);p+=2;n(c,e+p,0);p+=2;c[e+p]=255&I;p++;c[e+p]=255<=V?255:255&V;p++;c[e+p]=255&r>>4;c[e+p+1]=255&(r<<4)+(u>>8);c[e+p+2]=255&u;p+=3;c[e+p]=255&O;p++;c[e+p++]=0;n(c,e+p,a.preset);p+=2;k(c,e+p,m);p+=4;n(c,e+p,t);p+=2;for(a=0;a=b.internal_flags.VBR_seek_table.pos)return-1;c.seek(c.length());if(0==c.length())return-1;c.seek(0); -var d=new Int8Array(10);c.readFully(d);d=(new String(d,"ISO-8859-1")).startsWith("ID3")?0:((d[6]&127)<<21|(d[7]&127)<<14|(d[8]&127)<<7|d[9]&127)+d.length;c.seek(d);d=new Int8Array(a);b=getLameTagFrame(b,d);if(b>d.length)return-1;if(1>b)return 0;c.write(d,0,b);return 0}}function U(c,k,n,w){this.xlen=c;this.linmax=k;this.table=n;this.hlen=w}function xa(c){this.bits=c}function yc(){this.setModules=function(c,k){}}function sb(){this.bits=this.over_SSD=this.over_count=this.max_noise=this.tot_noise=this.over_noise= -0}function zc(){this.scale_right=this.scale_left=this.scale=this.out_samplerate=this.in_samplerate=this.num_channels=this.num_samples=this.class_id=0;this.decode_only=this.bWriteVbrTag=this.analysis=!1;this.quality=0;this.mode=la.STEREO;this.write_id3tag_automatic=this.decode_on_the_fly=this.findReplayGain=this.free_format=this.force_ms=!1;this.error_protection=this.emphasis=this.extension=this.original=this.copyright=this.compression_ratio=this.brate=0;this.disable_reservoir=this.strict_ISO=!1;this.quant_comp_short= -this.quant_comp=0;this.experimentalY=!1;this.preset=this.exp_nspsytune=this.experimentalZ=0;this.VBR=null;this.maskingadjust_short=this.maskingadjust=this.highpasswidth=this.lowpasswidth=this.highpassfreq=this.lowpassfreq=this.VBR_hard_min=this.VBR_max_bitrate_kbps=this.VBR_min_bitrate_kbps=this.VBR_mean_bitrate_kbps=this.VBR_q=this.VBR_q_frac=0;this.noATH=this.ATHshort=this.ATHonly=!1;this.athaa_sensitivity=this.athaa_loudapprox=this.athaa_type=this.ATHlower=this.ATHcurve=this.ATHtype=0;this.short_blocks= -null;this.useTemporal=!1;this.msfix=this.interChRatio=0;this.tune=!1;this.lame_allocated_gfp=this.frameNum=this.framesize=this.encoder_padding=this.encoder_delay=this.version=this.tune_value_a=0;this.internal_flags=null}function Ac(){this.linprebuf=K(2*Y.MAX_ORDER);this.linpre=0;this.lstepbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER);this.lstep=0;this.loutbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER);this.lout=0;this.rinprebuf=K(2*Y.MAX_ORDER);this.rinpre=0;this.rstepbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER); -this.rstep=0;this.routbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER);this.first=this.freqindex=this.rsum=this.lsum=this.totsamp=this.sampleWindow=this.rout=0;this.A=X(0|Y.STEPS_per_dB*Y.MAX_dB);this.B=X(0|Y.STEPS_per_dB*Y.MAX_dB)}function Bc(u){this.quantize=u;this.iteration_loop=function(k,n,u,w){var B=k.internal_flags,E=K(sa.SFBMAX),f=K(576),b=X(2),v=B.l3_side;var a=new xa(0);this.quantize.rv.ResvFrameBegin(k,a);a=a.bits;for(var m=0;m>2&63;32<=d&&(d-=64);g=Math.pow(10,d/4/10);d=b.exp_nspsytune>>8&63;32<=d&&(d-=64);q=Math.pow(10,d/4/10);d=b.exp_nspsytune>>14&63;32<=d&&(d-=64);k= -Math.pow(10,d/4/10);d=b.exp_nspsytune>>20&63;32<=d&&(d-=64);b=k*Math.pow(10,d/4/10);for(d=0;d=d?g:13>=d?q:20>=d?k:b,e.nsPsy.longfact[d]=p;for(d=0;d=d?g:10>=d?q:11>=d?k:b,e.nsPsy.shortfact[d]=p}};this.on_pe=function(a,b,d,c,f,m){var e=a.internal_flags,g=0,l=X(2),q;g=new xa(g);a=w.ResvMaxBits(a,c,g,m);g=g.bits;var h=g+a;h>da.MAX_BITS_PER_GRANULE&&(h=da.MAX_BITS_PER_GRANULE);for(q=m=0;q3*c/4&&(l[q]=3*c/4),0>l[q]&&(l[q]=0),l[q]+d[q]>da.MAX_BITS_PER_CHANNEL&&(l[q]=Math.max(0,da.MAX_BITS_PER_CHANNEL-d[q])),m+=l[q];if(m>a)for(q=0;qda.MAX_BITS_PER_GRANULE)for(q=0;qb&&(b=0);.5da.MAX_BITS_PER_CHANNEL- -a[0]&&(b=da.MAX_BITS_PER_CHANNEL-a[0]);0>b&&(b=0);125<=a[1]&&(125c&&(a[0]=c*a[0]/b,a[1]=c*a[1]/b)};this.athAdjust=function(a,b,d){b=aa.FAST_LOG10_X(b,10);a*=a;var c=0;b-=d;1E-20c&&(c=0);return Math.pow(10,.1*(b*c+(d+90.30873362-94.82444863)))};this.calc_xmin=function(a,b,d,f){var e=0,g=a.internal_flags,m,l=0,k=0,v=g.ATH,h=d.xr,x=a.VBR==G.vbr_mtrh?1:0,y=g.masking_lower;if(a.VBR== -G.vbr_mtrh||a.VBR==G.vbr_mt)y=1;for(m=0;m>1;var C=0;do{var I=h[l]*h[l];C+=I;B+=IA&&k++;m==c.SBPSY_l&&(u=A*g.nsPsy.longfact[m],BS;S++){C=0;z=n>>1;u=w/n;B=2.220446049250313E-16;do I=h[l]*h[l],C+=I,B+=Iw&&k++;Q==c.SBPSY_s&&(u=w*g.nsPsy.shortfact[Q],Bf[e-3+1]&&(f[e-3+1]+=(f[e-3]-f[e-3+1])*g.decay),f[e-3+1]>f[e-3+2]&&(f[e-3+2]+=(f[e-3+1]-f[e-3+2])*g.decay))}return k};this.calc_noise_core=function(a,b,d,c){var e=0,f=b.s,g=a.l3_enc;if(f>a.count1)for(;0!=d--;){var l=a.xr[f];f++;e+=l*l;l=a.xr[f];f++;e+=l*l}else if(f>a.big_values){var k=K(2);k[0]=0;for(k[1]=c;0!=d--;)l=Math.abs(a.xr[f])-k[g[f]],f++,e+=l*l,l=Math.abs(a.xr[f])- -k[g[f]],f++,e+=l*l}else for(;0!=d--;)l=Math.abs(a.xr[f])-m[g[f]]*c,f++,e+=l*l,l=Math.abs(a.xr[f])-m[g[f]]*c,f++,e+=l*l;b.s=f;return e};this.calc_noise=function(a,c,d,f,m){var e=0,g=0,l,q=0,u=0,h=0,x=-20,y=0,A=a.scalefac,n=0;for(l=f.over_SSD=0;l>1;y+a.width[l]> -a.max_nonzero_coeff&&(w=a.max_nonzero_coeff-y+1,w=0>1:0);y=new k(y);z=this.calc_noise_core(a,y,w,z);y=y.s;null!=m&&(m.step[l]=B,m.noise[l]=z);z=d[e++]=z/c[g++];z=aa.FAST_LOG10(Math.max(z,1E-20));null!=m&&(m.noise_log[l]=z)}null!=m&&(m.global_gain=a.global_gain);h+=z;0I;I++){k=0;for(C=B;Cf;++f){var a=c.tt[b][0].xr[f],m=c.tt[b][1].xr[f];c.tt[b][0].xr[f]=.5*(a+m)*aa.SQRT2; -c.tt[b][1].xr[f]=.5*(a-m)*aa.SQRT2}};this.init_xrpow=function(c,b,k){var a=0|b.max_nonzero_coeff;b.xrpow_max=0;na.fill(k,a,576,0);for(var f,v=f=0;v<=a;++v){var e=Math.abs(b.xr[v]);f+=e;k[v]=Math.sqrt(e*Math.sqrt(e));k[v]>b.xrpow_max&&(b.xrpow_max=k[v])}if(1E-20l;l++)for(var d=n;d=n;e--)if(Math.abs(a[e])l;l++)for(b=!1,m=c.PSFB12-1;0<=m&&!b;m--)for(n=3*f.scalefac_band.s[12]+(f.scalefac_band.s[13]-f.scalefac_band.s[12])*l+(f.scalefac_band.psfb12[m]-f.scalefac_band.psfb12[0]),e=n+(f.scalefac_band.psfb12[m+1]-f.scalefac_band.psfb12[m]),d=E.athAdjust(k.adjust,k.psfb12[m],k.floor),1E-12=n;e--)if(Math.abs(a[e])n;n++){var e=0;0!=b.l3_enc[n]&&(e=Math.abs(b.xr[n]));a[n]=e}n=0;e=8;b.block_type==c.SHORT_TYPE&&(e=6);do{var l,d,g=b.width[e];n+=g;if(!(1<=m[e]||(na.sort(a,n-g,g),qa.EQ(a[n-1],0)))){var q=(1-m[e])*k[e];var v=l=0;do{for(d= -1;v+dh?(z==u.BINSEARCH_DOWN&&(y=!0),y&&(x/=2),z=u.BINSEARCH_UP,H=x):(z==u.BINSEARCH_UP&&(y=!0),y&&(x/=2),z=u.BINSEARCH_DOWN,H=-x);b.global_gain+=H;0>b.global_gain&&(b.global_gain=0,y=!0);255h&&255>b.global_gain;)b.global_gain++,H=ha.count_bits(e,a,b,null);e.CurrentStep[m]=4<=A-b.global_gain?4:2;e.OldValue[m]=b.global_gain;b.part2_3_length=H;if(0==e.noise_shaping)return 100;E.calc_noise(b,n,g,q,v);q.bits=b.part2_3_length; -l.assign(b);m=0;for(T.arraycopy(a,0,d,0,576);!r;){do{h=new sb;y=255;x=0!=(e.substep_shaping&2)?20:3;if(e.sfb21_extra){if(1L;L++)C[Z+L]*=Q,C[Z+L]>O.xrpow_max&&(O.xrpow_max=C[Z+L]);if(2==I.noise_shaping_amp)break}}if(Q=k(A))A=!1;else if(Q=2==z.mode_gr?ha.scale_bitcount(A):ha.scale_bitcount_lsf(z,A)){if(1I;I++)H[O+I]*=1.2968395546510096,H[O+I]>Q.xrpow_max&&(Q.xrpow_max=H[O+I]);Q.scalefac[F]=C>>1}Q.preflag=0;Q.scalefac_scale=1;Q=!1}else if(A.block_type==c.SHORT_TYPE&&0I;I++){ma=S=0;for(H=O.sfb_lmax+I;HS&&8>ma)){if(7<=O.subblock_gain[I]){H= -!0;break b}O.subblock_gain[I]++;S=Q.scalefac_band.l[O.sfb_lmax];for(H=O.sfb_lmax+I;H>O.scalefac_scale,0<=Z)C[H]=Z,S+=3*ma;else{C[H]=0;Z=E.IPOW20(210+(Z<L;L++)F[S+L]*=Z,F[S+L]>O.xrpow_max&&(O.xrpow_max=F[S+L]);S+=ma*(3-I-1)}Z=E.IPOW20(202);S+=O.width[H]*(I+1);for(L=-O.width[H];0>L;L++)F[S+L]*=Z,F[S+L]>O.xrpow_max&&(O.xrpow_max=F[S+L])}}H=!1}Q=H||k(A)}Q||(Q=2==z.mode_gr?ha.scale_bitcount(A):ha.scale_bitcount_lsf(z, -A));A=!Q}else A=!0;if(!A)break;0!=l.scalefac_scale&&(y=254);A=B-l.part2_length;if(0>=A)break;for(;(l.part2_3_length=ha.count_bits(e,a,l,v))>A&&l.global_gain<=y;)l.global_gain++;if(l.global_gain>y)break;if(0==q.over_count){for(;(l.part2_3_length=ha.count_bits(e,a,l,v))>p&&l.global_gain<=y;)l.global_gain++;if(l.global_gain>y)break}E.calc_noise(l,n,g,h,v);h.bits=l.part2_3_length;z=b.block_type!=c.SHORT_TYPE?f.quant_comp:f.quant_comp_short;y=q;A=h;Q=l;H=g;switch(z){default:case 9:0A.max_noise&&10*A.max_noise+A.bits<=10*y.max_noise+y.bits;break;case 0:z=A.over_count=A.max_noise&&.2=A.max_noise&&0>y.max_noise&&y.max_noise>A.max_noise-.2&&A.tot_noise=A.max_noise&&0A.max_noise-.2&&A.tot_noiseA.max_noise-.1&&A.tot_noise+A.over_noiseA.max_noise-.15&&A.tot_noise+A.over_noise+A.over_noisex&&0== -q.over_count)break;if(3==e.noise_shaping_amp&&t&&30l.global_gain+l.scalefac_scale);3==e.noise_shaping_amp?t?r=!0:(l.assign(b),T.arraycopy(d,0,a,0,576),m=0,w=l.global_gain,t=!0):r=!0}f.VBR==G.vbr_rh||f.VBR==G.vbr_mtrh?T.arraycopy(d,0,a,0,576):0!=(e.substep_shaping&1)&&trancate_smallspectrums(e,b,n,a);return q.over_count};this.iteration_finish_one=function(c,b,k){var a=c.l3_side,f=a.tt[b][k];ha.best_scalefac_store(c,b,k,a);1== -c.use_best_huffman&&ha.best_huffman_divide(c,f);w.ResvAdjust(c,f)};this.VBR_encode_granule=function(c,b,k,a,m,n,e){var f=c.internal_flags,d=new rb,g=K(576),q=e,v=(e+n)/2,p=0,r=f.sfb21_extra;na.fill(d.l3_enc,0);do{f.sfb21_extra=v>q-42?!1:r;var t=outer_loop(c,b,k,a,m,v);0>=t?(p=1,e=b.part2_3_length,d.assign(b),T.arraycopy(a,0,g,0,576),e-=32,t=e-n,v=(e+n)/2):(n=v+32,t=e-n,v=(e+n)/2,0!=p&&(p=2,b.assign(d),T.arraycopy(g,0,a,0,576)))}while(12n[g.VBR_max_bitrate]&& -(l[r][t]*=n[g.VBR_max_bitrate],l[r][t]/=v),e[r][t]>l[r][t]&&(e[r][t]=l[r][t]);return q};this.bitpressure_strategy=function(f,b,k,a){for(var m=0;mq&&(n[m][v]*=q,n[m][v]/=g);return l};this.calc_target_bits=function(f,b,k,a,m,u){var e=f.internal_flags,l=e.l3_side;e.bitrate_index=e.VBR_max_bitrate;var d=new xa(0);u[0]=w.ResvFrameBegin(f,d);e.bitrate_index=1;d=n.getframebits(f)-8*e.sideinfo_len;m[0]=d/(e.mode_gr*e.channels_out);d=f.VBR_mean_bitrate_kbps*f.framesize*1E3;0!=(e.substep_shaping&1)&&(d*=1.09);d/=f.out_samplerate; -d-=8*e.sideinfo_len;d/=e.mode_gr*e.channels_out;var g=.93+.07*(11-f.compression_ratio)/5.5;.9>g&&(g=.9);13*d/2?v=3*d/2:0>v&&(v=0);a[f][m]+=v}a[f][m]>da.MAX_BITS_PER_CHANNEL&&(a[f][m]=da.MAX_BITS_PER_CHANNEL);q+=a[f][m]}if(q>da.MAX_BITS_PER_GRANULE)for(m=0;mda.MAX_BITS_PER_CHANNEL&&(a[f][m]=da.MAX_BITS_PER_CHANNEL),b+=a[f][m];if(b>u[0])for(f=0;fe;e++){var l=k[f+-10];var d=b[n+-224]*l;var g=b[c+224]*l;l=k[f+-9];d+=b[n+-160]* -l;g+=b[c+160]*l;l=k[f+-8];d+=b[n+-96]*l;g+=b[c+96]*l;l=k[f+-7];d+=b[n+-32]*l;g+=b[c+32]*l;l=k[f+-6];d+=b[n+32]*l;g+=b[c+-32]*l;l=k[f+-5];d+=b[n+96]*l;g+=b[c+-96]*l;l=k[f+-4];d+=b[n+160]*l;g+=b[c+-160]*l;l=k[f+-3];d+=b[n+224]*l;g+=b[c+-224]*l;l=k[f+-2];d+=b[c+-256]*l;g-=b[n+256]*l;l=k[f+-1];d+=b[c+-192]*l;g-=b[n+192]*l;l=k[f+0];d+=b[c+-128]*l;g-=b[n+128]*l;l=k[f+1];d+=b[c+-64]*l;g-=b[n+64]*l;l=k[f+2];d+=b[c+0]*l;g-=b[n+0]*l;l=k[f+3];d+=b[c+64]*l;g-=b[n+-64]*l;l=k[f+4];d+=b[c+128]*l;g-=b[n+-128]*l; -l=k[f+5];d+=b[c+192]*l;g-=b[n+-192]*l;d*=k[f+6];l=g-d;a[30+2*e]=g+d;a[31+2*e]=k[f+7]*l;f+=18;c--;n++}g=b[c+-16]*k[f+-10];d=b[c+-32]*k[f+-2];g+=(b[c+-48]-b[c+16])*k[f+-9];d+=b[c+-96]*k[f+-1];g+=(b[c+-80]+b[c+48])*k[f+-8];d+=b[c+-160]*k[f+0];g+=(b[c+-112]-b[c+80])*k[f+-7];d+=b[c+-224]*k[f+1];g+=(b[c+-144]+b[c+112])*k[f+-6];d-=b[c+32]*k[f+2];g+=(b[c+-176]-b[c+144])*k[f+-5];d-=b[c+96]*k[f+3];g+=(b[c+-208]+b[c+176])*k[f+-4];d-=b[c+160]*k[f+4];g+=(b[c+-240]-b[c+208])*k[f+-3];d-=b[c+224];b=d-g;c=d+g;g=a[14]; -d=a[15]-g;a[31]=c+g;a[30]=b+d;a[15]=b-d;a[14]=c-g;d=a[28]-a[0];a[0]+=a[28];a[28]=d*k[f+-36+7];d=a[29]-a[1];a[1]+=a[29];a[29]=d*k[f+-36+7];d=a[26]-a[2];a[2]+=a[26];a[26]=d*k[f+-72+7];d=a[27]-a[3];a[3]+=a[27];a[27]=d*k[f+-72+7];d=a[24]-a[4];a[4]+=a[24];a[24]=d*k[f+-108+7];d=a[25]-a[5];a[5]+=a[25];a[25]=d*k[f+-108+7];d=a[22]-a[6];a[6]+=a[22];a[22]=d*aa.SQRT2;d=a[23]-a[7];a[7]+=a[23];a[23]=d*aa.SQRT2-a[7];a[7]-=a[6];a[22]-=a[7];a[23]-=a[22];d=a[6];a[6]=a[31]-d;a[31]+=d;d=a[7];a[7]=a[30]-d;a[30]+=d;d= -a[22];a[22]=a[15]-d;a[15]+=d;d=a[23];a[23]=a[14]-d;a[14]+=d;d=a[20]-a[8];a[8]+=a[20];a[20]=d*k[f+-180+7];d=a[21]-a[9];a[9]+=a[21];a[21]=d*k[f+-180+7];d=a[18]-a[10];a[10]+=a[18];a[18]=d*k[f+-216+7];d=a[19]-a[11];a[11]+=a[19];a[19]=d*k[f+-216+7];d=a[16]-a[12];a[12]+=a[16];a[16]=d*k[f+-252+7];d=a[17]-a[13];a[13]+=a[17];a[17]=d*k[f+-252+7];d=-a[20]+a[24];a[20]+=a[24];a[24]=d*k[f+-216+7];d=-a[21]+a[25];a[21]+=a[25];a[25]=d*k[f+-216+7];d=a[4]-a[8];a[4]+=a[8];a[8]=d*k[f+-216+7];d=a[5]-a[9];a[5]+=a[9];a[9]= -d*k[f+-216+7];d=a[0]-a[12];a[0]+=a[12];a[12]=d*k[f+-72+7];d=a[1]-a[13];a[1]+=a[13];a[13]=d*k[f+-72+7];d=a[16]-a[28];a[16]+=a[28];a[28]=d*k[f+-72+7];d=-a[17]+a[29];a[17]+=a[29];a[29]=d*k[f+-72+7];d=aa.SQRT2*(a[2]-a[10]);a[2]+=a[10];a[10]=d;d=aa.SQRT2*(a[3]-a[11]);a[3]+=a[11];a[11]=d;d=aa.SQRT2*(-a[18]+a[26]);a[18]+=a[26];a[26]=d-a[18];d=aa.SQRT2*(-a[19]+a[27]);a[19]+=a[27];a[27]=d-a[19];d=a[2];a[19]-=a[3];a[3]-=d;a[2]=a[31]-d;a[31]+=d;d=a[3];a[11]-=a[19];a[18]-=d;a[3]=a[30]-d;a[30]+=d;d=a[18];a[27]-= -a[11];a[19]-=d;a[18]=a[15]-d;a[15]+=d;d=a[19];a[10]-=d;a[19]=a[14]-d;a[14]+=d;d=a[10];a[11]-=d;a[10]=a[23]-d;a[23]+=d;d=a[11];a[26]-=d;a[11]=a[22]-d;a[22]+=d;d=a[26];a[27]-=d;a[26]=a[7]-d;a[7]+=d;d=a[27];a[27]=a[6]-d;a[6]+=d;d=aa.SQRT2*(a[0]-a[4]);a[0]+=a[4];a[4]=d;d=aa.SQRT2*(a[1]-a[5]);a[1]+=a[5];a[5]=d;d=aa.SQRT2*(a[16]-a[20]);a[16]+=a[20];a[20]=d;d=aa.SQRT2*(a[17]-a[21]);a[17]+=a[21];a[21]=d;d=-aa.SQRT2*(a[8]-a[12]);a[8]+=a[12];a[12]=d-a[8];d=-aa.SQRT2*(a[9]-a[13]);a[9]+=a[13];a[13]=d-a[9];d= --aa.SQRT2*(a[25]-a[29]);a[25]+=a[29];a[29]=d-a[25];d=-aa.SQRT2*(a[24]+a[28]);a[24]-=a[28];a[28]=d-a[24];d=a[24]-a[16];a[24]=d;d=a[20]-d;a[20]=d;d=a[28]-d;a[28]=d;d=a[25]-a[17];a[25]=d;d=a[21]-d;a[21]=d;d=a[29]-d;a[29]=d;d=a[17]-a[1];a[17]=d;d=a[9]-d;a[9]=d;d=a[25]-d;a[25]=d;d=a[5]-d;a[5]=d;d=a[21]-d;a[21]=d;d=a[13]-d;a[13]=d;d=a[29]-d;a[29]=d;d=a[1]-a[0];a[1]=d;d=a[16]-d;a[16]=d;d=a[17]-d;a[17]=d;d=a[8]-d;a[8]=d;d=a[9]-d;a[9]=d;d=a[24]-d;a[24]=d;d=a[25]-d;a[25]=d;d=a[4]-d;a[4]=d;d=a[5]-d;a[5]=d;d= -a[20]-d;a[20]=d;d=a[21]-d;a[21]=d;d=a[12]-d;a[12]=d;d=a[13]-d;a[13]=d;d=a[28]-d;a[28]=d;d=a[29]-d;a[29]=d;d=a[0];a[0]+=a[31];a[31]-=d;d=a[1];a[1]+=a[30];a[30]-=d;d=a[16];a[16]+=a[15];a[15]-=d;d=a[17];a[17]+=a[14];a[14]-=d;d=a[8];a[8]+=a[23];a[23]-=d;d=a[9];a[9]+=a[22];a[22]-=d;d=a[24];a[24]+=a[7];a[7]-=d;d=a[25];a[25]+=a[6];a[6]-=d;d=a[4];a[4]+=a[27];a[27]-=d;d=a[5];a[5]+=a[26];a[26]-=d;d=a[20];a[20]+=a[11];a[11]-=d;d=a[21];a[21]+=a[10];a[10]-=d;d=a[12];a[12]+=a[19];a[19]-=d;d=a[13];a[13]+=a[18]; -a[18]-=d;d=a[28];a[28]+=a[3];a[3]-=d;d=a[29];a[29]+=a[2];a[2]-=d}var k=[-.1482523854003001,32.308141959636465,296.40344946382766,883.1344870032432,11113.947376231741,1057.2713659324597,305.7402417275812,30.825928907280012,3.8533188138216365,59.42900443849514,709.5899960123345,5281.91112291017,-5829.66483675846,-817.6293103748613,-76.91656988279972,-4.594269939176596,.9063471690191471,.1960342806591213,-.15466694054279598,34.324387823855965,301.8067566458425,817.599602898885,11573.795901679885,1181.2520595540152, -321.59731579894424,31.232021761053772,3.7107095756221318,53.650946155329365,684.167428119626,5224.56624370173,-6366.391851890084,-908.9766368219582,-89.83068876699639,-5.411397422890401,.8206787908286602,.3901806440322567,-.16070888947830023,36.147034243915876,304.11815768187864,732.7429163887613,11989.60988270091,1300.012278487897,335.28490093152146,31.48816102859945,3.373875931311736,47.232241542899175,652.7371796173471,5132.414255594984,-6909.087078780055,-1001.9990371107289,-103.62185754286375, --6.104916304710272,.7416505462720353,.5805693545089249,-.16636367662261495,37.751650073343995,303.01103387567713,627.9747488785183,12358.763425278165,1412.2779918482834,346.7496836825721,31.598286663170416,3.1598635433980946,40.57878626349686,616.1671130880391,5007.833007176154,-7454.040671756168,-1095.7960341867115,-118.24411666465777,-6.818469345853504,.6681786379192989,.7653668647301797,-.1716176790982088,39.11551877123304,298.3413246578966,503.5259106886539,12679.589408408976,1516.5821921214542, -355.9850766329023,31.395241710249053,2.9164211881972335,33.79716964664243,574.8943997801362,4853.234992253242,-7997.57021486075,-1189.7624067269965,-133.6444792601766,-7.7202770609839915,.5993769336819237,.9427934736519954,-.17645823955292173,40.21879108166477,289.9982036694474,359.3226160751053,12950.259102786438,1612.1013903507662,362.85067106591504,31.045922092242872,2.822222032597987,26.988862316190684,529.8996541764288,4671.371946949588,-8535.899136645805,-1282.5898586244496,-149.58553632943463, --8.643494270763135,.5345111359507916,1.111140466039205,-.36174739330527045,41.04429910497807,277.5463268268618,195.6386023135583,13169.43812144731,1697.6433561479398,367.40983966190305,30.557037410382826,2.531473372857427,20.070154905927314,481.50208566532336,4464.970341588308,-9065.36882077239,-1373.62841526722,-166.1660487028118,-9.58289321133207,.4729647758913199,1.268786568327291,-.36970682634889585,41.393213350082036,261.2935935556502,12.935476055240873,13336.131683328815,1772.508612059496,369.76534388639965, -29.751323653701338,2.4023193045459172,13.304795348228817,430.5615775526625,4237.0568611071185,-9581.931701634761,-1461.6913552409758,-183.12733958476446,-10.718010163869403,.41421356237309503,1.414213562373095,-.37677560326535325,41.619486213528496,241.05423794991074,-187.94665032361226,13450.063605744153,1836.153896465782,369.4908799925761,29.001847876923147,2.0714759319987186,6.779591200894186,377.7767837205709,3990.386575512536,-10081.709459700915,-1545.947424837898,-200.3762958015653,-11.864482073055006, -.3578057213145241,1.546020906725474,-.3829366947518991,41.1516456456653,216.47684307105183,-406.1569483347166,13511.136535077321,1887.8076599260432,367.3025214564151,28.136213436723654,1.913880671464418,.3829366947518991,323.85365704338597,3728.1472257487526,-10561.233882199509,-1625.2025997821418,-217.62525175416,-13.015432208941645,.3033466836073424,1.66293922460509,-.5822628872992417,40.35639251440489,188.20071124269245,-640.2706748618148,13519.21490106562,1927.6022433578062,362.8197642637487, -26.968821921868447,1.7463817695935329,-5.62650678237171,269.3016715297017,3453.386536448852,-11016.145278780888,-1698.6569643425091,-234.7658734267683,-14.16351421663124,.2504869601913055,1.76384252869671,-.5887180101749253,39.23429103868072,155.76096234403798,-889.2492977967378,13475.470561874661,1955.0535223723712,356.4450994756727,25.894952980042156,1.5695032905781554,-11.181939564328772,214.80884394039484,3169.1640829158237,-11443.321309975563,-1765.1588461316153,-251.68908574481912,-15.49755935939164, -.198912367379658,1.847759065022573,-.7912582233652842,37.39369355329111,119.699486012458,-1151.0956593239027,13380.446257078214,1970.3952110853447,348.01959814116185,24.731487364283044,1.3850130831637748,-16.421408865300393,161.05030052864092,2878.3322807850063,-11838.991423510031,-1823.985884688674,-268.2854986386903,-16.81724543849939,.1483359875383474,1.913880671464418,-.7960642926861912,35.2322109610459,80.01928065061526,-1424.0212633405113,13235.794061869668,1973.804052543835,337.9908651258184, -23.289159354463873,1.3934255946442087,-21.099669467133474,108.48348407242611,2583.700758091299,-12199.726194855148,-1874.2780658979746,-284.2467154529415,-18.11369784385905,.09849140335716425,1.961570560806461,-.998795456205172,32.56307803611191,36.958364584370486,-1706.075448829146,13043.287458812016,1965.3831106103316,326.43182772364605,22.175018750622293,1.198638339011324,-25.371248002043963,57.53505923036915,2288.41886619975,-12522.674544337233,-1914.8400385312243,-299.26241273417224,-19.37805630698734, -.04912684976946725,1.990369453344394,.0178904535*aa.SQRT2/2.384E-6,.008938074*aa.SQRT2/2.384E-6,.0015673635*aa.SQRT2/2.384E-6,.001228571*aa.SQRT2/2.384E-6,4.856585E-4*aa.SQRT2/2.384E-6,1.09434E-4*aa.SQRT2/2.384E-6,5.0783E-5*aa.SQRT2/2.384E-6,6.914E-6*aa.SQRT2/2.384E-6,12804.797818791945,1945.5515939597317,313.4244966442953,20.801593959731544,1995.1556208053692,9.000838926174497,-29.20218120805369],n=[[2.382191739347913E-13,6.423305872147834E-13,9.400849094049688E-13,1.122435026096556E-12,1.183840321267481E-12, -1.122435026096556E-12,9.40084909404969E-13,6.423305872147839E-13,2.382191739347918E-13,5.456116108943412E-12,4.878985199565852E-12,4.240448995017367E-12,3.559909094758252E-12,2.858043359288075E-12,2.156177623817898E-12,1.475637723558783E-12,8.371015190102974E-13,2.599706096327376E-13,-5.456116108943412E-12,-4.878985199565852E-12,-4.240448995017367E-12,-3.559909094758252E-12,-2.858043359288076E-12,-2.156177623817898E-12,-1.475637723558783E-12,-8.371015190102975E-13,-2.599706096327376E-13,-2.382191739347923E-13, --6.423305872147843E-13,-9.400849094049696E-13,-1.122435026096556E-12,-1.183840321267481E-12,-1.122435026096556E-12,-9.400849094049694E-13,-6.42330587214784E-13,-2.382191739347918E-13],[2.382191739347913E-13,6.423305872147834E-13,9.400849094049688E-13,1.122435026096556E-12,1.183840321267481E-12,1.122435026096556E-12,9.400849094049688E-13,6.423305872147841E-13,2.382191739347918E-13,5.456116108943413E-12,4.878985199565852E-12,4.240448995017367E-12,3.559909094758253E-12,2.858043359288075E-12,2.156177623817898E-12, -1.475637723558782E-12,8.371015190102975E-13,2.599706096327376E-13,-5.461314069809755E-12,-4.921085770524055E-12,-4.343405037091838E-12,-3.732668368707687E-12,-3.093523840190885E-12,-2.430835727329465E-12,-1.734679010007751E-12,-9.74825365660928E-13,-2.797435120168326E-13,0,0,0,0,0,0,-2.283748241799531E-13,-4.037858874020686E-13,-2.146547464825323E-13],[.1316524975873958,.414213562373095,.7673269879789602,1.091308501069271,1.303225372841206,1.56968557711749,1.920982126971166,2.414213562373094,3.171594802363212, -4.510708503662055,7.595754112725146,22.90376554843115,.984807753012208,.6427876096865394,.3420201433256688,.9396926207859084,-.1736481776669303,-.7660444431189779,.8660254037844387,.5,-.5144957554275265,-.4717319685649723,-.3133774542039019,-.1819131996109812,-.09457419252642064,-.04096558288530405,-.01419856857247115,-.003699974673760037,.8574929257125442,.8817419973177052,.9496286491027329,.9833145924917901,.9955178160675857,.9991605581781475,.999899195244447,.9999931550702802],[0,0,0,0,0,0,2.283748241799531E-13, -4.037858874020686E-13,2.146547464825323E-13,5.461314069809755E-12,4.921085770524055E-12,4.343405037091838E-12,3.732668368707687E-12,3.093523840190885E-12,2.430835727329466E-12,1.734679010007751E-12,9.74825365660928E-13,2.797435120168326E-13,-5.456116108943413E-12,-4.878985199565852E-12,-4.240448995017367E-12,-3.559909094758253E-12,-2.858043359288075E-12,-2.156177623817898E-12,-1.475637723558782E-12,-8.371015190102975E-13,-2.599706096327376E-13,-2.382191739347913E-13,-6.423305872147834E-13,-9.400849094049688E-13, --1.122435026096556E-12,-1.183840321267481E-12,-1.122435026096556E-12,-9.400849094049688E-13,-6.423305872147841E-13,-2.382191739347918E-13]],w=n[c.SHORT_TYPE],E=n[c.SHORT_TYPE],B=n[c.SHORT_TYPE],G=n[c.SHORT_TYPE],f=[0,1,16,17,8,9,24,25,4,5,20,21,12,13,28,29,2,3,18,19,10,11,26,27,6,7,22,23,14,15,30,31];this.mdct_sub48=function(b,k,a){for(var m=286,v=0;vr;r++)for(u(k,m,D[p]),u(k, -m+32,D[p+1]),p+=2,m+=64,l=1;32>l;l+=2)D[p-1][l]*=-1;for(l=0;32>l;l++,q+=18){D=d.block_type;p=b.sb_sample[v][e];var t=b.sb_sample[v][1-e];0!=d.mixed_block_flag&&2>l&&(D=0);if(1E-12>b.amp_filter[l])na.fill(g,q+0,q+18,0);else{if(1>b.amp_filter[l])for(r=0;18>r;r++)t[r][f[l]]*=b.amp_filter[l];if(D==c.SHORT_TYPE){for(r=-3;0>r;r++){var J=n[c.SHORT_TYPE][r+3];g[q+3*r+9]=p[9+r][f[l]]*J-p[8-r][f[l]];g[q+3*r+18]=p[14-r][f[l]]*J+p[15+r][f[l]];g[q+3*r+10]=p[15+r][f[l]]*J-p[14-r][f[l]];g[q+3*r+19]=t[2-r][f[l]]* -J+t[3+r][f[l]];g[q+3*r+11]=t[3+r][f[l]]*J-t[2-r][f[l]];g[q+3*r+20]=t[8-r][f[l]]*J+t[9+r][f[l]]}r=g;p=q;for(J=0;3>J;J++){var h=r[p+6]*n[c.SHORT_TYPE][0]-r[p+15];t=r[p+0]*n[c.SHORT_TYPE][2]-r[p+9];var x=h+t;var y=h-t;h=r[p+15]*n[c.SHORT_TYPE][0]+r[p+6];t=r[p+9]*n[c.SHORT_TYPE][2]+r[p+0];var A=h+t;var N=-h+t;t=2.069978111953089E-11*(r[p+3]*n[c.SHORT_TYPE][1]-r[p+12]);h=2.069978111953089E-11*(r[p+12]*n[c.SHORT_TYPE][1]+r[p+3]);r[p+0]=1.90752519173728E-11*x+t;r[p+15]=1.90752519173728E-11*-A+h;y*=1.6519652744032674E-11; -A=9.537625958686404E-12*A+h;r[p+3]=y-A;r[p+6]=y+A;x=9.537625958686404E-12*x-t;N*=1.6519652744032674E-11;r[p+9]=x+N;r[p+12]=x-N;p++}}else{J=K(18);for(r=-9;0>r;r++)x=n[D][r+27]*t[r+9][f[l]]+n[D][r+36]*t[8-r][f[l]],y=n[D][r+9]*p[r+9][f[l]]-n[D][r+18]*p[8-r][f[l]],J[r+9]=x-y*w[3+r+9],J[r+18]=x*w[3+r+9]+y;r=g;p=q;x=J;var H=x[17]-x[9];var O=x[15]-x[11];var F=x[14]-x[12];N=x[0]+x[8];A=x[1]+x[7];h=x[2]+x[6];y=x[3]+x[5];r[p+17]=N+h-y-(A-x[4]);J=(N+h-y)*E[19]+(A-x[4]);t=(H-O-F)*E[18];r[p+5]=t+J;r[p+6]=t-J; -var C=(x[16]-x[10])*E[18];A=A*E[19]+x[4];t=H*E[12]+C+O*E[13]+F*E[14];J=-N*E[16]+A-h*E[17]+y*E[15];r[p+1]=t+J;r[p+2]=t-J;t=H*E[13]-C-O*E[14]+F*E[12];J=-N*E[17]+A-h*E[15]+y*E[16];r[p+9]=t+J;r[p+10]=t-J;t=H*E[14]-C+O*E[12]-F*E[13];J=N*E[15]-A+h*E[16]-y*E[17];r[p+13]=t+J;r[p+14]=t-J;H=x[8]-x[0];O=x[6]-x[2];F=x[5]-x[3];N=x[17]+x[9];A=x[16]+x[10];h=x[15]+x[11];y=x[14]+x[12];r[p+0]=N+h+y+(A+x[13]);t=(N+h+y)*E[19]-(A+x[13]);J=(H-O+F)*E[18];r[p+11]=t+J;r[p+12]=t-J;C=(x[7]-x[1])*E[18];A=x[13]-A*E[19];t=N*E[15]- -A+h*E[16]+y*E[17];J=H*E[14]+C+O*E[12]+F*E[13];r[p+3]=t+J;r[p+4]=t-J;t=-N*E[17]+A-h*E[15]-y*E[16];J=H*E[13]+C-O*E[14]-F*E[12];r[p+7]=t+J;r[p+8]=t-J;t=-N*E[16]+A-h*E[17]-y*E[15];J=H*E[12]-C+O*E[13]-F*E[14];r[p+15]=t+J;r[p+16]=t-J}}if(D!=c.SHORT_TYPE&&0!=l)for(r=7;0<=r;--r)D=g[q+r]*B[20+r]+g[q+-1-r]*G[28+r],p=g[q+r]*G[28+r]-g[q+-1-r]*B[20+r],g[q+-1-r]=D,g[q+r]=p}}k=a;m=286;if(1==b.mode_gr)for(e=0;18>e;e++)T.arraycopy(b.sb_sample[v][1][e],0,b.sb_sample[v][0][e],0,32)}}}function Xa(){this.thm=new Xb;this.en= -new Xb}function c(){var u=c.FFTOFFSET,k=c.MPG_MD_MS_LR,n=null,w=this.psy=null,E=null,B=null;this.setModules=function(c,b,k,a){n=c;w=this.psy=b;E=a;B=k};var ha=new Fc;this.lame_encode_mp3_frame=function(f,b,v,a,m,z){var e=Ob([2,2]);e[0][0]=new Xa;e[0][1]=new Xa;e[1][0]=new Xa;e[1][1]=new Xa;var l=Ob([2,2]);l[0][0]=new Xa;l[0][1]=new Xa;l[1][0]=new Xa;l[1][1]=new Xa;var d=[null,null],g=f.internal_flags,q=ca([2,4]),D=[.5,.5],p=[[0,0],[0,0]],r=[[0,0],[0,0]];d[0]=b;d[1]=v;if(0==g.lame_encode_frame_init){b= -f.internal_flags;var t,J;if(0==b.lame_encode_frame_init){v=K(2014);var h=K(2014);b.lame_encode_frame_init=1;for(J=t=0;t<286+576*(1+b.mode_gr);++t)t<576*b.mode_gr?(v[t]=0,2==b.channels_out&&(h[t]=0)):(v[t]=d[0][J],2==b.channels_out&&(h[t]=d[1][J]),++J);for(J=0;J(g.slot_lag-=g.frac_SpF)&&(g.slot_lag+=f.out_samplerate,g.padding=1);if(0!=g.psymodel)for(h=[null,null],t=0,J=X(2),v= -0;v=q?(g.ATH.adjust*=.075*q+.925,g.ATH.adjust= -q?g.ATH.adjust=q:g.ATH.adjustl;l++)g.nsPsy.pefirbuf[l]=g.nsPsy.pefirbuf[l+ -1];for(v=r=0;vl;l++)r+=(g.nsPsy.pefirbuf[l]+g.nsPsy.pefirbuf[18-l])*c.fircoef[l];r=3350*g.mode_gr*g.channels_out/r;for(v=0;vm;m++)g.pinfo.pcmdata[b][m]=d[b][m-u]}B.set_frame_pinfo(f,e)}g.bitrate_stereoMode_Hist[g.bitrate_index][4]++;g.bitrate_stereoMode_Hist[15][4]++;2==g.channels_out&&(g.bitrate_stereoMode_Hist[g.bitrate_index][g.mode_ext]++,g.bitrate_stereoMode_Hist[15][g.mode_ext]++);for(f=0;fc;c++)for(var k=0;2>k;k++)this.tt[c][k]=new rb}function Ic(){this.last_en_subshort=ca([4,9]);this.lastAttacks=X(4);this.pefirbuf= -K(19);this.longfact=K(c.SBMAX_l);this.shortfact=K(c.SBMAX_s);this.attackthre_s=this.attackthre=0}function Xb(){this.l=K(c.SBMAX_l);this.s=ca([c.SBMAX_s,3]);var u=this;this.assign=function(k){T.arraycopy(k.l,0,u.l,0,c.SBMAX_l);for(var n=0;nw;w++)u.s[n][w]=k.s[n][w]}}function da(){function u(){this.ptr=this.write_timing=0;this.buf=new Int8Array(40)}this.fill_buffer_resample_init=this.iteration_init_init=this.lame_encode_frame_init=this.Class_ID=0;this.mfbuf=ca([2,da.MFSIZE]); -this.full_outer_loop=this.use_best_huffman=this.subblock_gain=this.noise_shaping_stop=this.psymodel=this.substep_shaping=this.noise_shaping_amp=this.noise_shaping=this.highpass2=this.highpass1=this.lowpass2=this.lowpass1=this.mode_ext=this.samplerate_index=this.bitrate_index=this.VBR_max_bitrate=this.VBR_min_bitrate=this.mf_size=this.mf_samples_to_encode=this.resample_ratio=this.channels_out=this.channels_in=this.mode_gr=0;this.l3_side=new Hc;this.ms_ratio=K(2);this.slot_lag=this.frac_SpF=this.padding= -0;this.tag_spec=null;this.nMusicCRC=0;this.OldValue=X(2);this.CurrentStep=X(2);this.masking_lower=0;this.bv_scf=X(576);this.pseudohalf=X(sa.SFBMAX);this.sfb21_extra=!1;this.inbuf_old=Array(2);this.blackfilt=Array(2*da.BPC+1);this.itime=new Float64Array(2);this.sideinfo_len=0;this.sb_sample=ca([2,2,18,c.SBLIMIT]);this.amp_filter=K(32);this.header=Array(da.MAX_HEADER_BUF);this.ResvMax=this.ResvSize=this.ancillary_flag=this.w_ptr=this.h_ptr=0;this.scalefac_band=new za;this.minval_l=K(c.CBANDS);this.minval_s= -K(c.CBANDS);this.nb_1=ca([4,c.CBANDS]);this.nb_2=ca([4,c.CBANDS]);this.nb_s1=ca([4,c.CBANDS]);this.nb_s2=ca([4,c.CBANDS]);this.s3_ll=this.s3_ss=null;this.decay=0;this.thm=Array(4);this.en=Array(4);this.tot_ener=K(4);this.loudness_sq=ca([2,2]);this.loudness_sq_save=K(2);this.mld_l=K(c.SBMAX_l);this.mld_s=K(c.SBMAX_s);this.bm_l=X(c.SBMAX_l);this.bo_l=X(c.SBMAX_l);this.bm_s=X(c.SBMAX_s);this.bo_s=X(c.SBMAX_s);this.npart_s=this.npart_l=0;this.s3ind=Ia([c.CBANDS,2]);this.s3ind_s=Ia([c.CBANDS,2]);this.numlines_s= -X(c.CBANDS);this.numlines_l=X(c.CBANDS);this.rnumlines_l=K(c.CBANDS);this.mld_cb_l=K(c.CBANDS);this.mld_cb_s=K(c.CBANDS);this.numlines_l_num1=this.numlines_s_num1=0;this.pe=K(4);this.ms_ener_ratio_old=this.ms_ratio_l_old=this.ms_ratio_s_old=0;this.blocktype_old=X(2);this.nsPsy=new Ic;this.VBR_seek_table=new Gc;this.PSY=this.ATH=null;this.nogap_current=this.nogap_total=0;this.findPeakSample=this.findReplayGain=this.decode_on_the_fly=!0;this.AudiophileGain=this.RadioGain=this.PeakSample=0;this.rgdata= -null;this.noclipScale=this.noclipGainChange=0;this.bitrate_stereoMode_Hist=Ia([16,5]);this.bitrate_blockType_Hist=Ia([16,6]);this.hip=this.pinfo=null;this.in_buffer_nsamples=0;this.iteration_loop=this.in_buffer_1=this.in_buffer_0=null;for(var k=0;k>1;var e=a;var l=a<<1;var d=l+e; -a=l<<1;var g=k;var q=g+u;do{var B=c[g+0]-c[g+e];var p=c[g+0]+c[g+e];var r=c[g+l]-c[g+d];var t=c[g+l]+c[g+d];c[g+l]=p-t;c[g+0]=p+t;c[g+d]=B-r;c[g+e]=B+r;B=c[q+0]-c[q+e];p=c[q+0]+c[q+e];r=aa.SQRT2*c[q+d];t=aa.SQRT2*c[q+l];c[q+l]=p-t;c[q+0]=p+t;c[q+d]=B-r;c[q+e]=B+r;q+=a;g+=a}while(gk;k++){var a=c.BLKSIZE_s/2,m=65535&192*(k+1),B= -c.BLKSIZE_s/8-1;do{var e=E[B<<2]&255;var l=n[e]*b[f][v+e+m];var d=n[127-e]*b[f][v+e+m+128];var g=l-d;l+=d;var q=n[e+64]*b[f][v+e+m+64];d=n[63-e]*b[f][v+e+m+192];var D=q-d;q+=d;a-=4;w[k][a+0]=l+q;w[k][a+2]=l-q;w[k][a+1]=g+D;w[k][a+3]=g-D;l=n[e+1]*b[f][v+e+m+1];d=n[126-e]*b[f][v+e+m+129];g=l-d;l+=d;q=n[e+65]*b[f][v+e+m+65];d=n[62-e]*b[f][v+e+m+193];D=q-d;q+=d;w[k][a+c.BLKSIZE_s/2+0]=l+q;w[k][a+c.BLKSIZE_s/2+2]=l-q;w[k][a+c.BLKSIZE_s/2+1]=g+D;w[k][a+c.BLKSIZE_s/2+3]=g-D}while(0<=--B);u(w[k],a,c.BLKSIZE_s/ -2)}};this.fft_long=function(n,w,f,b,v){n=c.BLKSIZE/8-1;var a=c.BLKSIZE/2;do{var m=E[n]&255;var B=k[m]*b[f][v+m];var e=k[m+512]*b[f][v+m+512];var l=B-e;B+=e;var d=k[m+256]*b[f][v+m+256];e=k[m+768]*b[f][v+m+768];var g=d-e;d+=e;a-=4;w[a+0]=B+d;w[a+2]=B-d;w[a+1]=l+g;w[a+3]=l-g;B=k[m+1]*b[f][v+m+1];e=k[m+513]*b[f][v+m+513];l=B-e;B+=e;d=k[m+257]*b[f][v+m+257];e=k[m+769]*b[f][v+m+769];g=d-e;d+=e;w[a+c.BLKSIZE/2+0]=B+d;w[a+c.BLKSIZE/2+2]=B-d;w[a+c.BLKSIZE/2+1]=l+g;w[a+c.BLKSIZE/2+3]=l-g}while(0<=--n);u(w, -a,c.BLKSIZE/2)};this.init_fft=function(u){for(u=0;ua)if(c=c*r)return a+c;g=a/c}a+=c;if(6>=b+3){if(g>=p)return a;b=0|aa.FAST_LOG10_X(g,16);return a* -x[b]}b=0|aa.FAST_LOG10_X(g,16);c=0!=e?f.ATH.cb_s[d]*f.ATH.adjust:f.ATH.cb_l[d]*f.ATH.adjust;return ac?(d=1,13>=b&&(d=y[b]),c=aa.FAST_LOG10_X(a/c,10/15),a*((h[b]-d)*c+d)):13a&&(a=0);0>c&&(c=0);if(0>=a)return c;if(0>=c)return a;var b=c>a?c/a:a/c;if(-2<=d&&2>=d){if(b>=p)return a+c;d=0|aa.FAST_LOG10_X(b,16);return(a+c)*A[d]}if(b=y){++e;break}k=a.PSY.bo_s_weight[e];y=1-k;l=k*d[g];k*=b[g];a.en[h].s[e][f]+=l;a.thm[h].s[e][f]+=k;l=y*d[g];k=y*b[g]}for(;e=m){++f;break}l=a.PSY.bo_l_weight[f];m=1-l;g=l*d[e];l*=b[e];a.en[h].l[f]+=g; -a.thm[h].l[f]+=l;g=m*d[e];l=m*b[e]}for(;f=d?c:0f;f++){var e=a.thm.s[h][f];if(0e&&(b=g>1E10*e?b+23.02585092994046*N[h]:b+N[h]*aa.FAST_LOG10(g/e))}}return b}function f(a,d){for(var b=281.0575,h=0;hf&&(b=e>1E10*f?b+23.02585092994046*H[h]: -b+H[h]*aa.FAST_LOG10(e/f))}}return b}function b(a,c,b,d,h){var f,e;for(f=e=0;fh&&(e=h);d[f]=e}else d[f]=0;for(f=1;fh&&(e=h),d[f]=e):d[f]=0;e=b[f-1]+b[f];0h&&(e=h),d[f]=e):d[f]=0}function a(a,c,b,d,f,h,e){var g=2*h;f=0y&&(k=y);l>p&&(l=p);c[2][m]=k;c[3][m]=l}}function m(a,c){a=0<=a?27*-a:a*c;return-72>=a?0:Math.exp(.2302585093*a)}function z(a){0>a&&(a=0);a*=.001;return 13*Math.atan(.76*a)+3.5*Math.atan(a*a/56.25)}function e(a,b,d,f,h,e,g,l,k,m,y,p){var q=K(c.CBANDS+1),n=l/(15z(l*t)- -A&&t<=k/2;t++);a[r]=t-u;for(C=r+1;uk/2){u=k/2;++r;break}}q[r]=l*u;for(u=0;ur&&(r=0),t=0|Math.floor(.5+y*(A-.5)),t>k/2&&(t=k/2),d[u]=(x[r]+x[t])/2,b[u]=x[t],g[u]=(n*A-q[b[u]])/(q[b[u]+1]-q[b[u]]),0>g[u]?g[u]=0:1=y){var p=y-.5;p=8*(p*p-2*p)}else p=0;y+=.474;y=15.811389+7.5*y-17.5*Math.sqrt(1+y*y);-60>=y?p=0:(y=Math.exp(.2302585093*(p+y)),p=y/.6609193);y=p*f[e];g[k][e]=y*h[k]}else for(e=0;e=n;++n)q=y+n*(x-y)/1E3,q=m(q,k),r+=q;q=1001/(r*(x-y));for(k=0;k -a&&(a=3410);a=Math.max(.1,a/1E3);return 3.64*Math.pow(a,-.8)-6.8*Math.exp(-.6*Math.pow(a-3.4,2))+6*Math.exp(-.15*Math.pow(a-8.7,2))+.001*(.6+.04*c)*Math.pow(a,4)}var q=new Jc,D=1/217621504/(c.BLKSIZE/2),p,r,t,J=[1,.79433,.63096,.63096,.63096,.63096,.63096,.25119,.11749],h=[3.3246*3.3246,3.23837*3.23837,9.9500500969,9.0247369744,8.1854926609,7.0440875649,2.46209*2.46209,2.284*2.284,4.4892710641,1.96552*1.96552,1.82335*1.82335,1.69146*1.69146,2.4621061921,2.1508568964,1.37074*1.37074,1.31036*1.31036, -1.5691069696,1.4555939904,1.16203*1.16203,1.2715945225,1.09428*1.09428,1.0659*1.0659,1.0779838276,1.0382591025,1],x=[1.7782755904,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1],y=[5.5396212496,2.29259*2.29259,4.9868695969,2.12675*2.12675,2.02545*2.02545,1.87894*1.87894,1.74303*1.74303,1.61695*1.61695,2.2499700001,1.39148*1.39148,1.29083*1.29083,1.19746*1.19746,1.2339655056,1.0779838276],A=[1.7782755904,1.35879*1.35879,1.38454* -1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1],N=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130],H=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1],O=[-1.730326E-17,-.01703172,-1.349528E-17,.0418072,-6.73278E-17,-.0876324,-3.0835E-17,.1863476,-1.104424E-16,-.627638];this.L3psycho_anal_ns=function(a,d,h,e,g,l,m,y,p,n){var x=a.internal_flags,r=ca([2,c.BLKSIZE]),t=ca([2,3,c.BLKSIZE_s]),A= -K(c.CBANDS+1),I=K(c.CBANDS+1),C=K(c.CBANDS+2),Q=X(2),S=X(2),z,D,F,H,N,Z,L,V=ca([2,576]),ma=X(c.CBANDS+2),R=X(c.CBANDS+2);na.fill(R,0);var T=x.channels_out;a.mode==la.JOINT_STEREO&&(T=4);var M=a.VBR==G.vbr_off?0==x.ResvMax?0:x.ResvSize/x.ResvMax*.5:a.VBR==G.vbr_rh||a.VBR==G.vbr_mtrh||a.VBR==G.vbr_mt?.6:1;for(z=0;zF;F++){var U;var da=Y[ha+F+10];for(H=U=0;9>H;H+=2)da+=O[H]*(Y[ha+F+H]+Y[ha+F+21-H]),U+=O[H+1]*(Y[ha+F+H+1]+Y[ha+F+21-H-1]); -V[z][F]=da+U}g[e][z].en.assign(x.en[z]);g[e][z].thm.assign(x.thm[z]);2F;F++)Qa[F]=x.nsPsy.last_en_subshort[z][F+6],qa[F]=Qa[F]/x.nsPsy.last_en_subshort[z][F+4],ya[0]+=Qa[F];if(2==z)for(F=0;576>F;F++){var Ya=V[0][F];var Xa=V[1][F];V[0][F]=Ya+Xa;V[1][F]=Ya-Xa}var Ia=V[z&1],ec=0;for(F=0;9> -F;F++){for(var xa=ec+64,Ga=1;ecQa[F+3-2]?Ga/Qa[F+3-2]:Qa[F+3-2]>10*Ga?Qa[F+3-2]/(10*Ga):0;qa[F+3]=Ga}if(a.analysis){var Qb=qa[0];for(F=1;12>F;F++)QbF;F++)0==ta[F/3]&&qa[F]>Ma&&(ta[F/3]=F%3+1);for(F=1;4>F;F++)1.7>(ya[F-1]>ya[F]?ya[F-1]/ya[F]:ya[F]/ -ya[F-1])&&(ta[F]=0,1==F&&(ta[0]=0));0!=ta[0]&&0!=x.nsPsy.lastAttacks[z]&&(ta[0]=0);if(3==x.nsPsy.lastAttacks[z]||0!=ta[0]+ta[1]+ta[2]+ta[3])ia=0,0!=ta[1]&&0!=ta[0]&&(ta[1]=0),0!=ta[2]&&0!=ta[1]&&(ta[2]=0),0!=ta[3]&&0!=ta[2]&&(ta[3]=0);2>z?S[z]=ia:0==ia&&(S[0]=S[1]=0);p[z]=x.tot_ener[z];var P=a,Ha=za,Gb=Wb,La=r,kb=z&1,Ra=t,Na=z&1,cb=e,Aa=z,va=d,qb=h,Va=P.internal_flags;if(2>Aa)q.fft_long(Va,La[kb],Aa,va,qb),q.fft_short(Va,Ra[Na],Aa,va,qb);else if(2==Aa){for(var ja=c.BLKSIZE-1;0<=ja;--ja){var Hb=La[kb+ -0][ja],Ib=La[kb+1][ja];La[kb+0][ja]=(Hb+Ib)*aa.SQRT2*.5;La[kb+1][ja]=(Hb-Ib)*aa.SQRT2*.5}for(var Ba=2;0<=Ba;--Ba)for(ja=c.BLKSIZE_s-1;0<=ja;--ja)Hb=Ra[Na+0][Ba][ja],Ib=Ra[Na+1][Ba][ja],Ra[Na+0][Ba][ja]=(Hb+Ib)*aa.SQRT2*.5,Ra[Na+1][Ba][ja]=(Hb-Ib)*aa.SQRT2*.5}Ha[0]=La[kb+0][0];Ha[0]*=Ha[0];for(ja=c.BLKSIZE/2-1;0<=ja;--ja){var fc=La[kb+0][c.BLKSIZE/2-ja],tb=La[kb+0][c.BLKSIZE/2+ja];Ha[c.BLKSIZE/2-ja]=.5*(fc*fc+tb*tb)}for(Ba=2;0<=Ba;--Ba)for(Gb[Ba][0]=Ra[Na+0][Ba][0],Gb[Ba][0]*=Gb[Ba][0],ja=c.BLKSIZE_s/ -2-1;0<=ja;--ja)fc=Ra[Na+0][Ba][c.BLKSIZE_s/2-ja],tb=Ra[Na+0][Ba][c.BLKSIZE_s/2+ja],Gb[Ba][c.BLKSIZE_s/2-ja]=.5*(fc*fc+tb*tb);var oa=0;for(ja=11;jaAa&&(Va.loudness_sq[cb][Aa]=Va.loudness_sq_save[Aa],Va.loudness_sq_save[Aa]=u(Ha,Va));b(x,za,A,sa,Fa);v(x,sa,Fa,ma);for(L= -0;3>L;L++){var ea=void 0,Ab=void 0,Bb=Wb,Sa=I,Za=C,ub=z,zb=L,Ja=a.internal_flags;for(ea=Ab=0;eafb;fb++)Sb=fa.thm[0].s[Ca][fb],Eb=fa.thm[1].s[Ca][fb],fa.thm[0].s[Ca][fb]+=Eb*xb,fa.thm[1].s[Ca][fb]+=Sb*xb}}if(a.mode==la.JOINT_STEREO){for(var Oa,ka=0;ka1.58*x.thm[1].l[ka]||x.thm[1].l[ka]>1.58* -x.thm[0].l[ka])){var Ua=x.mld_l[ka]*x.en[3].l[ka],gb=Math.max(x.thm[2].l[ka],Math.min(x.thm[3].l[ka],Ua));Ua=x.mld_l[ka]*x.en[2].l[ka];var gc=Math.max(x.thm[3].l[ka],Math.min(x.thm[2].l[ka],Ua));x.thm[2].l[ka]=gb;x.thm[3].l[ka]=gc}for(ka=0;kaua;ua++)x.thm[0].s[ka][ua]>1.58*x.thm[1].s[ka][ua]||x.thm[1].s[ka][ua]>1.58*x.thm[0].s[ka][ua]||(Ua=x.mld_s[ka]*x.en[3].s[ka][ua],gb=Math.max(x.thm[2].s[ka][ua],Math.min(x.thm[3].s[ka][ua],Ua)),Ua=x.mld_s[ka]*x.en[2].s[ka][ua],gc= -Math.max(x.thm[3].s[ka][ua],Math.min(x.thm[2].s[ka][ua],Ua)),x.thm[2].s[ka][ua]=gb,x.thm[3].s[ka][ua]=gc);Oa=a.msfix;if(0Da;Da++)ba=x.ATH.cb_s[x.bm_s[wa]]*Zb,Wa=Math.min(Math.max(x.thm[0].s[wa][Da],ba),Math.max(x.thm[1].s[wa][Da],ba)),ab=Math.max(x.thm[2].s[wa][Da],ba),mb=Math.max(x.thm[3].s[wa][Da],ba),Wa*KbM;M++){var Y;var ha=firbuf[T+M+10];for(var U=Y=0;9>U;U+=2)ha+=F[U]*(firbuf[T+M+U]+firbuf[T+M+21-U]),Y+=F[U+1]*(firbuf[T+M+U+1]+firbuf[T+M+21-U-1]);Z[R][M]=ha+Y}l[g][R].en.assign(G.en[R]); -l[g][R].thm.assign(G.thm[R]);2M;M++)ya[M]=G.nsPsy.last_en_subshort[R][M+6],da[M]=ya[M]/G.nsPsy.last_en_subshort[R][M+4],qa[0]+=ya[M];for(M=0;9>M;M++){for(var Xa=sa+64,Ya=1;saya[M+3-2]?Ya/ya[M+3-2]:ya[M+3-2]>10*Ya?ya[M+3-2]/(10*Ya):0;da[M+3]=Ya}for(M=0;3>M;++M){var Ia=ya[3*M+3]+ya[3*M+4]+ya[3*M+5],Wb=1;6*ya[3*M+5]M;M++)xaM;M++)0==L[R][M/3]&&da[M]>Fa&&(L[R][M/3]=M%3+1);for(M=1;4>M;M++){var Qb=qa[M-1],Ga=qa[M];4E4>Math.max(Qb,Ga)&&Qb< -1.7*Ga&&Ga<1.7*Qb&&(1==M&&L[R][0]<=L[R][M]&&(L[R][0]=0),L[R][M]=0)}L[R][0]<=G.nsPsy.lastAttacks[R]&&(L[R][0]=0);if(3==G.nsPsy.lastAttacks[R]||0!=L[R][0]+L[R][1]+L[R][2]+L[R][3])na=0,0!=L[R][1]&&0!=L[R][0]&&(L[R][1]=0),0!=L[R][2]&&0!=L[R][1]&&(L[R][2]=0),0!=L[R][3]&&0!=L[R][2]&&(L[R][3]=0);2>R?H[R]=na:0==na&&(H[0]=H[1]=0);y[R]=G.tot_ener[R]}var qb=d.internal_flags;d.short_blocks!=ra.short_block_coupled||0!=H[0]&&0!=H[1]||(H[0]=H[1]=0);for(var Ma=0;MaLa)q.fft_long(Aa,Na[cb],La,h,e);else if(2==La)for(var va=c.BLKSIZE-1;0<=va;--va){var rb=Na[cb+0][va],Va=Na[cb+1][va];Na[cb+0][va]=(rb+Va)*aa.SQRT2*.5;Na[cb+1][va]=(rb-Va)*aa.SQRT2*.5}Ra[0]=Na[cb+0][0];Ra[0]*=Ra[0];for(va=c.BLKSIZE/2-1;0<=va;--va){var ja=Na[cb+0][c.BLKSIZE/2-va],Hb=Na[cb+0][c.BLKSIZE/2+va];Ra[c.BLKSIZE/2-va]=.5*(ja*ja+Hb*Hb)}var Ib= -0;for(va=11;vaBa&&(tb.loudness_sq[g][Ba]=tb.loudness_sq_save[Ba],tb.loudness_sq_save[Ba]=u(zb,tb));if(0!=H[Ha]){var oa=void 0,ea=r,Ab=I,Bb=S[P],Sa=D[P],Za=P,ub=K(c.CBANDS),sb=K(c.CBANDS),Ja=X(c.CBANDS+2);b(ea,Ab,Bb,ub,sb);v(ea,ub, -sb,Ja);var Rb=0;for(oa=0;oa=Yb&&(Yb=$a);0>=eb&&(eb=$a); -wb=ea.blocktype_old[Za&1]==c.NORM_TYPE?Math.min(eb,Yb):eb;Sa[oa]=Math.min($a,wb)}ea.nb_2[Za][oa]=ea.nb_1[Za][oa];ea.nb_1[Za][oa]=$a;vb=ub[oa];vb*=ea.minval_l[oa];vb*=Ta;Sa[oa]>vb&&(Sa[oa]=vb);1Bb[oa]&&(Sa[oa]=Bb[oa]);1>ea.masking_lower&&(Sa[oa]*=ea.masking_lower)}for(;oafa;fa++){for(P=0;Pfb&&q.fft_short(gc,Ua[gb],fb,h,e);if(2==fb)for(var ua=c.BLKSIZE_s-1;0<=ua;--ua){var Kb=Ua[gb+0][Oa][ua],hc=Ua[gb+1][Oa][ua];Ua[gb+0][Oa][ua]=(Kb+hc)*aa.SQRT2*.5; -Ua[gb+1][Oa][ua]=(Kb-hc)*aa.SQRT2*.5}ka[Oa][0]=Ua[gb+0][Oa][0];ka[Oa][0]*=ka[Oa][0];for(ua=c.BLKSIZE_s/2-1;0<=ua;--ua){var Zb=Ua[gb+0][Oa][c.BLKSIZE_s/2-ua],wa=Ua[gb+0][Oa][c.BLKSIZE_s/2+ua];ka[Oa][c.BLKSIZE_s/2-ua]=.5*(Zb*Zb+wa*wa)}var ba=void 0,Wa=void 0,ab=void 0,mb=C,hb=S[P],Da=D[P],ib=P,Ka=fa,Ea=d.internal_flags,Lb=new float[c.CBANDS],Tb=K(c.CBANDS),Fb=new int[c.CBANDS];for(ba=Wa=0;baac&&(ob=ac);$b[pa]=ob}else $b[pa]=0;for(pa=1;paac&&(ob=ac),$b[pa]=ob):$b[pa]=0;Pa=Ub[pa-1]+Ub[pa];0ac&&(ob=ac),$b[pa]=ob):$b[pa]=0;for(Wa=ba=0;babc&&(Da[ba]=bc);1hb[ba]&&(Da[ba]=hb[ba]);1>Ea.masking_lower&&(Da[ba]*=Ea.masking_lower)}for(;bafa;fa++){var jb=r.thm[P].s[Vb][fa];jb*=.8;if(2<=L[P][fa]||1==L[P][fa+1]){var jc=0!=fa?fa-1:2,kc=B(r.thm[P].s[Vb][jc],jb,.36);jb=Math.min(jb,kc)}else if(1==L[P][fa])jc=0!=fa?fa-1:2,kc=B(r.thm[P].s[Vb][jc],jb,.18),jb=Math.min(jb,kc);else if(0!=fa&&3==L[P][fa-1]||0==fa&&3==r.nsPsy.lastAttacks[P])jc=2!=fa?fa+1:0,kc=B(r.thm[P].s[Vb][jc],jb,.18),jb=Math.min(jb,kc);jb*=O[P][fa];vc[fa]=jb}for(fa=0;3>fa;fa++)r.thm[P].s[Vb][fa]=vc[fa]}for(P=0;Pf;++f){for(var v=0;vv;++v){for(z=0;zv;v++)b.nsPsy.last_en_subshort[f][v]=10}b.loudness_sq_save[0]=b.loudness_sq_save[1]=0;b.npart_l=e(b.numlines_l,b.bo_l,b.bm_l,n,u,b.mld_l,b.PSY.bo_l_weight,w,c.BLKSIZE,b.scalefac_band.l, -c.BLKSIZE/1152,c.SBMAX_l);for(f=0;f=g&&(z=m*(n[f]-g)/(24-g)+k*(24-n[f])/(24-g)),A[f]=Math.pow(10,z/10),b.rnumlines_l[f]=0k&&(m=k);b.ATH.cb_l[f]=m;m=-20+20*n[f]/10;6m&&(m=-15);m-=8;b.minval_l[f]=Math.pow(10,m/10)*b.numlines_l[f]}b.npart_s= -e(b.numlines_s,b.bo_s,b.bm_s,n,u,b.mld_s,b.PSY.bo_s_weight,w,c.BLKSIZE_s,b.scalefac_band.s,c.BLKSIZE_s/384,c.SBMAX_s);for(f=v=0;f=g&&(z=y*(n[f]-g)/(24-g)+x*(24-n[f])/(24-g));A[f]=Math.pow(10,z/10);m=Ma.MAX_VALUE;for(z=0;zk&&(m=k);b.ATH.cb_s[f]=m;m=-7+7*n[f]/12;12n[f]&&(m*=1+2.3*Math.log(1-m));-15>m&&(m=-15);m-=8;b.minval_s[f]= -Math.pow(10,m/10)*b.numlines_s[f]}b.s3_ss=l(b.s3ind_s,b.npart_s,n,u,A,h);p=Math.pow(10,.5625);r=Math.pow(10,1.5);t=Math.pow(10,1.5);q.init_fft(b);b.decay=Math.exp(-2.302585092994046/(.01*w/192));f=3.5;0!=(a.exp_nspsytune&2)&&(f=1);0b.npart_l-1&&(b.s3ind[h][1]=b.npart_l-1);b.ATH.decay=Math.pow(10,576*b.mode_gr/w*-1.2);b.ATH.adjust=.01;b.ATH.adjustLimit=1;if(-1!=a.ATHtype){v=a.out_samplerate/c.BLKSIZE;for(f=k=h=0;f=a?1:Math.cos(Math.PI/2*a)}function E(a,b){switch(a){case 44100:return b.version= -1,0;case 48E3:return b.version=1;case 32E3:return b.version=1,2;case 22050:return b.version=0;case 24E3:return b.version=0,1;case 16E3:return b.version=0,2;case 11025:return b.version=0;case 12E3:return b.version=0,1;case 8E3:return b.version=0,2;default:return b.version=0,-1}}function B(a,b,d){16E3>d&&(b=2);d=w.bitrate_table[b][1];for(var c=2;14>=c;c++)0d&&(b=2);for(d= -0;14>=d;d++)if(0t)return t;n+=t;x+=t;u[0]=g;u[1]=k;if(qa.NEQ(f.scale,0)&&qa.NEQ(f.scale,1))for(t=0;tH.resample_ratio||1.0001da.BPC&&(sa= -da.BPC);var ra=1E-4>Math.abs(ca.resample_ratio-Math.floor(.5+ca.resample_ratio))?1:0;var R=1/ca.resample_ratio;1xa&&(xa=0);1Math.abs(Ma)?Qa/Math.PI:xa*Math.sin(na*Qa*Ma)/(Math.PI*na*Ma)}for(N=0;N<=na;N++)ca.blackfilt[ia][N]/=M}ca.fill_buffer_resample_init=1}M=ca.inbuf_old[la];for(R=0;R=aa)break;za=N-ca.itime[la]-(ia+na%2*.5);za=0|Math.floor(2*za*sa+sa+.5);for(N=Fa=0;N<=na;++N)Ia=0|N+ia-na/2,Fa+=(0>Ia?M[ra+Ia]:W[X+Ia])*ca.blackfilt[za][N];V[T+R]=Fa}ha.num_used=Math.min(aa,na+ia-na/2);ca.itime[la]+=ha.num_used- -R*ca.resample_ratio;if(ha.num_used>=ra)for(N=0;Nh.mf_samples_to_encode&&(h.mf_samples_to_encode=c.ENCDELAY+c.POSTDELAY);h.mf_samples_to_encode+=t;if(h.mf_size>=g){w=r-x;0==r&&(w=0);t=f;w=e.enc.lame_encode_mp3_frame(t,y[0],y[1],q,n,w);t.frameNum++;t=w;if(0>t)return t;n+=t;x+=t;h.mf_size-=f.framesize;h.mf_samples_to_encode-=f.framesize;for(w=0;wh;h++)if(Math.max(a,b[h+1])!=a){d=b[h+1];c=h+1;f=b[h];e=h;break}return d-a>a-f?e:c};this.lame_init_params=function(a){var b=a.internal_flags;b.Class_ID=0;null==b.ATH&&(b.ATH=new Cc);null==b.PSY&&(b.PSY=new u);null==b.rgdata&&(b.rgdata=new Ac);b.channels_in=a.num_channels; -1==b.channels_in&&(a.mode=la.MONO);b.channels_out=a.mode==la.MONO?1:2;b.mode_ext=c.MPG_MD_MS_LR;a.mode==la.MONO&&(a.force_ms=!1);a.VBR==G.vbr_off&&128!=a.VBR_mean_bitrate_kbps&&0==a.brate&&(a.brate=a.VBR_mean_bitrate_kbps);a.VBR!=G.vbr_off&&a.VBR!=G.vbr_mtrh&&a.VBR!=G.vbr_mt&&(a.free_format=!1);a.VBR==G.vbr_off&&0==a.brate&&qa.EQ(a.compression_ratio,0)&&(a.compression_ratio=11.025);a.VBR==G.vbr_off&&0a.out_samplerate?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,64)):32E3>a.out_samplerate?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,160)):(a.VBR_mean_bitrate_kbps= -Math.max(a.VBR_mean_bitrate_kbps,32),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,320)));if(0==a.lowpassfreq){switch(a.VBR){case G.vbr_off:var e=new k;f(e,a.brate);e=e.lowerlimit;break;case G.vbr_abr:e=new k;f(e,a.VBR_mean_bitrate_kbps);e=e.lowerlimit;break;case G.vbr_rh:var h=[19500,19E3,18600,18E3,17500,16E3,15600,14900,12500,1E4,3950];if(0<=a.VBR_q&&9>=a.VBR_q){e=h[a.VBR_q];h=h[a.VBR_q+1];var m=a.VBR_q_frac;e=linear_int(e,h,m)}else e=19500;break;default:h=[19500,19E3,18500,18E3,17500, -16500,15500,14500,12500,9500,3950],0<=a.VBR_q&&9>=a.VBR_q?(e=h[a.VBR_q],h=h[a.VBR_q+1],m=a.VBR_q_frac,e=linear_int(e,h,m)):e=19500}a.mode!=la.MONO||a.VBR!=G.vbr_off&&a.VBR!=G.vbr_abr||(e*=1.5);a.lowpassfreq=e|0}0==a.out_samplerate&&(2*a.lowpassfreq>a.in_samplerate&&(a.lowpassfreq=a.in_samplerate/2),e=a.lowpassfreq|0,h=a.in_samplerate,m=44100,48E3<=h?m=48E3:44100<=h?m=44100:32E3<=h?m=32E3:24E3<=h?m=24E3:22050<=h?m=22050:16E3<=h?m=16E3:12E3<=h?m=12E3:11025<=h?m=11025:8E3<=h&&(m=8E3),-1==e?e=m:(15960>= -e&&(m=44100),15250>=e&&(m=32E3),11220>=e&&(m=24E3),9970>=e&&(m=22050),7230>=e&&(m=16E3),5420>=e&&(m=12E3),4510>=e&&(m=11025),3970>=e&&(m=8E3),e=h=a.out_samplerate?1:2;a.framesize=576*b.mode_gr;a.encoder_delay=c.ENCDELAY;b.resample_ratio=a.in_samplerate/a.out_samplerate;switch(a.VBR){case G.vbr_mt:case G.vbr_rh:case G.vbr_mtrh:a.compression_ratio=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5][a.VBR_q];break;case G.vbr_abr:a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.VBR_mean_bitrate_kbps);break;default:a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.brate)}a.mode==la.NOT_SET&&(a.mode=la.JOINT_STEREO);0b.lowpass1&&(b.lowpass1=0)):b.lowpass1=2*a.lowpassfreq,b.lowpass1/=a.out_samplerate,b.lowpass2/=a.out_samplerate):(b.lowpass1=0,b.lowpass2=0);e=a.internal_flags;var n=32,v=-1;if(0=h;h++)m=h/31,m>=e.lowpass2&&(n=Math.min(n,h)),e.lowpass1=h;h++)m=h/31,m<=e.highpass1&&(v=Math.max(v,h)),e.highpass1h;h++)m=h/31,v=e.highpass2>e.highpass1?V((e.highpass2-m)/(e.highpass2-e.highpass1+1E-20)):1,m=e.lowpass2>e.lowpass1?V((m-e.lowpass1)/(e.lowpass2-e.lowpass1+1E-20)):1,e.amp_filter[h]=v*m;b.samplerate_index=E(a.out_samplerate,a);if(0>b.samplerate_index)return a.internal_flags=null,-1;if(a.VBR==G.vbr_off)if(a.free_format)b.bitrate_index=0;else{if(a.brate=B(a.brate,a.version,a.out_samplerate),b.bitrate_index=U(a.brate,a.version,a.out_samplerate),0>=b.bitrate_index)return a.internal_flags=null,-1}else b.bitrate_index= -1;a.analysis&&(a.bWriteVbrTag=!1);null!=b.pinfo&&(a.bWriteVbrTag=!1);d.init_bit_stream_w(b);e=b.samplerate_index+3*a.version+6*(16E3>a.out_samplerate?1:0);for(h=0;he;e++)b.nsPsy.pefirbuf[e]=700* -b.mode_gr*b.channels_out;-1==a.ATHtype&&(a.ATHtype=4);switch(a.VBR){case G.vbr_mt:a.VBR=G.vbr_mtrh;case G.vbr_mtrh:null==a.useTemporal&&(a.useTemporal=!1);g.apply_preset(a,500-10*a.VBR_q,0);0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY);5>a.quality&&(a.quality=0);5a.quality&&(a.quality=LAME_DEFAULT_QUALITY);b.iteration_loop=new VBROldIterationLoop(D);break;default:b.sfb21_extra=!1,0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY),e=a.VBR,e==G.vbr_off&&(a.VBR_mean_bitrate_kbps=a.brate),g.apply_preset(a,a.VBR_mean_bitrate_kbps,0),a.VBR=e,b.PSY.mask_adjust=a.maskingadjust,b.PSY.mask_adjust_short= -a.maskingadjust_short,b.iteration_loop=e==G.vbr_off?new Bc(D):new ABRIterationLoop(D)}if(a.VBR!=G.vbr_off){b.VBR_min_bitrate=1;b.VBR_max_bitrate=14;16E3>a.out_samplerate&&(b.VBR_max_bitrate=8);if(0!=a.VBR_min_bitrate_kbps&&(a.VBR_min_bitrate_kbps=B(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),b.VBR_min_bitrate=U(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),0>b.VBR_min_bitrate)||0!=a.VBR_max_bitrate_kbps&&(a.VBR_max_bitrate_kbps=B(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),b.VBR_max_bitrate= -U(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),0>b.VBR_max_bitrate))return-1;a.VBR_min_bitrate_kbps=w.bitrate_table[a.version][b.VBR_min_bitrate];a.VBR_max_bitrate_kbps=w.bitrate_table[a.version][b.VBR_max_bitrate];a.VBR_mean_bitrate_kbps=Math.min(w.bitrate_table[a.version][b.VBR_max_bitrate],a.VBR_mean_bitrate_kbps);a.VBR_mean_bitrate_kbps=Math.max(w.bitrate_table[a.version][b.VBR_min_bitrate],a.VBR_mean_bitrate_kbps)}a.tune&&(b.PSY.mask_adjust+=a.tune_value_a,b.PSY.mask_adjust_short+=a.tune_value_a); -e=a.internal_flags;switch(a.quality){default:case 9:e.psymodel=0;e.noise_shaping=0;e.noise_shaping_amp=0;e.noise_shaping_stop=0;e.use_best_huffman=0;e.full_outer_loop=0;break;case 8:a.quality=7;case 7:e.psymodel=1;e.noise_shaping=0;e.noise_shaping_amp=0;e.noise_shaping_stop=0;e.use_best_huffman=0;e.full_outer_loop=0;break;case 6:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=0;e.full_outer_loop= -0;break;case 5:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=0;e.full_outer_loop=0;break;case 4:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 3:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=1;e.noise_shaping_stop=1;-1== -e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 2:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);0==e.substep_shaping&&(e.substep_shaping=2);e.noise_shaping_amp=1;e.noise_shaping_stop=1;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 1:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);0==e.substep_shaping&&(e.substep_shaping=2);e.noise_shaping_amp=2;e.noise_shaping_stop=1;-1==e.subblock_gain&&(e.subblock_gain= -1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 0:e.psymodel=1,0==e.noise_shaping&&(e.noise_shaping=1),0==e.substep_shaping&&(e.substep_shaping=2),e.noise_shaping_amp=2,e.noise_shaping_stop=1,-1==e.subblock_gain&&(e.subblock_gain=1),e.use_best_huffman=1,e.full_outer_loop=0}b.ATH.useAdjust=0>a.athaa_type?3:a.athaa_type;b.ATH.aaSensitivityP=Math.pow(10,a.athaa_sensitivity/-10);null==a.short_blocks&&(a.short_blocks=ra.short_block_allowed);a.short_blocks!=ra.short_block_allowed||a.mode!=la.JOINT_STEREO&& -a.mode!=la.STEREO||(a.short_blocks=ra.short_block_coupled);0>a.quant_comp&&(a.quant_comp=1);0>a.quant_comp_short&&(a.quant_comp_short=0);0>a.msfix&&(a.msfix=0);a.exp_nspsytune|=1;0>a.internal_flags.nsPsy.attackthre&&(a.internal_flags.nsPsy.attackthre=Pb.NSATTACKTHRE);0>a.internal_flags.nsPsy.attackthre_s&&(a.internal_flags.nsPsy.attackthre_s=Pb.NSATTACKTHRE_S);0>a.scale&&(a.scale=1);0>a.ATHtype&&(a.ATHtype=4);0>a.ATHcurve&&(a.ATHcurve=4);0>a.athaa_loudapprox&&(a.athaa_loudapprox=2);0>a.interChRatio&& -(a.interChRatio=0);null==a.useTemporal&&(a.useTemporal=!0);b.slot_lag=b.frac_SpF=0;a.VBR==G.vbr_off&&(b.slot_lag=b.frac_SpF=72E3*(a.version+1)*a.brate%a.out_samplerate|0);q.iteration_init(a);p.psymodel_init(a);return 0};this.lame_encode_flush=function(a,e,f,g){var k=a.internal_flags,l=dc([2,1152]),h=0,m=k.mf_samples_to_encode-c.POSTDELAY,p=b(a);if(1>k.mf_samples_to_encode)return 0;var n=0;a.in_samplerate!=a.out_samplerate&&(m+=16*a.out_samplerate/a.in_samplerate);var q=a.framesize-m%a.framesize;576> -q&&(q+=a.framesize);a.encoder_padding=q;for(q=(m+q)/a.framesize;0r&&(r=1);h=g-n;0==g&&(h=0);h=this.lame_encode_buffer(a,l[0],l[1],r,e,f,h);f+=h;n+=h;q-=m!=a.frameNum?1:0}k.mf_samples_to_encode=0;if(0>h)return h;h=g-n;0==g&&(h=0);d.flush_bitstream(a);h=d.copy_buffer(k,e,f,h,1);if(0>h)return h;f+=h;n+=h;h=g-n;0==g&&(h=0);if(a.write_id3tag_automatic){t.id3tag_write_v1(a);h=d.copy_buffer(k,e,f,h,0);if(0> -h)return h;n+=h}return n};this.lame_encode_buffer=function(a,b,d,c,e,f,g){var h=a.internal_flags,k=[null,null];if(4294479419!=h.Class_ID)return-3;if(0==c)return 0;if(null==h.in_buffer_0||h.in_buffer_nsamplesMath.abs(k)?Math.abs(c-k)<=1E-6*Math.abs(c):Math.abs(c-k)<=1E-6*Math.abs(k)};qa.NEQ=function(c,k){return!qa.EQ(c,k)};zb.NUMTOCENTRIES=100;zb.MAXFRAMESIZE=2880; -var w={t1HB:[1,1,1,0],t2HB:[1,2,1,3,1,1,3,2,0],t3HB:[3,2,1,1,1,1,3,2,0],t5HB:[1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0],t6HB:[7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0],t7HB:[1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0],t8HB:[3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0],t9HB:[7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0],t10HB:[1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34, -46,23,18,7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0],t11HB:[3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0],t12HB:[9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0],t13HB:[1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19, -3,4,12,19,31,26,44,33,31,24,32,24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,60,51, -36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1],t15HB:[7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40, -38,125,32,60,56,50,92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0],t16HB:[1,5,14,44,74,63, -110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73, -141,131,256,245,426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3],t24HB:[15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,130,122,216, -209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289, -275,521,379,371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3],t32HB:[1,10,8,20,12,20,16,32,14,12,24,0,28,16,24,16],t33HB:[15,28,26,48,22,40,36,64,14,24,20,32,12,16,8,0],t1l:[1,4,3,5],t2l:[1,4, -7,4,5,7,6,7,8],t3l:[2,3,7,4,4,7,6,7,8],t5l:[1,4,7,8,4,5,8,9,7,8,9,10,8,8,9,10],t6l:[3,4,6,8,4,4,6,7,5,6,7,8,7,7,8,9],t7l:[1,4,7,9,9,10,4,6,8,9,9,10,7,7,9,10,10,11,8,9,10,11,11,11,8,9,10,11,11,12,9,10,11,12,12,12],t8l:[2,4,7,9,9,10,4,4,6,10,10,10,7,6,8,10,10,11,9,10,10,11,11,12,9,9,10,11,12,12,10,10,11,11,13,13],t9l:[3,4,6,7,9,10,4,5,6,7,8,10,5,6,7,8,9,10,7,7,8,9,9,10,8,8,9,9,10,11,9,9,10,10,11,11],t10l:[1,4,7,9,10,10,10,11,4,6,8,9,10,11,10,10,7,8,9,10,11,12,11,11,8,9,10,11,12,12,11,12,9,10,11,12, -12,12,12,12,10,11,12,12,13,13,12,13,9,10,11,12,12,12,13,13,10,10,11,12,12,13,13,13],t11l:[2,4,6,8,9,10,9,10,4,5,6,8,10,10,9,10,6,7,8,9,10,11,10,10,8,8,9,11,10,12,10,11,9,10,10,11,11,12,11,12,9,10,11,12,12,13,12,13,9,9,9,10,11,12,12,12,9,9,10,11,12,12,12,12],t12l:[4,4,6,8,9,10,10,10,4,5,6,7,9,9,10,10,6,6,7,8,9,10,9,10,7,7,8,8,9,10,10,10,8,8,9,9,10,10,10,11,9,9,10,10,10,11,10,11,9,9,9,10,10,11,11,12,10,10,10,11,11,11,11,12],t13l:[1,5,7,8,9,10,10,11,10,11,12,12,13,13,14,14,4,6,8,9,10,10,11,11,11,11, -12,12,13,14,14,14,7,8,9,10,11,11,12,12,11,12,12,13,13,14,15,15,8,9,10,11,11,12,12,12,12,13,13,13,13,14,15,15,9,9,11,11,12,12,13,13,12,13,13,14,14,15,15,16,10,10,11,12,12,12,13,13,13,13,14,13,15,15,16,16,10,11,12,12,13,13,13,13,13,14,14,14,15,15,16,16,11,11,12,13,13,13,14,14,14,14,15,15,15,16,18,18,10,10,11,12,12,13,13,14,14,14,14,15,15,16,17,17,11,11,12,12,13,13,13,15,14,15,15,16,16,16,18,17,11,12,12,13,13,14,14,15,14,15,16,15,16,17,18,19,12,12,12,13,14,14,14,14,15,15,15,16,17,17,17,18,12,13,13,14, -14,15,14,15,16,16,17,17,17,18,18,18,13,13,14,15,15,15,16,16,16,16,16,17,18,17,18,18,14,14,14,15,15,15,17,16,16,19,17,17,17,19,18,18,13,14,15,16,16,16,17,16,17,17,18,18,21,20,21,18],t15l:[3,5,6,8,8,9,10,10,10,11,11,12,12,12,13,14,5,5,7,8,9,9,10,10,10,11,11,12,12,12,13,13,6,7,7,8,9,9,10,10,10,11,11,12,12,13,13,13,7,8,8,9,9,10,10,11,11,11,12,12,12,13,13,13,8,8,9,9,10,10,11,11,11,11,12,12,12,13,13,13,9,9,9,10,10,10,11,11,11,11,12,12,13,13,13,14,10,9,10,10,10,11,11,11,11,12,12,12,13,13,14,14,10,10,10, -11,11,11,11,12,12,12,12,12,13,13,13,14,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,14,10,10,11,11,11,11,12,12,12,13,13,13,13,14,14,14,11,11,11,11,12,12,12,12,12,13,13,13,13,14,15,14,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,12,12,11,12,12,12,13,13,13,13,13,13,14,14,15,15,12,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,13,13,13,13,13,13,13,13,14,14,14,14,15,15,14,15,13,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15],t16_5l:[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,11,4,6,8,9,10,11,11,11,12,12, -12,13,14,13,14,11,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,12,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,13,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,12,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,13,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,13,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,13,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,13,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,14,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,13,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,14,13,14,14, -14,14,15,15,15,15,17,16,16,16,16,18,14,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,14,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,14,11,11,11,12,12,13,13,13,14,14,14,14,14,14,14,12],t16l:[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,10,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,10,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,11,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,12,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,11,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,12,11,11,11,12,13,13,13,13,14,14,14,14, -15,15,16,12,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,12,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,12,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,13,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,12,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,13,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,13,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,13,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,13,10,10,10,11,11,12,12,12,13,13,13,13,13,13,13,10],t24l:[4,5,7,8,9,10,10,11,11,12,12,12,12,12,13,10,5,6,7,8, -9,10,10,11,11,11,12,12,12,12,12,10,7,7,8,9,9,10,10,11,11,11,11,12,12,12,13,9,8,8,9,9,10,10,10,11,11,11,11,12,12,12,12,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,13,9,10,9,10,10,10,10,11,11,11,11,12,12,12,12,12,9,10,10,10,10,10,11,11,11,11,12,12,12,12,12,13,9,11,10,10,10,11,11,11,11,12,12,12,12,12,13,13,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,10,12,11,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12, -12,12,12,12,12,12,12,12,13,13,13,13,13,10,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,10,13,12,12,12,12,12,12,13,13,13,13,13,13,13,13,10,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,6],t32l:[1,5,5,7,5,8,7,9,5,7,7,9,7,9,9,10],t33l:[4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]};w.ht=[new U(0,0,null,null),new U(2,0,w.t1HB,w.t1l),new U(3,0,w.t2HB,w.t2l),new U(3,0,w.t3HB,w.t3l),new U(0,0,null,null),new U(4,0,w.t5HB,w.t5l),new U(4,0,w.t6HB,w.t6l),new U(6,0,w.t7HB,w.t7l),new U(6,0,w.t8HB,w.t8l),new U(6,0,w.t9HB,w.t9l),new U(8, -0,w.t10HB,w.t10l),new U(8,0,w.t11HB,w.t11l),new U(8,0,w.t12HB,w.t12l),new U(16,0,w.t13HB,w.t13l),new U(0,0,null,w.t16_5l),new U(16,0,w.t15HB,w.t15l),new U(1,1,w.t16HB,w.t16l),new U(2,3,w.t16HB,w.t16l),new U(3,7,w.t16HB,w.t16l),new U(4,15,w.t16HB,w.t16l),new U(6,63,w.t16HB,w.t16l),new U(8,255,w.t16HB,w.t16l),new U(10,1023,w.t16HB,w.t16l),new U(13,8191,w.t16HB,w.t16l),new U(4,15,w.t24HB,w.t24l),new U(5,31,w.t24HB,w.t24l),new U(6,63,w.t24HB,w.t24l),new U(7,127,w.t24HB,w.t24l),new U(8,255,w.t24HB,w.t24l), -new U(9,511,w.t24HB,w.t24l),new U(11,2047,w.t24HB,w.t24l),new U(13,8191,w.t24HB,w.t24l),new U(0,0,w.t32HB,w.t32l),new U(0,0,w.t33HB,w.t33l)];w.largetbl=[65540,327685,458759,589832,655369,655370,720906,720907,786443,786444,786444,851980,851980,851980,917517,655370,262149,393222,524295,589832,655369,720906,720906,720907,786443,786443,786444,851980,917516,851980,917516,655370,458759,524295,589832,655369,720905,720906,786442,786443,851979,786443,851979,851980,851980,917516,917517,720905,589832,589832, -655369,720905,720906,786442,786442,786443,851979,851979,917515,917516,917516,983052,983052,786441,655369,655369,720905,720906,786442,786442,851978,851979,851979,917515,917516,917516,983052,983052,983053,720905,655370,655369,720906,720906,786442,851978,851979,917515,851979,917515,917516,983052,983052,983052,1048588,786441,720906,720906,720906,786442,851978,851979,851979,851979,917515,917516,917516,917516,983052,983052,1048589,786441,720907,720906,786442,786442,851979,851979,851979,917515,917516,983052, -983052,983052,983052,1114125,1114125,786442,720907,786443,786443,851979,851979,851979,917515,917515,983051,983052,983052,983052,1048588,1048589,1048589,786442,786443,786443,786443,851979,851979,917515,917515,983052,983052,983052,983052,1048588,983053,1048589,983053,851978,786444,851979,786443,851979,917515,917516,917516,917516,983052,1048588,1048588,1048589,1114125,1114125,1048589,786442,851980,851980,851979,851979,917515,917516,983052,1048588,1048588,1048588,1048588,1048589,1048589,983053,1048589, -851978,851980,917516,917516,917516,917516,983052,983052,983052,983052,1114124,1048589,1048589,1048589,1048589,1179661,851978,983052,917516,917516,917516,983052,983052,1048588,1048588,1048589,1179661,1114125,1114125,1114125,1245197,1114125,851978,917517,983052,851980,917516,1048588,1048588,983052,1048589,1048589,1114125,1179661,1114125,1245197,1114125,1048589,851978,655369,655369,655369,720905,720905,786441,786441,786441,851977,851977,851977,851978,851978,851978,851978,655366];w.table23=[65538,262147, -458759,262148,327684,458759,393222,458759,524296];w.table56=[65539,262148,458758,524296,262148,327684,524294,589831,458757,524294,589831,655368,524295,524295,589832,655369];w.bitrate_table=[[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1],[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],[0,8,16,24,32,40,48,56,64,-1,-1,-1,-1,-1,-1,-1]];w.samplerate_table=[[22050,24E3,16E3,-1],[44100,48E3,32E3,-1],[11025,12E3,8E3,-1]];w.scfsi_band=[0,6,11,16,21];ia.Q_MAX=257;ia.Q_MAX2=116;ia.LARGE_BITS=1E5; -ia.IXMAX_VAL=8206;var sa={};sa.SFBMAX=3*c.SBMAX_s;c.ENCDELAY=576;c.POSTDELAY=1152;c.MDCTDELAY=48;c.FFTOFFSET=224+c.MDCTDELAY;c.DECDELAY=528;c.SBLIMIT=32;c.CBANDS=64;c.SBPSY_l=21;c.SBPSY_s=12;c.SBMAX_l=22;c.SBMAX_s=13;c.PSFB21=6;c.PSFB12=6;c.BLKSIZE=1024;c.HBLKSIZE=c.BLKSIZE/2+1;c.BLKSIZE_s=256;c.HBLKSIZE_s=c.BLKSIZE_s/2+1;c.NORM_TYPE=0;c.START_TYPE=1;c.SHORT_TYPE=2;c.STOP_TYPE=3;c.MPG_MD_LR_LR=0;c.MPG_MD_LR_I=1;c.MPG_MD_MS_LR=2;c.MPG_MD_MS_I=3;c.fircoef=[-.1039435,-.1892065,-.0432472*5,-.155915,3.898045E-17, -.0467745*5,.50455,.756825,.187098*5];da.MFSIZE=3456+c.ENCDELAY-c.MDCTDELAY;da.MAX_HEADER_BUF=256;da.MAX_BITS_PER_CHANNEL=4095;da.MAX_BITS_PER_GRANULE=7680;da.BPC=320;Fa.RIFF=cc("RIFF");Fa.WAVE=cc("WAVE");Fa.fmt_=cc("fmt ");Fa.data=cc("data");Fa.readHeader=function(c){var k=new Fa,n=c.getUint32(0,!1);if(Fa.RIFF==n&&(c.getUint32(4,!0),Fa.WAVE==c.getUint32(8,!1)&&Fa.fmt_==c.getUint32(12,!1))){var u=c.getUint32(16,!0),w=20;switch(u){case 16:case 18:k.channels=c.getUint16(w+2,!0);k.sampleRate=c.getUint32(w+ -4,!0);break;default:throw"extended fmt chunk not implemented";}w+=u;u=Fa.data;for(var B=0;u!=n;){n=c.getUint32(w,!1);B=c.getUint32(w+4,!0);if(u==n)break;w+=B+8}k.dataLen=B;k.dataOffset=w+8;return k}};sa.SFBMAX=3*c.SBMAX_s;lamejs.Mp3Encoder=function(c,k,n){3!=arguments.length&&(console.error("WARN: Mp3Encoder(channels, samplerate, kbps) not specified"),c=1,k=44100,n=128);var u=new W,w=new Kc,B=new Y,G=new qa,f=new wc,b=new ia,v=new Ec,a=new zb,m=new mc,z=new Nc,e=new xc,l=new qb,d=new Lc,g=new Mc; -u.setModules(B,G,f,b,v,a,m,z,g);G.setModules(B,g,m,a);z.setModules(G,m);f.setModules(u);v.setModules(G,e,b,l);b.setModules(l,e,u.enc.psy);e.setModules(G);l.setModules(b);a.setModules(u,G,m);w.setModules(d,g);d.setModules(m,z,f);var q=u.lame_init();q.num_channels=c;q.in_samplerate=k;q.brate=n;q.mode=la.STEREO;q.quality=3;q.bWriteVbrTag=!1;q.disable_reservoir=!0;q.write_id3tag_automatic=!1;u.lame_init_params(q);var D=1152,p=0|1.25*D+7200,r=new Int8Array(p);this.encodeBuffer=function(a,b){1==c&&(b=a); -a.length>D&&(D=a.length,p=0|1.25*D+7200,r=new Int8Array(p));a=u.lame_encode_buffer(q,a,b,a.length,r,0,p);return new Int8Array(r.subarray(0,a))};this.flush=function(){var a=u.lame_encode_flush(q,r,0,p);return new Int8Array(r.subarray(0,a))}};lamejs.WavHeader=Fa}lamejs(); -export default lamejs; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.mjs deleted file mode 100644 index 76e0cf6c6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/lame.min.mjs +++ /dev/null @@ -1,308 +0,0 @@ -function lamejs(){function X(c){return new Int32Array(c)}function K(c){return new Float32Array(c)}function ca(c){if(1==c.length)return K(c[0]);var k=c[0];c=c.slice(1);for(var n=[],u=0;uf.sampleWindow-f.totsamp?f.sampleWindow-f.totsamp:d;if(lMAX_ORDER-l&&(g=MAX_ORDER-l)}else e=v+l,q=b,D=m+l,p=a;c(q,e,f.lstepbuf,f.lstep+f.totsamp,g,B[f.reqindex]);c(p,D,f.rstepbuf,f.rstep+f.totsamp,g,B[f.reqindex]);k(f.lstepbuf,f.lstep+f.totsamp,f.loutbuf,f.lout+f.totsamp,g,w[f.reqindex]);k(f.rstepbuf,f.rstep+f.totsamp,f.routbuf,f.rout+f.totsamp,g,w[f.reqindex]);e=f.lout+f.totsamp;q=f.loutbuf; -D=f.rout+f.totsamp;p=f.routbuf;for(var r=g%8;0!=r--;)f.lsum+=n(q[e++]),f.rsum+=n(p[D++]);for(r=g/8;0!=r--;)f.lsum+=n(q[e+0])+n(q[e+1])+n(q[e+2])+n(q[e+3])+n(q[e+4])+n(q[e+5])+n(q[e+6])+n(q[e+7]),e+=8,f.rsum+=n(p[D+0])+n(p[D+1])+n(p[D+2])+n(p[D+3])+n(p[D+4])+n(p[D+5])+n(p[D+6])+n(p[D+7]),D+=8;d-=g;l+=g;f.totsamp+=g;f.totsamp==f.sampleWindow&&(e=10*Y.STEPS_per_dB*Math.log10((f.lsum+f.rsum)/f.totsamp*.5+1E-37),e=0>=e?0:0|e,e>=f.A.length&&(e=f.A.length-1),f.A[e]++,f.lsum=f.rsum=0,T.arraycopy(f.loutbuf, -f.totsamp,f.loutbuf,0,MAX_ORDER),T.arraycopy(f.routbuf,f.totsamp,f.routbuf,0,MAX_ORDER),T.arraycopy(f.lstepbuf,f.totsamp,f.lstepbuf,0,MAX_ORDER),T.arraycopy(f.rstepbuf,f.totsamp,f.rstepbuf,0,MAX_ORDER),f.totsamp=0);if(f.totsamp>f.sampleWindow)return GAIN_ANALYSIS_ERROR}u=(m-=b[a])););b=64.82-a/Y.STEPS_per_dB}for(c=0;cf&&(f=0);9k&&(k+=64);b.exp_nspsytune|=k<<2}0!=a?b.quant_comp=f[m].quant_comp:0=c)return V(b,c,a);b.preset=0;return c}}function qb(){function u(a){this.bits=0|a}function k(a,d,p,b,e,c){d=.5946/d;for(a>>=1;0!=a--;)e[c++]=d>p[b++]? -0:1,e[c++]=d>p[b++]?0:1}function n(a,d,b,e,c,l){a>>=1;var h=a%2;for(a>>=1;0!=a--;){var p=b[e++]*d;var r=b[e++]*d;var t=0|p;var f=b[e++]*d;var g=0|r;var J=b[e++]*d;var D=0|f;p+=B.adj43[t];t=0|J;r+=B.adj43[g];c[l++]=0|p;f+=B.adj43[D];c[l++]=0|r;J+=B.adj43[t];c[l++]=0|f;c[l++]=0|J}0!=h&&(p=b[e++]*d,r=b[e++]*d,p+=B.adj43[0|p],r+=B.adj43[0|r],c[l++]=0|p,c[l++]=0|r)}function V(a,d,b,e){var p,c=d,h=p=0;do{var r=a[c++],l=a[c++];p>=16;p>a&&(p=a,d++);e.bits+=p;return d;case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:c=d;d=f[p-1];r=h=p=0;l=w.ht[d].xlen;var g=w.ht[d].hlen,D=w.ht[d+1].hlen,q=w.ht[d+2].hlen;do{var m=a[c+0]*l+a[c+1];c+=2;p+=g[m];h+=D[m];r+=q[m]}while(ch&&(p=h,a++);p>r&&(p=r,a=d+2);e.bits+=p;return a;default:if(p>ia.IXMAX_VAL)return e.bits=ia.LARGE_BITS,-1;p-=15;for(c=24;32>c&&!(w.ht[c].linmax>=p);c++);for(h=c-8;24>h&&!(w.ht[h].linmax>=p);h++);p=h;r=65536*w.ht[p].xlen+w.ht[c].xlen;h=0;do l=a[d++],g=a[d++],0!=l&&(14>=16;h>a&&(h=a,p=c);e.bits+=h;return p}}function E(a,d,p,b,e,l,h,g){for(var r=d.big_values,f=2;f=r)break;var t=e[f-2]+d.count1bits;if(p.part2_3_length<=t)break;t=new u(t);x=V(b,x,r,t);t=t.bits;p.part2_3_length<=t||(p.assign(d),p.part2_3_length=t,p.region0_count=l[f-2],p.region1_count=f-2-l[f-2],p.table_select[0]=h[f-2],p.table_select[1]=g[f-2],p.table_select[2]=x)}}var B=null;this.qupvt=null;this.setModules=function(a){B=this.qupvt=a};var ha=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1],[1,1],[1,1],[1,2],[2,2],[2,3],[2,3],[3,4],[3,4],[3,4],[4,5],[4,5],[4,6],[5,6],[5,6],[5,7],[6,7],[6,7]],f=[1,2, -5,7,7,10,10,13,13,13,13,13,13,13,13];this.noquant_count_bits=function(a,d,p){var b=d.l3_enc,e=Math.min(576,d.max_nonzero_coeff+2>>1<<1);null!=p&&(p.sfb_count1=0);for(;1h&&(f=h,d.count1table_select=1);d.count1bits=f;d.big_values=e;if(0==e)return f;d.block_type==c.SHORT_TYPE?(l=3*a.scalefac_band.s[3], -l>d.big_values&&(l=d.big_values),h=d.big_values):d.block_type==c.NORM_TYPE?(l=d.region0_count=a.bv_scf[e-2],h=d.region1_count=a.bv_scf[e-1],h=a.scalefac_band.l[l+h+2],l=a.scalefac_band.l[l+1],hh&&(l=h));l=Math.min(l,e);h=Math.min(h,e);0l)return ia.LARGE_BITS;l=B.IPOW20(e.global_gain);var h,f=0,g=0,r=0,D=0,m=0,q=p,v=0,C=d,I=0;var Q=null!=b&&e.global_gain==b.global_gain;var S=e.block_type==c.SHORT_TYPE?38:21;for(h=0;h<=S;h++){var u=-1;if(Q||e.block_type==c.NORM_TYPE)u= -e.global_gain-(e.scalefac[h]+(0!=e.preflag?B.pretab[h]:0)<e.max_nonzero_coeff&&(h=e.max_nonzero_coeff-f+1,na.fill(p,e.max_nonzero_coeff,576,0),Z=h,0>Z&&(Z=0),h=S+1);0==g&&0==r&&(q=p,v=m,C=d,I=D);null!=b&&0=b.sfb_count1&&0=b.step[h]?(0!=g&&(n(g,l,C,I,q,v),g=0,q=p,v=m,C=d,I=D),r+=Z):(0!=r&&(k(r,l,C,I,q,v),r=0,q= -p,v=m,C=d,I=D),g+=Z);if(0>=Z){0!=r&&(k(r,l,C,I,q,v),r=0);0!=g&&(n(g,l,C,I,q,v),g=0);break}}h<=S&&(m+=e.width[h],D+=e.width[h],f+=e.width[h])}0!=g&&n(g,l,C,I,q,v);0!=r&&k(r,l,C,I,q,v);if(0!=(a.substep_shaping&2))for(l=0,S=.634521682242439/B.IPOW20(e.global_gain+e.scalefac_scale),f=0;f=S?p[g]:0;return this.noquant_count_bits(a,e,b)};this.best_huffman_divide=function(a,d){var e=new rb,b=d.l3_enc,l=X(23),f=X(23), -h=X(23),g=X(23);if(d.block_type!=c.SHORT_TYPE||1!=a.mode_gr){e.assign(d);if(d.block_type==c.NORM_TYPE){for(var y=d.big_values,m=0;22>=m;m++)l[m]=ia.LARGE_BITS;for(m=0;16>m;m++){var D=a.scalefac_band.l[m+1];if(D>=y)break;var q=0,k=new u(q),v=V(b,0,D,k);q=k.bits;for(var C=0;8>C;C++){var I=a.scalefac_band.l[m+C+2];if(I>=y)break;k=q;k=new u(k);I=V(b,D,I,k);k=k.bits;l[m+C]>k&&(l[m+C]=k,f[m+C]=m,h[m+C]=v,g[m+C]=I)}}E(a,e,d,b,l,f,h,g)}y=e.big_values;if(!(0==y||1<(b[y-2]|b[y-1])||(y=d.count1+2,576e.big_values;y-=4)q=2*(2*(2*b[y-4]+b[y-3])+b[y-2])+b[y-1],m+=w.t32l[q],D+=w.t33l[q];e.big_values=y;e.count1table_select=0;m>D&&(m=D,e.count1table_select=1);e.count1bits=m;e.block_type==c.NORM_TYPE?E(a,e,d,b,l,f,h,g):(e.part2_3_length=m,m=a.scalefac_band.l[8],m>y&&(m=y),0m&&(a=new u(e.part2_3_length),e.table_select[1]=V(b,m,y,a),e.part2_3_length=a.bits),d.part2_3_length>e.part2_3_length&&d.assign(e))}}}; -var b=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],v=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],a=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],m=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];qb.slen1_tab=a;qb.slen2_tab=m;this.best_scalefac_store=function(d,e,p,l){var f=l.tt[e][p],g,h,r=0;for(g=h=0;gy&&0==f.l3_enc[y+h];y++);0==y&&(f.scalefac[g]=r=-2)}if(0==f.scalefac_scale&&0==f.preflag){for(g=h=0;g>=1);f.scalefac_scale=r=1}}if(0==f.preflag&&f.block_type!=c.SHORT_TYPE&&2==d.mode_gr){for(g=11;gg;g++)l.scfsi[p][g]=0;if(2==d.mode_gr&&1==e&&l.tt[0][p].block_type!=c.SHORT_TYPE&&l.tt[1][p].block_type!=c.SHORT_TYPE){e=l.tt[1][p];h=l.tt[0][p];for(r=0;rg;g++)-1!=e.scalefac[g]&&(l++,pr;r++)pg&&(e.part2_length=g,e.scalefac_compress=r));r=0}for(g=0;gd;d++)gm[d]&&(a.part2_length=m[d],a.scalefac_compress=d);return a.part2_length==ia.LARGE_BITS};var d=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(a,e){var b,f,l,m,h=X(4),x=e.scalefac;a=0!=e.preflag?2:0;for(l=0;4>l;l++)h[l]=0;if(e.block_type==c.SHORT_TYPE){var y=1;var k=B.nr_of_sfb_block[a][y]; -for(b=m=0;4>b;b++){var q=k[b]/3;for(l=0;lf;f++)x[3*m+f]>h[b]&&(h[b]=x[3*m+f])}}else for(y=0,k=B.nr_of_sfb_block[a][y],b=m=0;4>b;b++)for(q=k[b],l=0;lh[b]&&(h[b]=x[m]);q=!1;for(b=0;4>b;b++)h[b]>d[a][b]&&(q=!0);if(!q){e.sfb_partition_table=B.nr_of_sfb_block[a][y];for(b=0;4>b;b++)e.slen[b]=g[h[b]];y=e.slen[0];b=e.slen[1];h=e.slen[2];f=e.slen[3];switch(a){case 0:e.scalefac_compress=(5*y+b<<4)+(h<<2)+f;break;case 1:e.scalefac_compress=400+(5*y+b<<2)+h;break;case 2:e.scalefac_compress= -500+3*y+b;break;default:T.err.printf("intensity stereo not implemented yet\n")}}if(!q)for(b=e.part2_length=0;4>b;b++)e.part2_length+=e.slen[b]*e.sfb_partition_table[b];return q};var g=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(a){for(var d=2;576>=d;d+=2){for(var e=0,b;a.scalefac_band.l[++e]d;)b--;0>b&&(b=ha[e][0]);a.bv_scf[d-2]=b;for(b=ha[e][1];a.scalefac_band.l[b+a.bv_scf[d-2]+2]>d;)b--;0>b&&(b=ha[e][1]);a.bv_scf[d-1]=b}}}function xc(){var c; -this.setModules=function(k){c=k};this.ResvFrameBegin=function(k,n){var u=k.internal_flags,E=u.l3_side,B=c.getframebits(k);n.bits=(B-8*u.sideinfo_len)/u.mode_gr;var w=2048*u.mode_gr-8;if(320w&&(u.ResvMax=w);if(0>u.ResvMax||k.disable_reservoir)u.ResvMax=0;k=n.bits*u.mode_gr+Math.min(u.ResvSize,u.ResvMax);k>f&&(k=f);E.resvDrain_pre=0;null!=u.pinfo&& -(u.pinfo.mean_bits=n.bits/2,u.pinfo.resvsize=u.ResvSize);return k};this.ResvMaxBits=function(c,n,u,E){var k=c.internal_flags,w=k.ResvSize,f=k.ResvMax;0!=E&&(w+=n);0!=(k.substep_shaping&1)&&(f*=.9);u.bits=n;10*w>9*f?(E=w-9*f/10,u.bits+=E,k.substep_shaping|=128):(E=0,k.substep_shaping&=127,c.disable_reservoir||0!=(k.substep_shaping&1)||(u.bits-=.1*n));c=w<6*k.ResvMax/10?w:6*k.ResvMax/10;c-=E;0>c&&(c=0);return c};this.ResvAdjust=function(c,n){c.ResvSize-=n.part2_3_length+n.part2_length};this.ResvFrameEnd= -function(c,n){var k,u=c.l3_side;c.ResvSize+=n*c.mode_gr;n=0;u.resvDrain_post=0;u.resvDrain_pre=0;0!=(k=c.ResvSize%8)&&(n+=k);k=c.ResvSize-n-c.ResvMax;0>b<> -3]|=d>>e<<8-(b&7)-h;b+=h}a.header[a.h_ptr].ptr=b}function V(a,d){a<<=8;for(var e=0;8>e;e++)a<<=1,d<<=1,0!=((d^a)&65536)&&(d^=32773);return d}function E(a,d){var e=w.ht[d.count1table_select+32],b,h=0,c=d.big_values,g=d.big_values;for(b=(d.count1-d.big_values)/4;0d.xr[g+0]&&l++);p=d.l3_enc[c+1];0!=p&&(f+=4,l*=2,0>d.xr[g+1]&&l++);p=d.l3_enc[c+2];0!=p&&(f+=2,l*=2,0>d.xr[g+2]&&l++);p=d.l3_enc[c+3];0!=p&&(f++,l*=2,0>d.xr[g+3]&&l++);c+=4;g+=4;u(a,l+e.table[f], -e.hlen[f]);h+=e.hlen[f]}return h}function B(a,d,e,b,h){var c=w.ht[d],g=0;if(0==d)return g;for(;eh.xr[e]&&m++,l--);15h.xr[e+1]&&m++,l--);C=C*r+k;f-=l;l+=c.hlen[C];u(a,c.table[C],l);u(a,m,f);g+=l+f}return g}function K(a,d){var e=3*a.scalefac_band.s[3];e>d.big_values&&(e=d.big_values);var b=B(a,d.table_select[0],0,e,d);return b+=B(a, -d.table_select[1],e,d.big_values,d)}function f(a,d){var e=d.big_values;var b=d.region0_count+1;var h=a.scalefac_band.l[b];b+=d.region1_count+1;var c=a.scalefac_band.l[b];h>e&&(h=e);c>e&&(c=e);b=B(a,d.table_select[0],0,h,d);b+=B(a,d.table_select[1],h,c,d);return b+=B(a,d.table_select[2],c,e,d)}function b(){this.total=0}function v(d,e){var b=d.internal_flags;var c=b.w_ptr;var h=b.h_ptr-1;-1==h&&(h=da.MAX_HEADER_BUF-1);var l=b.header[h].write_timing-g;e.total=l;if(0<=l){var f=1+h-c;hl&&T.err.println("strange error flushing buffer ... \n");return l}var a=this,m=null,z=null,e=null,l=null;this.setModules=function(a,d,b,c){m=a;z=d;e=b;l=c};var d=null,g=0,q=0,D=0;this.getframebits=function(a){var d=a.internal_flags;return 8*(0|72E3*(a.version+1)*(0!=d.bitrate_index?w.bitrate_table[a.version][d.bitrate_index]:a.brate)/a.out_samplerate+d.padding)};this.CRC_writeheader= -function(a,d){var e=V(d[2]&255,65535);e=V(d[3]&255,e);for(var b=6;b>8);d[5]=byte(e&255)};this.flush_bitstream=function(a){var d=a.internal_flags,e;var c=d.l3_side;0>(e=v(a,new b))||(k(a,e),d.ResvSize=0,c.main_data_begin=0,d.findReplayGain&&(c=m.GetTitleGain(d.rgdata),d.RadioGain=Math.floor(10*c+.5)|0),d.findPeakSample&&(d.noclipGainChange=Math.ceil(200*Math.log10(d.PeakSample/32767))|0,0>h<a.out_samplerate?n(h,4094,12):n(h,4095,12);n(h,a.version,1);n(h,1,2);n(h,a.error_protection?0:1,1);n(h,h.bitrate_index,4);n(h,h.samplerate_index,2);n(h,h.padding,1);n(h,a.extension,1);n(h,a.mode.ordinal(),2);n(h,h.mode_ext,2);n(h,a.copyright,1);n(h,a.original,1);n(h,a.emphasis,2);a.error_protection&&n(h,0,16);if(1==a.version){n(h,m.main_data_begin,9);2==h.channels_out?n(h,m.private_bits,3):n(h,m.private_bits,5);for(y=0;yp;p++)n(h,m.scfsi[y][p], -1);for(p=0;2>p;p++)for(y=0;ym;m++)for(y=0;yQ;Q++){var w=C.sfb_partition_table[Q]/3,Z=C.slen[Q];for(I=0;IQ;Q++)for(w=C.sfb_partition_table[Q],Z=C.slen[Q],I=0;I ResvSize");8*e.main_data_begin!=d.ResvSize&&(T.err.printf("bit reservoir error: \nl3_side.main_data_begin: %d \nResvoir size: %d \nresv drain (post) %d \nresv drain (pre) %d \nheader and sideinfo: %d \ndata bits: %d \ntotal bits: %d (remainder: %d) \nbitsperframe: %d \n", -8*e.main_data_begin,d.ResvSize,e.resvDrain_post,e.resvDrain_pre,8*d.sideinfo_len,h-e.resvDrain_post-8*d.sideinfo_len,h,h%8,l),T.err.println("This is a fatal error. It has several possible causes:"),T.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),T.err.println(" 9%% Your system is overclocked"),T.err.println(" 1%% bug in LAME encoding library"),d.ResvSize=8*e.main_data_begin);if(1E9=g)return 0;if(0!=c&&g>c)return-1;T.arraycopy(d,0,e,b,g);q=-1;D=0;if(0!=h&&(c=X(1),c[0]=a.nMusicCRC,l.updateMusicCRC(c,e,b,g),a.nMusicCRC=c[0],0a.PeakSample?a.PeakSample=c[0][p]:-c[0][p]>a.PeakSample&&(a.PeakSample=-c[0][p]);if(1< -a.channels_out)for(p=0;pa.PeakSample?a.PeakSample=c[1][p]:-c[1][p]>a.PeakSample&&(a.PeakSample=-c[1][p])}if(a.findReplayGain&&m.AnalyzeSamples(a.rgdata,c[0],0,c[1],0,f,a.channels_out)==Y.GAIN_ANALYSIS_ERROR)return-6}}return g};this.init_bit_stream_w=function(a){d=new Int8Array(W.LAME_MAXMP3BUFFER);a.h_ptr=a.w_ptr=0;a.header[a.h_ptr].write_timing=0;q=-1;g=D=0}}function zb(){function c(a,b){var d=a[b+0]&255;d=d<<8|a[b+1]&255;d=d<<8|a[b+2]&255;return d=d<<8|a[b+3]&255}function k(a,b,d){a[b+ -0]=d>>24&255;a[b+1]=d>>16&255;a[b+2]=d>>8&255;a[b+3]=d&255}function n(a,b,d){a[b+0]=d>>8&255;a[b+1]=d&255}function V(a,b,d){return 255&(a<a.out_samplerate?0:1);b[1]=V(b[1],1,a.version);b[1]=V(b[1],2,1);b[1]=V(b[1],1,a.error_protection?0:1);b[2]=V(b[2],4,d.bitrate_index);b[2]=V(b[2],2,d.samplerate_index);b[2]=V(b[2],1,0);b[2]=V(b[2],1,a.extension);b[3]=V(b[3],2,a.mode.ordinal());b[3]=V(b[3], -2,d.mode_ext);b[3]=V(b[3],1,a.copyright);b[3]=V(b[3],1,a.original);b[3]=V(b[3],2,a.emphasis);b[0]=255;d=b[1]&241;var e=1==a.version?128:16E3>a.out_samplerate?32:64;a.VBR==G.vbr_off&&(e=a.brate);e=a.free_format?0:255&16*K.BitrateIndex(e,a.version,a.out_samplerate);b[1]=1==a.version?255&(d|10):255&(d|2);d=b[2]&13;b[2]=255&(e|d)}function B(a,b){return b=b>>8^z[(b^a)&255]}var K,f,b;this.setModules=function(a,c,d){K=a;f=c;b=d};var v=zb.NUMTOCENTRIES,a=zb.MAXFRAMESIZE,m=v+4+4+4+4+4+9+1+1+8+1+1+3+1+1+2+ -4+2+2,z=[0,49345,49537,320,49921,960,640,49729,50689,1728,1920,51009,1280,50625,50305,1088,52225,3264,3456,52545,3840,53185,52865,3648,2560,51905,52097,2880,51457,2496,2176,51265,55297,6336,6528,55617,6912,56257,55937,6720,7680,57025,57217,8E3,56577,7616,7296,56385,5120,54465,54657,5440,55041,6080,5760,54849,53761,4800,4992,54081,4352,53697,53377,4160,61441,12480,12672,61761,13056,62401,62081,12864,13824,63169,63361,14144,62721,13760,13440,62529,15360,64705,64897,15680,65281,16320,16E3,65089,64001, -15040,15232,64321,14592,63937,63617,14400,10240,59585,59777,10560,60161,11200,10880,59969,60929,11968,12160,61249,11520,60865,60545,11328,58369,9408,9600,58689,9984,59329,59009,9792,8704,58049,58241,9024,57601,8640,8320,57409,40961,24768,24960,41281,25344,41921,41601,25152,26112,42689,42881,26432,42241,26048,25728,42049,27648,44225,44417,27968,44801,28608,28288,44609,43521,27328,27520,43841,26880,43457,43137,26688,30720,47297,47489,31040,47873,31680,31360,47681,48641,32448,32640,48961,32E3,48577, -48257,31808,46081,29888,30080,46401,30464,47041,46721,30272,29184,45761,45953,29504,45313,29120,28800,45121,20480,37057,37249,20800,37633,21440,21120,37441,38401,22208,22400,38721,21760,38337,38017,21568,39937,23744,23936,40257,24320,40897,40577,24128,23040,39617,39809,23360,39169,22976,22656,38977,34817,18624,18816,35137,19200,35777,35457,19008,19968,36545,36737,20288,36097,19904,19584,35905,17408,33985,34177,17728,34561,18368,18048,34369,33281,17088,17280,33601,16640,33217,32897,16448];this.addVbrFrame= -function(a){var b=a.internal_flags;var d=b.VBR_seek_table;a=w.bitrate_table[a.version][b.bitrate_index];d.nVbrNumFrames++;d.sum+=a;d.seen++;if(!(d.seen>3&1,f=a[d+2]>>2&3,m=a[d+3]>>6&3,p=a[d+2]>>4&15;p=w.bitrate_table[e][p];b.samprate=14==a[d+1]>>4?w.samplerate_table[2][f]:w.samplerate_table[e][f]; -f=d=0!=e?3!=m?d+36:d+21:3!=m?d+21:d+13;if(!(new String(a,f,4(),null)).equals("Xing")&&!(new String(a,f,4(),null)).equals("Info"))return null;d+=4;b.hId=e;f=b.flags=c(a,d);d+=4;0!=(f&1)&&(b.frames=c(a,d),d+=4);0!=(f&2)&&(b.bytes=c(a,d),d+=4);if(0!=(f&4)){if(null!=b.toc)for(m=0;m>4;p=(a[d+1]&15)<<8;p+=a[d+2]&255;if(0>e||3E3p||3E3b.out_samplerate?32:64;b.VBR==G.vbr_off&&(d=b.brate);d=72E3*(b.version+1)*d/b.out_samplerate;var c=e.sideinfo_len+m;e.VBR_seek_table.TotalFrameSize=d;if(da)b.bWriteVbrTag=!1;else for(e.VBR_seek_table.nVbrNumFrames=0,e.VBR_seek_table.nBytesWritten=0,e.VBR_seek_table.sum=0,e.VBR_seek_table.seen=0,e.VBR_seek_table.want=1,e.VBR_seek_table.pos=0,null==e.VBR_seek_table.bag&&(e.VBR_seek_table.bag= -new int[400],e.VBR_seek_table.size=400),d=new Int8Array(a),E(b,d),e=e.VBR_seek_table.TotalFrameSize,c=0;c=d.VBR_seek_table.pos)return 0;if(c.length=m.pos))for(l=1;lm.pos-1&&(p=m.pos-1);p=0|256*m.bag[p]/m.sum;255t.RadioGain&&(t.RadioGain=-510),w=11264,w=0<=t.RadioGain?w|t.RadioGain:w|512|-t.RadioGain);t.findPeakSample&&(z=Math.abs(0|t.PeakSample/32767*Math.pow(2,23)+.5));-1!=ma&&(0h&&(h=0);switch(a.mode){case MONO:Q=0;break;case STEREO:Q=1;break; -case DUAL_CHANNEL:Q=2;break;case JOINT_STEREO:Q=a.force_ms?4:3;break;default:Q=7}C=32E3>=a.in_samplerate?0:48E3==a.in_samplerate?2:48E3a.scale_right||a.disable_reservoir&&320>a.brate||a.noATH||a.ATHonly||0==L||32E3>=a.in_samplerate)F=1;O=O+(Q<<2)+(F<<5)+(C<<6);t=t.nMusicCRC;k(c,e+p,h);p+=4;for(h=0;9>h;h++)c[e+p+h]= -255&x.charAt(h);p+=9;c[e+p]=255&y;p++;c[e+p]=255&A;p++;k(c,e+p,z);p+=4;n(c,e+p,w);p+=2;n(c,e+p,0);p+=2;c[e+p]=255&I;p++;c[e+p]=255<=V?255:255&V;p++;c[e+p]=255&r>>4;c[e+p+1]=255&(r<<4)+(u>>8);c[e+p+2]=255&u;p+=3;c[e+p]=255&O;p++;c[e+p++]=0;n(c,e+p,a.preset);p+=2;k(c,e+p,m);p+=4;n(c,e+p,t);p+=2;for(a=0;a=b.internal_flags.VBR_seek_table.pos)return-1;c.seek(c.length());if(0==c.length())return-1;c.seek(0); -var d=new Int8Array(10);c.readFully(d);d=(new String(d,"ISO-8859-1")).startsWith("ID3")?0:((d[6]&127)<<21|(d[7]&127)<<14|(d[8]&127)<<7|d[9]&127)+d.length;c.seek(d);d=new Int8Array(a);b=getLameTagFrame(b,d);if(b>d.length)return-1;if(1>b)return 0;c.write(d,0,b);return 0}}function U(c,k,n,w){this.xlen=c;this.linmax=k;this.table=n;this.hlen=w}function xa(c){this.bits=c}function yc(){this.setModules=function(c,k){}}function sb(){this.bits=this.over_SSD=this.over_count=this.max_noise=this.tot_noise=this.over_noise= -0}function zc(){this.scale_right=this.scale_left=this.scale=this.out_samplerate=this.in_samplerate=this.num_channels=this.num_samples=this.class_id=0;this.decode_only=this.bWriteVbrTag=this.analysis=!1;this.quality=0;this.mode=la.STEREO;this.write_id3tag_automatic=this.decode_on_the_fly=this.findReplayGain=this.free_format=this.force_ms=!1;this.error_protection=this.emphasis=this.extension=this.original=this.copyright=this.compression_ratio=this.brate=0;this.disable_reservoir=this.strict_ISO=!1;this.quant_comp_short= -this.quant_comp=0;this.experimentalY=!1;this.preset=this.exp_nspsytune=this.experimentalZ=0;this.VBR=null;this.maskingadjust_short=this.maskingadjust=this.highpasswidth=this.lowpasswidth=this.highpassfreq=this.lowpassfreq=this.VBR_hard_min=this.VBR_max_bitrate_kbps=this.VBR_min_bitrate_kbps=this.VBR_mean_bitrate_kbps=this.VBR_q=this.VBR_q_frac=0;this.noATH=this.ATHshort=this.ATHonly=!1;this.athaa_sensitivity=this.athaa_loudapprox=this.athaa_type=this.ATHlower=this.ATHcurve=this.ATHtype=0;this.short_blocks= -null;this.useTemporal=!1;this.msfix=this.interChRatio=0;this.tune=!1;this.lame_allocated_gfp=this.frameNum=this.framesize=this.encoder_padding=this.encoder_delay=this.version=this.tune_value_a=0;this.internal_flags=null}function Ac(){this.linprebuf=K(2*Y.MAX_ORDER);this.linpre=0;this.lstepbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER);this.lstep=0;this.loutbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER);this.lout=0;this.rinprebuf=K(2*Y.MAX_ORDER);this.rinpre=0;this.rstepbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER); -this.rstep=0;this.routbuf=K(Y.MAX_SAMPLES_PER_WINDOW+Y.MAX_ORDER);this.first=this.freqindex=this.rsum=this.lsum=this.totsamp=this.sampleWindow=this.rout=0;this.A=X(0|Y.STEPS_per_dB*Y.MAX_dB);this.B=X(0|Y.STEPS_per_dB*Y.MAX_dB)}function Bc(u){this.quantize=u;this.iteration_loop=function(k,n,u,w){var B=k.internal_flags,E=K(sa.SFBMAX),f=K(576),b=X(2),v=B.l3_side;var a=new xa(0);this.quantize.rv.ResvFrameBegin(k,a);a=a.bits;for(var m=0;m>2&63;32<=d&&(d-=64);g=Math.pow(10,d/4/10);d=b.exp_nspsytune>>8&63;32<=d&&(d-=64);q=Math.pow(10,d/4/10);d=b.exp_nspsytune>>14&63;32<=d&&(d-=64);k= -Math.pow(10,d/4/10);d=b.exp_nspsytune>>20&63;32<=d&&(d-=64);b=k*Math.pow(10,d/4/10);for(d=0;d=d?g:13>=d?q:20>=d?k:b,e.nsPsy.longfact[d]=p;for(d=0;d=d?g:10>=d?q:11>=d?k:b,e.nsPsy.shortfact[d]=p}};this.on_pe=function(a,b,d,c,f,m){var e=a.internal_flags,g=0,l=X(2),q;g=new xa(g);a=w.ResvMaxBits(a,c,g,m);g=g.bits;var h=g+a;h>da.MAX_BITS_PER_GRANULE&&(h=da.MAX_BITS_PER_GRANULE);for(q=m=0;q3*c/4&&(l[q]=3*c/4),0>l[q]&&(l[q]=0),l[q]+d[q]>da.MAX_BITS_PER_CHANNEL&&(l[q]=Math.max(0,da.MAX_BITS_PER_CHANNEL-d[q])),m+=l[q];if(m>a)for(q=0;qda.MAX_BITS_PER_GRANULE)for(q=0;qb&&(b=0);.5da.MAX_BITS_PER_CHANNEL- -a[0]&&(b=da.MAX_BITS_PER_CHANNEL-a[0]);0>b&&(b=0);125<=a[1]&&(125c&&(a[0]=c*a[0]/b,a[1]=c*a[1]/b)};this.athAdjust=function(a,b,d){b=aa.FAST_LOG10_X(b,10);a*=a;var c=0;b-=d;1E-20c&&(c=0);return Math.pow(10,.1*(b*c+(d+90.30873362-94.82444863)))};this.calc_xmin=function(a,b,d,f){var e=0,g=a.internal_flags,m,l=0,k=0,v=g.ATH,h=d.xr,x=a.VBR==G.vbr_mtrh?1:0,y=g.masking_lower;if(a.VBR== -G.vbr_mtrh||a.VBR==G.vbr_mt)y=1;for(m=0;m>1;var C=0;do{var I=h[l]*h[l];C+=I;B+=IA&&k++;m==c.SBPSY_l&&(u=A*g.nsPsy.longfact[m],BS;S++){C=0;z=n>>1;u=w/n;B=2.220446049250313E-16;do I=h[l]*h[l],C+=I,B+=Iw&&k++;Q==c.SBPSY_s&&(u=w*g.nsPsy.shortfact[Q],Bf[e-3+1]&&(f[e-3+1]+=(f[e-3]-f[e-3+1])*g.decay),f[e-3+1]>f[e-3+2]&&(f[e-3+2]+=(f[e-3+1]-f[e-3+2])*g.decay))}return k};this.calc_noise_core=function(a,b,d,c){var e=0,f=b.s,g=a.l3_enc;if(f>a.count1)for(;0!=d--;){var l=a.xr[f];f++;e+=l*l;l=a.xr[f];f++;e+=l*l}else if(f>a.big_values){var k=K(2);k[0]=0;for(k[1]=c;0!=d--;)l=Math.abs(a.xr[f])-k[g[f]],f++,e+=l*l,l=Math.abs(a.xr[f])- -k[g[f]],f++,e+=l*l}else for(;0!=d--;)l=Math.abs(a.xr[f])-m[g[f]]*c,f++,e+=l*l,l=Math.abs(a.xr[f])-m[g[f]]*c,f++,e+=l*l;b.s=f;return e};this.calc_noise=function(a,c,d,f,m){var e=0,g=0,l,q=0,u=0,h=0,x=-20,y=0,A=a.scalefac,n=0;for(l=f.over_SSD=0;l>1;y+a.width[l]> -a.max_nonzero_coeff&&(w=a.max_nonzero_coeff-y+1,w=0>1:0);y=new k(y);z=this.calc_noise_core(a,y,w,z);y=y.s;null!=m&&(m.step[l]=B,m.noise[l]=z);z=d[e++]=z/c[g++];z=aa.FAST_LOG10(Math.max(z,1E-20));null!=m&&(m.noise_log[l]=z)}null!=m&&(m.global_gain=a.global_gain);h+=z;0I;I++){k=0;for(C=B;Cf;++f){var a=c.tt[b][0].xr[f],m=c.tt[b][1].xr[f];c.tt[b][0].xr[f]=.5*(a+m)*aa.SQRT2; -c.tt[b][1].xr[f]=.5*(a-m)*aa.SQRT2}};this.init_xrpow=function(c,b,k){var a=0|b.max_nonzero_coeff;b.xrpow_max=0;na.fill(k,a,576,0);for(var f,v=f=0;v<=a;++v){var e=Math.abs(b.xr[v]);f+=e;k[v]=Math.sqrt(e*Math.sqrt(e));k[v]>b.xrpow_max&&(b.xrpow_max=k[v])}if(1E-20l;l++)for(var d=n;d=n;e--)if(Math.abs(a[e])l;l++)for(b=!1,m=c.PSFB12-1;0<=m&&!b;m--)for(n=3*f.scalefac_band.s[12]+(f.scalefac_band.s[13]-f.scalefac_band.s[12])*l+(f.scalefac_band.psfb12[m]-f.scalefac_band.psfb12[0]),e=n+(f.scalefac_band.psfb12[m+1]-f.scalefac_band.psfb12[m]),d=E.athAdjust(k.adjust,k.psfb12[m],k.floor),1E-12=n;e--)if(Math.abs(a[e])n;n++){var e=0;0!=b.l3_enc[n]&&(e=Math.abs(b.xr[n]));a[n]=e}n=0;e=8;b.block_type==c.SHORT_TYPE&&(e=6);do{var l,d,g=b.width[e];n+=g;if(!(1<=m[e]||(na.sort(a,n-g,g),qa.EQ(a[n-1],0)))){var q=(1-m[e])*k[e];var v=l=0;do{for(d= -1;v+dh?(z==u.BINSEARCH_DOWN&&(y=!0),y&&(x/=2),z=u.BINSEARCH_UP,H=x):(z==u.BINSEARCH_UP&&(y=!0),y&&(x/=2),z=u.BINSEARCH_DOWN,H=-x);b.global_gain+=H;0>b.global_gain&&(b.global_gain=0,y=!0);255h&&255>b.global_gain;)b.global_gain++,H=ha.count_bits(e,a,b,null);e.CurrentStep[m]=4<=A-b.global_gain?4:2;e.OldValue[m]=b.global_gain;b.part2_3_length=H;if(0==e.noise_shaping)return 100;E.calc_noise(b,n,g,q,v);q.bits=b.part2_3_length; -l.assign(b);m=0;for(T.arraycopy(a,0,d,0,576);!r;){do{h=new sb;y=255;x=0!=(e.substep_shaping&2)?20:3;if(e.sfb21_extra){if(1L;L++)C[Z+L]*=Q,C[Z+L]>O.xrpow_max&&(O.xrpow_max=C[Z+L]);if(2==I.noise_shaping_amp)break}}if(Q=k(A))A=!1;else if(Q=2==z.mode_gr?ha.scale_bitcount(A):ha.scale_bitcount_lsf(z,A)){if(1I;I++)H[O+I]*=1.2968395546510096,H[O+I]>Q.xrpow_max&&(Q.xrpow_max=H[O+I]);Q.scalefac[F]=C>>1}Q.preflag=0;Q.scalefac_scale=1;Q=!1}else if(A.block_type==c.SHORT_TYPE&&0I;I++){ma=S=0;for(H=O.sfb_lmax+I;HS&&8>ma)){if(7<=O.subblock_gain[I]){H= -!0;break b}O.subblock_gain[I]++;S=Q.scalefac_band.l[O.sfb_lmax];for(H=O.sfb_lmax+I;H>O.scalefac_scale,0<=Z)C[H]=Z,S+=3*ma;else{C[H]=0;Z=E.IPOW20(210+(Z<L;L++)F[S+L]*=Z,F[S+L]>O.xrpow_max&&(O.xrpow_max=F[S+L]);S+=ma*(3-I-1)}Z=E.IPOW20(202);S+=O.width[H]*(I+1);for(L=-O.width[H];0>L;L++)F[S+L]*=Z,F[S+L]>O.xrpow_max&&(O.xrpow_max=F[S+L])}}H=!1}Q=H||k(A)}Q||(Q=2==z.mode_gr?ha.scale_bitcount(A):ha.scale_bitcount_lsf(z, -A));A=!Q}else A=!0;if(!A)break;0!=l.scalefac_scale&&(y=254);A=B-l.part2_length;if(0>=A)break;for(;(l.part2_3_length=ha.count_bits(e,a,l,v))>A&&l.global_gain<=y;)l.global_gain++;if(l.global_gain>y)break;if(0==q.over_count){for(;(l.part2_3_length=ha.count_bits(e,a,l,v))>p&&l.global_gain<=y;)l.global_gain++;if(l.global_gain>y)break}E.calc_noise(l,n,g,h,v);h.bits=l.part2_3_length;z=b.block_type!=c.SHORT_TYPE?f.quant_comp:f.quant_comp_short;y=q;A=h;Q=l;H=g;switch(z){default:case 9:0A.max_noise&&10*A.max_noise+A.bits<=10*y.max_noise+y.bits;break;case 0:z=A.over_count=A.max_noise&&.2=A.max_noise&&0>y.max_noise&&y.max_noise>A.max_noise-.2&&A.tot_noise=A.max_noise&&0A.max_noise-.2&&A.tot_noiseA.max_noise-.1&&A.tot_noise+A.over_noiseA.max_noise-.15&&A.tot_noise+A.over_noise+A.over_noisex&&0== -q.over_count)break;if(3==e.noise_shaping_amp&&t&&30l.global_gain+l.scalefac_scale);3==e.noise_shaping_amp?t?r=!0:(l.assign(b),T.arraycopy(d,0,a,0,576),m=0,w=l.global_gain,t=!0):r=!0}f.VBR==G.vbr_rh||f.VBR==G.vbr_mtrh?T.arraycopy(d,0,a,0,576):0!=(e.substep_shaping&1)&&trancate_smallspectrums(e,b,n,a);return q.over_count};this.iteration_finish_one=function(c,b,k){var a=c.l3_side,f=a.tt[b][k];ha.best_scalefac_store(c,b,k,a);1== -c.use_best_huffman&&ha.best_huffman_divide(c,f);w.ResvAdjust(c,f)};this.VBR_encode_granule=function(c,b,k,a,m,n,e){var f=c.internal_flags,d=new rb,g=K(576),q=e,v=(e+n)/2,p=0,r=f.sfb21_extra;na.fill(d.l3_enc,0);do{f.sfb21_extra=v>q-42?!1:r;var t=outer_loop(c,b,k,a,m,v);0>=t?(p=1,e=b.part2_3_length,d.assign(b),T.arraycopy(a,0,g,0,576),e-=32,t=e-n,v=(e+n)/2):(n=v+32,t=e-n,v=(e+n)/2,0!=p&&(p=2,b.assign(d),T.arraycopy(g,0,a,0,576)))}while(12n[g.VBR_max_bitrate]&& -(l[r][t]*=n[g.VBR_max_bitrate],l[r][t]/=v),e[r][t]>l[r][t]&&(e[r][t]=l[r][t]);return q};this.bitpressure_strategy=function(f,b,k,a){for(var m=0;mq&&(n[m][v]*=q,n[m][v]/=g);return l};this.calc_target_bits=function(f,b,k,a,m,u){var e=f.internal_flags,l=e.l3_side;e.bitrate_index=e.VBR_max_bitrate;var d=new xa(0);u[0]=w.ResvFrameBegin(f,d);e.bitrate_index=1;d=n.getframebits(f)-8*e.sideinfo_len;m[0]=d/(e.mode_gr*e.channels_out);d=f.VBR_mean_bitrate_kbps*f.framesize*1E3;0!=(e.substep_shaping&1)&&(d*=1.09);d/=f.out_samplerate; -d-=8*e.sideinfo_len;d/=e.mode_gr*e.channels_out;var g=.93+.07*(11-f.compression_ratio)/5.5;.9>g&&(g=.9);13*d/2?v=3*d/2:0>v&&(v=0);a[f][m]+=v}a[f][m]>da.MAX_BITS_PER_CHANNEL&&(a[f][m]=da.MAX_BITS_PER_CHANNEL);q+=a[f][m]}if(q>da.MAX_BITS_PER_GRANULE)for(m=0;mda.MAX_BITS_PER_CHANNEL&&(a[f][m]=da.MAX_BITS_PER_CHANNEL),b+=a[f][m];if(b>u[0])for(f=0;fe;e++){var l=k[f+-10];var d=b[n+-224]*l;var g=b[c+224]*l;l=k[f+-9];d+=b[n+-160]* -l;g+=b[c+160]*l;l=k[f+-8];d+=b[n+-96]*l;g+=b[c+96]*l;l=k[f+-7];d+=b[n+-32]*l;g+=b[c+32]*l;l=k[f+-6];d+=b[n+32]*l;g+=b[c+-32]*l;l=k[f+-5];d+=b[n+96]*l;g+=b[c+-96]*l;l=k[f+-4];d+=b[n+160]*l;g+=b[c+-160]*l;l=k[f+-3];d+=b[n+224]*l;g+=b[c+-224]*l;l=k[f+-2];d+=b[c+-256]*l;g-=b[n+256]*l;l=k[f+-1];d+=b[c+-192]*l;g-=b[n+192]*l;l=k[f+0];d+=b[c+-128]*l;g-=b[n+128]*l;l=k[f+1];d+=b[c+-64]*l;g-=b[n+64]*l;l=k[f+2];d+=b[c+0]*l;g-=b[n+0]*l;l=k[f+3];d+=b[c+64]*l;g-=b[n+-64]*l;l=k[f+4];d+=b[c+128]*l;g-=b[n+-128]*l; -l=k[f+5];d+=b[c+192]*l;g-=b[n+-192]*l;d*=k[f+6];l=g-d;a[30+2*e]=g+d;a[31+2*e]=k[f+7]*l;f+=18;c--;n++}g=b[c+-16]*k[f+-10];d=b[c+-32]*k[f+-2];g+=(b[c+-48]-b[c+16])*k[f+-9];d+=b[c+-96]*k[f+-1];g+=(b[c+-80]+b[c+48])*k[f+-8];d+=b[c+-160]*k[f+0];g+=(b[c+-112]-b[c+80])*k[f+-7];d+=b[c+-224]*k[f+1];g+=(b[c+-144]+b[c+112])*k[f+-6];d-=b[c+32]*k[f+2];g+=(b[c+-176]-b[c+144])*k[f+-5];d-=b[c+96]*k[f+3];g+=(b[c+-208]+b[c+176])*k[f+-4];d-=b[c+160]*k[f+4];g+=(b[c+-240]-b[c+208])*k[f+-3];d-=b[c+224];b=d-g;c=d+g;g=a[14]; -d=a[15]-g;a[31]=c+g;a[30]=b+d;a[15]=b-d;a[14]=c-g;d=a[28]-a[0];a[0]+=a[28];a[28]=d*k[f+-36+7];d=a[29]-a[1];a[1]+=a[29];a[29]=d*k[f+-36+7];d=a[26]-a[2];a[2]+=a[26];a[26]=d*k[f+-72+7];d=a[27]-a[3];a[3]+=a[27];a[27]=d*k[f+-72+7];d=a[24]-a[4];a[4]+=a[24];a[24]=d*k[f+-108+7];d=a[25]-a[5];a[5]+=a[25];a[25]=d*k[f+-108+7];d=a[22]-a[6];a[6]+=a[22];a[22]=d*aa.SQRT2;d=a[23]-a[7];a[7]+=a[23];a[23]=d*aa.SQRT2-a[7];a[7]-=a[6];a[22]-=a[7];a[23]-=a[22];d=a[6];a[6]=a[31]-d;a[31]+=d;d=a[7];a[7]=a[30]-d;a[30]+=d;d= -a[22];a[22]=a[15]-d;a[15]+=d;d=a[23];a[23]=a[14]-d;a[14]+=d;d=a[20]-a[8];a[8]+=a[20];a[20]=d*k[f+-180+7];d=a[21]-a[9];a[9]+=a[21];a[21]=d*k[f+-180+7];d=a[18]-a[10];a[10]+=a[18];a[18]=d*k[f+-216+7];d=a[19]-a[11];a[11]+=a[19];a[19]=d*k[f+-216+7];d=a[16]-a[12];a[12]+=a[16];a[16]=d*k[f+-252+7];d=a[17]-a[13];a[13]+=a[17];a[17]=d*k[f+-252+7];d=-a[20]+a[24];a[20]+=a[24];a[24]=d*k[f+-216+7];d=-a[21]+a[25];a[21]+=a[25];a[25]=d*k[f+-216+7];d=a[4]-a[8];a[4]+=a[8];a[8]=d*k[f+-216+7];d=a[5]-a[9];a[5]+=a[9];a[9]= -d*k[f+-216+7];d=a[0]-a[12];a[0]+=a[12];a[12]=d*k[f+-72+7];d=a[1]-a[13];a[1]+=a[13];a[13]=d*k[f+-72+7];d=a[16]-a[28];a[16]+=a[28];a[28]=d*k[f+-72+7];d=-a[17]+a[29];a[17]+=a[29];a[29]=d*k[f+-72+7];d=aa.SQRT2*(a[2]-a[10]);a[2]+=a[10];a[10]=d;d=aa.SQRT2*(a[3]-a[11]);a[3]+=a[11];a[11]=d;d=aa.SQRT2*(-a[18]+a[26]);a[18]+=a[26];a[26]=d-a[18];d=aa.SQRT2*(-a[19]+a[27]);a[19]+=a[27];a[27]=d-a[19];d=a[2];a[19]-=a[3];a[3]-=d;a[2]=a[31]-d;a[31]+=d;d=a[3];a[11]-=a[19];a[18]-=d;a[3]=a[30]-d;a[30]+=d;d=a[18];a[27]-= -a[11];a[19]-=d;a[18]=a[15]-d;a[15]+=d;d=a[19];a[10]-=d;a[19]=a[14]-d;a[14]+=d;d=a[10];a[11]-=d;a[10]=a[23]-d;a[23]+=d;d=a[11];a[26]-=d;a[11]=a[22]-d;a[22]+=d;d=a[26];a[27]-=d;a[26]=a[7]-d;a[7]+=d;d=a[27];a[27]=a[6]-d;a[6]+=d;d=aa.SQRT2*(a[0]-a[4]);a[0]+=a[4];a[4]=d;d=aa.SQRT2*(a[1]-a[5]);a[1]+=a[5];a[5]=d;d=aa.SQRT2*(a[16]-a[20]);a[16]+=a[20];a[20]=d;d=aa.SQRT2*(a[17]-a[21]);a[17]+=a[21];a[21]=d;d=-aa.SQRT2*(a[8]-a[12]);a[8]+=a[12];a[12]=d-a[8];d=-aa.SQRT2*(a[9]-a[13]);a[9]+=a[13];a[13]=d-a[9];d= --aa.SQRT2*(a[25]-a[29]);a[25]+=a[29];a[29]=d-a[25];d=-aa.SQRT2*(a[24]+a[28]);a[24]-=a[28];a[28]=d-a[24];d=a[24]-a[16];a[24]=d;d=a[20]-d;a[20]=d;d=a[28]-d;a[28]=d;d=a[25]-a[17];a[25]=d;d=a[21]-d;a[21]=d;d=a[29]-d;a[29]=d;d=a[17]-a[1];a[17]=d;d=a[9]-d;a[9]=d;d=a[25]-d;a[25]=d;d=a[5]-d;a[5]=d;d=a[21]-d;a[21]=d;d=a[13]-d;a[13]=d;d=a[29]-d;a[29]=d;d=a[1]-a[0];a[1]=d;d=a[16]-d;a[16]=d;d=a[17]-d;a[17]=d;d=a[8]-d;a[8]=d;d=a[9]-d;a[9]=d;d=a[24]-d;a[24]=d;d=a[25]-d;a[25]=d;d=a[4]-d;a[4]=d;d=a[5]-d;a[5]=d;d= -a[20]-d;a[20]=d;d=a[21]-d;a[21]=d;d=a[12]-d;a[12]=d;d=a[13]-d;a[13]=d;d=a[28]-d;a[28]=d;d=a[29]-d;a[29]=d;d=a[0];a[0]+=a[31];a[31]-=d;d=a[1];a[1]+=a[30];a[30]-=d;d=a[16];a[16]+=a[15];a[15]-=d;d=a[17];a[17]+=a[14];a[14]-=d;d=a[8];a[8]+=a[23];a[23]-=d;d=a[9];a[9]+=a[22];a[22]-=d;d=a[24];a[24]+=a[7];a[7]-=d;d=a[25];a[25]+=a[6];a[6]-=d;d=a[4];a[4]+=a[27];a[27]-=d;d=a[5];a[5]+=a[26];a[26]-=d;d=a[20];a[20]+=a[11];a[11]-=d;d=a[21];a[21]+=a[10];a[10]-=d;d=a[12];a[12]+=a[19];a[19]-=d;d=a[13];a[13]+=a[18]; -a[18]-=d;d=a[28];a[28]+=a[3];a[3]-=d;d=a[29];a[29]+=a[2];a[2]-=d}var k=[-.1482523854003001,32.308141959636465,296.40344946382766,883.1344870032432,11113.947376231741,1057.2713659324597,305.7402417275812,30.825928907280012,3.8533188138216365,59.42900443849514,709.5899960123345,5281.91112291017,-5829.66483675846,-817.6293103748613,-76.91656988279972,-4.594269939176596,.9063471690191471,.1960342806591213,-.15466694054279598,34.324387823855965,301.8067566458425,817.599602898885,11573.795901679885,1181.2520595540152, -321.59731579894424,31.232021761053772,3.7107095756221318,53.650946155329365,684.167428119626,5224.56624370173,-6366.391851890084,-908.9766368219582,-89.83068876699639,-5.411397422890401,.8206787908286602,.3901806440322567,-.16070888947830023,36.147034243915876,304.11815768187864,732.7429163887613,11989.60988270091,1300.012278487897,335.28490093152146,31.48816102859945,3.373875931311736,47.232241542899175,652.7371796173471,5132.414255594984,-6909.087078780055,-1001.9990371107289,-103.62185754286375, --6.104916304710272,.7416505462720353,.5805693545089249,-.16636367662261495,37.751650073343995,303.01103387567713,627.9747488785183,12358.763425278165,1412.2779918482834,346.7496836825721,31.598286663170416,3.1598635433980946,40.57878626349686,616.1671130880391,5007.833007176154,-7454.040671756168,-1095.7960341867115,-118.24411666465777,-6.818469345853504,.6681786379192989,.7653668647301797,-.1716176790982088,39.11551877123304,298.3413246578966,503.5259106886539,12679.589408408976,1516.5821921214542, -355.9850766329023,31.395241710249053,2.9164211881972335,33.79716964664243,574.8943997801362,4853.234992253242,-7997.57021486075,-1189.7624067269965,-133.6444792601766,-7.7202770609839915,.5993769336819237,.9427934736519954,-.17645823955292173,40.21879108166477,289.9982036694474,359.3226160751053,12950.259102786438,1612.1013903507662,362.85067106591504,31.045922092242872,2.822222032597987,26.988862316190684,529.8996541764288,4671.371946949588,-8535.899136645805,-1282.5898586244496,-149.58553632943463, --8.643494270763135,.5345111359507916,1.111140466039205,-.36174739330527045,41.04429910497807,277.5463268268618,195.6386023135583,13169.43812144731,1697.6433561479398,367.40983966190305,30.557037410382826,2.531473372857427,20.070154905927314,481.50208566532336,4464.970341588308,-9065.36882077239,-1373.62841526722,-166.1660487028118,-9.58289321133207,.4729647758913199,1.268786568327291,-.36970682634889585,41.393213350082036,261.2935935556502,12.935476055240873,13336.131683328815,1772.508612059496,369.76534388639965, -29.751323653701338,2.4023193045459172,13.304795348228817,430.5615775526625,4237.0568611071185,-9581.931701634761,-1461.6913552409758,-183.12733958476446,-10.718010163869403,.41421356237309503,1.414213562373095,-.37677560326535325,41.619486213528496,241.05423794991074,-187.94665032361226,13450.063605744153,1836.153896465782,369.4908799925761,29.001847876923147,2.0714759319987186,6.779591200894186,377.7767837205709,3990.386575512536,-10081.709459700915,-1545.947424837898,-200.3762958015653,-11.864482073055006, -.3578057213145241,1.546020906725474,-.3829366947518991,41.1516456456653,216.47684307105183,-406.1569483347166,13511.136535077321,1887.8076599260432,367.3025214564151,28.136213436723654,1.913880671464418,.3829366947518991,323.85365704338597,3728.1472257487526,-10561.233882199509,-1625.2025997821418,-217.62525175416,-13.015432208941645,.3033466836073424,1.66293922460509,-.5822628872992417,40.35639251440489,188.20071124269245,-640.2706748618148,13519.21490106562,1927.6022433578062,362.8197642637487, -26.968821921868447,1.7463817695935329,-5.62650678237171,269.3016715297017,3453.386536448852,-11016.145278780888,-1698.6569643425091,-234.7658734267683,-14.16351421663124,.2504869601913055,1.76384252869671,-.5887180101749253,39.23429103868072,155.76096234403798,-889.2492977967378,13475.470561874661,1955.0535223723712,356.4450994756727,25.894952980042156,1.5695032905781554,-11.181939564328772,214.80884394039484,3169.1640829158237,-11443.321309975563,-1765.1588461316153,-251.68908574481912,-15.49755935939164, -.198912367379658,1.847759065022573,-.7912582233652842,37.39369355329111,119.699486012458,-1151.0956593239027,13380.446257078214,1970.3952110853447,348.01959814116185,24.731487364283044,1.3850130831637748,-16.421408865300393,161.05030052864092,2878.3322807850063,-11838.991423510031,-1823.985884688674,-268.2854986386903,-16.81724543849939,.1483359875383474,1.913880671464418,-.7960642926861912,35.2322109610459,80.01928065061526,-1424.0212633405113,13235.794061869668,1973.804052543835,337.9908651258184, -23.289159354463873,1.3934255946442087,-21.099669467133474,108.48348407242611,2583.700758091299,-12199.726194855148,-1874.2780658979746,-284.2467154529415,-18.11369784385905,.09849140335716425,1.961570560806461,-.998795456205172,32.56307803611191,36.958364584370486,-1706.075448829146,13043.287458812016,1965.3831106103316,326.43182772364605,22.175018750622293,1.198638339011324,-25.371248002043963,57.53505923036915,2288.41886619975,-12522.674544337233,-1914.8400385312243,-299.26241273417224,-19.37805630698734, -.04912684976946725,1.990369453344394,.0178904535*aa.SQRT2/2.384E-6,.008938074*aa.SQRT2/2.384E-6,.0015673635*aa.SQRT2/2.384E-6,.001228571*aa.SQRT2/2.384E-6,4.856585E-4*aa.SQRT2/2.384E-6,1.09434E-4*aa.SQRT2/2.384E-6,5.0783E-5*aa.SQRT2/2.384E-6,6.914E-6*aa.SQRT2/2.384E-6,12804.797818791945,1945.5515939597317,313.4244966442953,20.801593959731544,1995.1556208053692,9.000838926174497,-29.20218120805369],n=[[2.382191739347913E-13,6.423305872147834E-13,9.400849094049688E-13,1.122435026096556E-12,1.183840321267481E-12, -1.122435026096556E-12,9.40084909404969E-13,6.423305872147839E-13,2.382191739347918E-13,5.456116108943412E-12,4.878985199565852E-12,4.240448995017367E-12,3.559909094758252E-12,2.858043359288075E-12,2.156177623817898E-12,1.475637723558783E-12,8.371015190102974E-13,2.599706096327376E-13,-5.456116108943412E-12,-4.878985199565852E-12,-4.240448995017367E-12,-3.559909094758252E-12,-2.858043359288076E-12,-2.156177623817898E-12,-1.475637723558783E-12,-8.371015190102975E-13,-2.599706096327376E-13,-2.382191739347923E-13, --6.423305872147843E-13,-9.400849094049696E-13,-1.122435026096556E-12,-1.183840321267481E-12,-1.122435026096556E-12,-9.400849094049694E-13,-6.42330587214784E-13,-2.382191739347918E-13],[2.382191739347913E-13,6.423305872147834E-13,9.400849094049688E-13,1.122435026096556E-12,1.183840321267481E-12,1.122435026096556E-12,9.400849094049688E-13,6.423305872147841E-13,2.382191739347918E-13,5.456116108943413E-12,4.878985199565852E-12,4.240448995017367E-12,3.559909094758253E-12,2.858043359288075E-12,2.156177623817898E-12, -1.475637723558782E-12,8.371015190102975E-13,2.599706096327376E-13,-5.461314069809755E-12,-4.921085770524055E-12,-4.343405037091838E-12,-3.732668368707687E-12,-3.093523840190885E-12,-2.430835727329465E-12,-1.734679010007751E-12,-9.74825365660928E-13,-2.797435120168326E-13,0,0,0,0,0,0,-2.283748241799531E-13,-4.037858874020686E-13,-2.146547464825323E-13],[.1316524975873958,.414213562373095,.7673269879789602,1.091308501069271,1.303225372841206,1.56968557711749,1.920982126971166,2.414213562373094,3.171594802363212, -4.510708503662055,7.595754112725146,22.90376554843115,.984807753012208,.6427876096865394,.3420201433256688,.9396926207859084,-.1736481776669303,-.7660444431189779,.8660254037844387,.5,-.5144957554275265,-.4717319685649723,-.3133774542039019,-.1819131996109812,-.09457419252642064,-.04096558288530405,-.01419856857247115,-.003699974673760037,.8574929257125442,.8817419973177052,.9496286491027329,.9833145924917901,.9955178160675857,.9991605581781475,.999899195244447,.9999931550702802],[0,0,0,0,0,0,2.283748241799531E-13, -4.037858874020686E-13,2.146547464825323E-13,5.461314069809755E-12,4.921085770524055E-12,4.343405037091838E-12,3.732668368707687E-12,3.093523840190885E-12,2.430835727329466E-12,1.734679010007751E-12,9.74825365660928E-13,2.797435120168326E-13,-5.456116108943413E-12,-4.878985199565852E-12,-4.240448995017367E-12,-3.559909094758253E-12,-2.858043359288075E-12,-2.156177623817898E-12,-1.475637723558782E-12,-8.371015190102975E-13,-2.599706096327376E-13,-2.382191739347913E-13,-6.423305872147834E-13,-9.400849094049688E-13, --1.122435026096556E-12,-1.183840321267481E-12,-1.122435026096556E-12,-9.400849094049688E-13,-6.423305872147841E-13,-2.382191739347918E-13]],w=n[c.SHORT_TYPE],E=n[c.SHORT_TYPE],B=n[c.SHORT_TYPE],G=n[c.SHORT_TYPE],f=[0,1,16,17,8,9,24,25,4,5,20,21,12,13,28,29,2,3,18,19,10,11,26,27,6,7,22,23,14,15,30,31];this.mdct_sub48=function(b,k,a){for(var m=286,v=0;vr;r++)for(u(k,m,D[p]),u(k, -m+32,D[p+1]),p+=2,m+=64,l=1;32>l;l+=2)D[p-1][l]*=-1;for(l=0;32>l;l++,q+=18){D=d.block_type;p=b.sb_sample[v][e];var t=b.sb_sample[v][1-e];0!=d.mixed_block_flag&&2>l&&(D=0);if(1E-12>b.amp_filter[l])na.fill(g,q+0,q+18,0);else{if(1>b.amp_filter[l])for(r=0;18>r;r++)t[r][f[l]]*=b.amp_filter[l];if(D==c.SHORT_TYPE){for(r=-3;0>r;r++){var J=n[c.SHORT_TYPE][r+3];g[q+3*r+9]=p[9+r][f[l]]*J-p[8-r][f[l]];g[q+3*r+18]=p[14-r][f[l]]*J+p[15+r][f[l]];g[q+3*r+10]=p[15+r][f[l]]*J-p[14-r][f[l]];g[q+3*r+19]=t[2-r][f[l]]* -J+t[3+r][f[l]];g[q+3*r+11]=t[3+r][f[l]]*J-t[2-r][f[l]];g[q+3*r+20]=t[8-r][f[l]]*J+t[9+r][f[l]]}r=g;p=q;for(J=0;3>J;J++){var h=r[p+6]*n[c.SHORT_TYPE][0]-r[p+15];t=r[p+0]*n[c.SHORT_TYPE][2]-r[p+9];var x=h+t;var y=h-t;h=r[p+15]*n[c.SHORT_TYPE][0]+r[p+6];t=r[p+9]*n[c.SHORT_TYPE][2]+r[p+0];var A=h+t;var N=-h+t;t=2.069978111953089E-11*(r[p+3]*n[c.SHORT_TYPE][1]-r[p+12]);h=2.069978111953089E-11*(r[p+12]*n[c.SHORT_TYPE][1]+r[p+3]);r[p+0]=1.90752519173728E-11*x+t;r[p+15]=1.90752519173728E-11*-A+h;y*=1.6519652744032674E-11; -A=9.537625958686404E-12*A+h;r[p+3]=y-A;r[p+6]=y+A;x=9.537625958686404E-12*x-t;N*=1.6519652744032674E-11;r[p+9]=x+N;r[p+12]=x-N;p++}}else{J=K(18);for(r=-9;0>r;r++)x=n[D][r+27]*t[r+9][f[l]]+n[D][r+36]*t[8-r][f[l]],y=n[D][r+9]*p[r+9][f[l]]-n[D][r+18]*p[8-r][f[l]],J[r+9]=x-y*w[3+r+9],J[r+18]=x*w[3+r+9]+y;r=g;p=q;x=J;var H=x[17]-x[9];var O=x[15]-x[11];var F=x[14]-x[12];N=x[0]+x[8];A=x[1]+x[7];h=x[2]+x[6];y=x[3]+x[5];r[p+17]=N+h-y-(A-x[4]);J=(N+h-y)*E[19]+(A-x[4]);t=(H-O-F)*E[18];r[p+5]=t+J;r[p+6]=t-J; -var C=(x[16]-x[10])*E[18];A=A*E[19]+x[4];t=H*E[12]+C+O*E[13]+F*E[14];J=-N*E[16]+A-h*E[17]+y*E[15];r[p+1]=t+J;r[p+2]=t-J;t=H*E[13]-C-O*E[14]+F*E[12];J=-N*E[17]+A-h*E[15]+y*E[16];r[p+9]=t+J;r[p+10]=t-J;t=H*E[14]-C+O*E[12]-F*E[13];J=N*E[15]-A+h*E[16]-y*E[17];r[p+13]=t+J;r[p+14]=t-J;H=x[8]-x[0];O=x[6]-x[2];F=x[5]-x[3];N=x[17]+x[9];A=x[16]+x[10];h=x[15]+x[11];y=x[14]+x[12];r[p+0]=N+h+y+(A+x[13]);t=(N+h+y)*E[19]-(A+x[13]);J=(H-O+F)*E[18];r[p+11]=t+J;r[p+12]=t-J;C=(x[7]-x[1])*E[18];A=x[13]-A*E[19];t=N*E[15]- -A+h*E[16]+y*E[17];J=H*E[14]+C+O*E[12]+F*E[13];r[p+3]=t+J;r[p+4]=t-J;t=-N*E[17]+A-h*E[15]-y*E[16];J=H*E[13]+C-O*E[14]-F*E[12];r[p+7]=t+J;r[p+8]=t-J;t=-N*E[16]+A-h*E[17]-y*E[15];J=H*E[12]-C+O*E[13]-F*E[14];r[p+15]=t+J;r[p+16]=t-J}}if(D!=c.SHORT_TYPE&&0!=l)for(r=7;0<=r;--r)D=g[q+r]*B[20+r]+g[q+-1-r]*G[28+r],p=g[q+r]*G[28+r]-g[q+-1-r]*B[20+r],g[q+-1-r]=D,g[q+r]=p}}k=a;m=286;if(1==b.mode_gr)for(e=0;18>e;e++)T.arraycopy(b.sb_sample[v][1][e],0,b.sb_sample[v][0][e],0,32)}}}function Xa(){this.thm=new Xb;this.en= -new Xb}function c(){var u=c.FFTOFFSET,k=c.MPG_MD_MS_LR,n=null,w=this.psy=null,E=null,B=null;this.setModules=function(c,b,k,a){n=c;w=this.psy=b;E=a;B=k};var ha=new Fc;this.lame_encode_mp3_frame=function(f,b,v,a,m,z){var e=Ob([2,2]);e[0][0]=new Xa;e[0][1]=new Xa;e[1][0]=new Xa;e[1][1]=new Xa;var l=Ob([2,2]);l[0][0]=new Xa;l[0][1]=new Xa;l[1][0]=new Xa;l[1][1]=new Xa;var d=[null,null],g=f.internal_flags,q=ca([2,4]),D=[.5,.5],p=[[0,0],[0,0]],r=[[0,0],[0,0]];d[0]=b;d[1]=v;if(0==g.lame_encode_frame_init){b= -f.internal_flags;var t,J;if(0==b.lame_encode_frame_init){v=K(2014);var h=K(2014);b.lame_encode_frame_init=1;for(J=t=0;t<286+576*(1+b.mode_gr);++t)t<576*b.mode_gr?(v[t]=0,2==b.channels_out&&(h[t]=0)):(v[t]=d[0][J],2==b.channels_out&&(h[t]=d[1][J]),++J);for(J=0;J(g.slot_lag-=g.frac_SpF)&&(g.slot_lag+=f.out_samplerate,g.padding=1);if(0!=g.psymodel)for(h=[null,null],t=0,J=X(2),v= -0;v=q?(g.ATH.adjust*=.075*q+.925,g.ATH.adjust= -q?g.ATH.adjust=q:g.ATH.adjustl;l++)g.nsPsy.pefirbuf[l]=g.nsPsy.pefirbuf[l+ -1];for(v=r=0;vl;l++)r+=(g.nsPsy.pefirbuf[l]+g.nsPsy.pefirbuf[18-l])*c.fircoef[l];r=3350*g.mode_gr*g.channels_out/r;for(v=0;vm;m++)g.pinfo.pcmdata[b][m]=d[b][m-u]}B.set_frame_pinfo(f,e)}g.bitrate_stereoMode_Hist[g.bitrate_index][4]++;g.bitrate_stereoMode_Hist[15][4]++;2==g.channels_out&&(g.bitrate_stereoMode_Hist[g.bitrate_index][g.mode_ext]++,g.bitrate_stereoMode_Hist[15][g.mode_ext]++);for(f=0;fc;c++)for(var k=0;2>k;k++)this.tt[c][k]=new rb}function Ic(){this.last_en_subshort=ca([4,9]);this.lastAttacks=X(4);this.pefirbuf= -K(19);this.longfact=K(c.SBMAX_l);this.shortfact=K(c.SBMAX_s);this.attackthre_s=this.attackthre=0}function Xb(){this.l=K(c.SBMAX_l);this.s=ca([c.SBMAX_s,3]);var u=this;this.assign=function(k){T.arraycopy(k.l,0,u.l,0,c.SBMAX_l);for(var n=0;nw;w++)u.s[n][w]=k.s[n][w]}}function da(){function u(){this.ptr=this.write_timing=0;this.buf=new Int8Array(40)}this.fill_buffer_resample_init=this.iteration_init_init=this.lame_encode_frame_init=this.Class_ID=0;this.mfbuf=ca([2,da.MFSIZE]); -this.full_outer_loop=this.use_best_huffman=this.subblock_gain=this.noise_shaping_stop=this.psymodel=this.substep_shaping=this.noise_shaping_amp=this.noise_shaping=this.highpass2=this.highpass1=this.lowpass2=this.lowpass1=this.mode_ext=this.samplerate_index=this.bitrate_index=this.VBR_max_bitrate=this.VBR_min_bitrate=this.mf_size=this.mf_samples_to_encode=this.resample_ratio=this.channels_out=this.channels_in=this.mode_gr=0;this.l3_side=new Hc;this.ms_ratio=K(2);this.slot_lag=this.frac_SpF=this.padding= -0;this.tag_spec=null;this.nMusicCRC=0;this.OldValue=X(2);this.CurrentStep=X(2);this.masking_lower=0;this.bv_scf=X(576);this.pseudohalf=X(sa.SFBMAX);this.sfb21_extra=!1;this.inbuf_old=Array(2);this.blackfilt=Array(2*da.BPC+1);this.itime=new Float64Array(2);this.sideinfo_len=0;this.sb_sample=ca([2,2,18,c.SBLIMIT]);this.amp_filter=K(32);this.header=Array(da.MAX_HEADER_BUF);this.ResvMax=this.ResvSize=this.ancillary_flag=this.w_ptr=this.h_ptr=0;this.scalefac_band=new za;this.minval_l=K(c.CBANDS);this.minval_s= -K(c.CBANDS);this.nb_1=ca([4,c.CBANDS]);this.nb_2=ca([4,c.CBANDS]);this.nb_s1=ca([4,c.CBANDS]);this.nb_s2=ca([4,c.CBANDS]);this.s3_ll=this.s3_ss=null;this.decay=0;this.thm=Array(4);this.en=Array(4);this.tot_ener=K(4);this.loudness_sq=ca([2,2]);this.loudness_sq_save=K(2);this.mld_l=K(c.SBMAX_l);this.mld_s=K(c.SBMAX_s);this.bm_l=X(c.SBMAX_l);this.bo_l=X(c.SBMAX_l);this.bm_s=X(c.SBMAX_s);this.bo_s=X(c.SBMAX_s);this.npart_s=this.npart_l=0;this.s3ind=Ia([c.CBANDS,2]);this.s3ind_s=Ia([c.CBANDS,2]);this.numlines_s= -X(c.CBANDS);this.numlines_l=X(c.CBANDS);this.rnumlines_l=K(c.CBANDS);this.mld_cb_l=K(c.CBANDS);this.mld_cb_s=K(c.CBANDS);this.numlines_l_num1=this.numlines_s_num1=0;this.pe=K(4);this.ms_ener_ratio_old=this.ms_ratio_l_old=this.ms_ratio_s_old=0;this.blocktype_old=X(2);this.nsPsy=new Ic;this.VBR_seek_table=new Gc;this.PSY=this.ATH=null;this.nogap_current=this.nogap_total=0;this.findPeakSample=this.findReplayGain=this.decode_on_the_fly=!0;this.AudiophileGain=this.RadioGain=this.PeakSample=0;this.rgdata= -null;this.noclipScale=this.noclipGainChange=0;this.bitrate_stereoMode_Hist=Ia([16,5]);this.bitrate_blockType_Hist=Ia([16,6]);this.hip=this.pinfo=null;this.in_buffer_nsamples=0;this.iteration_loop=this.in_buffer_1=this.in_buffer_0=null;for(var k=0;k>1;var e=a;var l=a<<1;var d=l+e; -a=l<<1;var g=k;var q=g+u;do{var B=c[g+0]-c[g+e];var p=c[g+0]+c[g+e];var r=c[g+l]-c[g+d];var t=c[g+l]+c[g+d];c[g+l]=p-t;c[g+0]=p+t;c[g+d]=B-r;c[g+e]=B+r;B=c[q+0]-c[q+e];p=c[q+0]+c[q+e];r=aa.SQRT2*c[q+d];t=aa.SQRT2*c[q+l];c[q+l]=p-t;c[q+0]=p+t;c[q+d]=B-r;c[q+e]=B+r;q+=a;g+=a}while(gk;k++){var a=c.BLKSIZE_s/2,m=65535&192*(k+1),B= -c.BLKSIZE_s/8-1;do{var e=E[B<<2]&255;var l=n[e]*b[f][v+e+m];var d=n[127-e]*b[f][v+e+m+128];var g=l-d;l+=d;var q=n[e+64]*b[f][v+e+m+64];d=n[63-e]*b[f][v+e+m+192];var D=q-d;q+=d;a-=4;w[k][a+0]=l+q;w[k][a+2]=l-q;w[k][a+1]=g+D;w[k][a+3]=g-D;l=n[e+1]*b[f][v+e+m+1];d=n[126-e]*b[f][v+e+m+129];g=l-d;l+=d;q=n[e+65]*b[f][v+e+m+65];d=n[62-e]*b[f][v+e+m+193];D=q-d;q+=d;w[k][a+c.BLKSIZE_s/2+0]=l+q;w[k][a+c.BLKSIZE_s/2+2]=l-q;w[k][a+c.BLKSIZE_s/2+1]=g+D;w[k][a+c.BLKSIZE_s/2+3]=g-D}while(0<=--B);u(w[k],a,c.BLKSIZE_s/ -2)}};this.fft_long=function(n,w,f,b,v){n=c.BLKSIZE/8-1;var a=c.BLKSIZE/2;do{var m=E[n]&255;var B=k[m]*b[f][v+m];var e=k[m+512]*b[f][v+m+512];var l=B-e;B+=e;var d=k[m+256]*b[f][v+m+256];e=k[m+768]*b[f][v+m+768];var g=d-e;d+=e;a-=4;w[a+0]=B+d;w[a+2]=B-d;w[a+1]=l+g;w[a+3]=l-g;B=k[m+1]*b[f][v+m+1];e=k[m+513]*b[f][v+m+513];l=B-e;B+=e;d=k[m+257]*b[f][v+m+257];e=k[m+769]*b[f][v+m+769];g=d-e;d+=e;w[a+c.BLKSIZE/2+0]=B+d;w[a+c.BLKSIZE/2+2]=B-d;w[a+c.BLKSIZE/2+1]=l+g;w[a+c.BLKSIZE/2+3]=l-g}while(0<=--n);u(w, -a,c.BLKSIZE/2)};this.init_fft=function(u){for(u=0;ua)if(c=c*r)return a+c;g=a/c}a+=c;if(6>=b+3){if(g>=p)return a;b=0|aa.FAST_LOG10_X(g,16);return a* -x[b]}b=0|aa.FAST_LOG10_X(g,16);c=0!=e?f.ATH.cb_s[d]*f.ATH.adjust:f.ATH.cb_l[d]*f.ATH.adjust;return ac?(d=1,13>=b&&(d=y[b]),c=aa.FAST_LOG10_X(a/c,10/15),a*((h[b]-d)*c+d)):13a&&(a=0);0>c&&(c=0);if(0>=a)return c;if(0>=c)return a;var b=c>a?c/a:a/c;if(-2<=d&&2>=d){if(b>=p)return a+c;d=0|aa.FAST_LOG10_X(b,16);return(a+c)*A[d]}if(b=y){++e;break}k=a.PSY.bo_s_weight[e];y=1-k;l=k*d[g];k*=b[g];a.en[h].s[e][f]+=l;a.thm[h].s[e][f]+=k;l=y*d[g];k=y*b[g]}for(;e=m){++f;break}l=a.PSY.bo_l_weight[f];m=1-l;g=l*d[e];l*=b[e];a.en[h].l[f]+=g; -a.thm[h].l[f]+=l;g=m*d[e];l=m*b[e]}for(;f=d?c:0f;f++){var e=a.thm.s[h][f];if(0e&&(b=g>1E10*e?b+23.02585092994046*N[h]:b+N[h]*aa.FAST_LOG10(g/e))}}return b}function f(a,d){for(var b=281.0575,h=0;hf&&(b=e>1E10*f?b+23.02585092994046*H[h]: -b+H[h]*aa.FAST_LOG10(e/f))}}return b}function b(a,c,b,d,h){var f,e;for(f=e=0;fh&&(e=h);d[f]=e}else d[f]=0;for(f=1;fh&&(e=h),d[f]=e):d[f]=0;e=b[f-1]+b[f];0h&&(e=h),d[f]=e):d[f]=0}function a(a,c,b,d,f,h,e){var g=2*h;f=0y&&(k=y);l>p&&(l=p);c[2][m]=k;c[3][m]=l}}function m(a,c){a=0<=a?27*-a:a*c;return-72>=a?0:Math.exp(.2302585093*a)}function z(a){0>a&&(a=0);a*=.001;return 13*Math.atan(.76*a)+3.5*Math.atan(a*a/56.25)}function e(a,b,d,f,h,e,g,l,k,m,y,p){var q=K(c.CBANDS+1),n=l/(15z(l*t)- -A&&t<=k/2;t++);a[r]=t-u;for(C=r+1;uk/2){u=k/2;++r;break}}q[r]=l*u;for(u=0;ur&&(r=0),t=0|Math.floor(.5+y*(A-.5)),t>k/2&&(t=k/2),d[u]=(x[r]+x[t])/2,b[u]=x[t],g[u]=(n*A-q[b[u]])/(q[b[u]+1]-q[b[u]]),0>g[u]?g[u]=0:1=y){var p=y-.5;p=8*(p*p-2*p)}else p=0;y+=.474;y=15.811389+7.5*y-17.5*Math.sqrt(1+y*y);-60>=y?p=0:(y=Math.exp(.2302585093*(p+y)),p=y/.6609193);y=p*f[e];g[k][e]=y*h[k]}else for(e=0;e=n;++n)q=y+n*(x-y)/1E3,q=m(q,k),r+=q;q=1001/(r*(x-y));for(k=0;k -a&&(a=3410);a=Math.max(.1,a/1E3);return 3.64*Math.pow(a,-.8)-6.8*Math.exp(-.6*Math.pow(a-3.4,2))+6*Math.exp(-.15*Math.pow(a-8.7,2))+.001*(.6+.04*c)*Math.pow(a,4)}var q=new Jc,D=1/217621504/(c.BLKSIZE/2),p,r,t,J=[1,.79433,.63096,.63096,.63096,.63096,.63096,.25119,.11749],h=[3.3246*3.3246,3.23837*3.23837,9.9500500969,9.0247369744,8.1854926609,7.0440875649,2.46209*2.46209,2.284*2.284,4.4892710641,1.96552*1.96552,1.82335*1.82335,1.69146*1.69146,2.4621061921,2.1508568964,1.37074*1.37074,1.31036*1.31036, -1.5691069696,1.4555939904,1.16203*1.16203,1.2715945225,1.09428*1.09428,1.0659*1.0659,1.0779838276,1.0382591025,1],x=[1.7782755904,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1],y=[5.5396212496,2.29259*2.29259,4.9868695969,2.12675*2.12675,2.02545*2.02545,1.87894*1.87894,1.74303*1.74303,1.61695*1.61695,2.2499700001,1.39148*1.39148,1.29083*1.29083,1.19746*1.19746,1.2339655056,1.0779838276],A=[1.7782755904,1.35879*1.35879,1.38454* -1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.6999465924,1.22321*1.22321,1.3169398564,1],N=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130],H=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1],O=[-1.730326E-17,-.01703172,-1.349528E-17,.0418072,-6.73278E-17,-.0876324,-3.0835E-17,.1863476,-1.104424E-16,-.627638];this.L3psycho_anal_ns=function(a,d,h,e,g,l,m,y,p,n){var x=a.internal_flags,r=ca([2,c.BLKSIZE]),t=ca([2,3,c.BLKSIZE_s]),A= -K(c.CBANDS+1),I=K(c.CBANDS+1),C=K(c.CBANDS+2),Q=X(2),S=X(2),z,D,F,H,N,Z,L,V=ca([2,576]),ma=X(c.CBANDS+2),R=X(c.CBANDS+2);na.fill(R,0);var T=x.channels_out;a.mode==la.JOINT_STEREO&&(T=4);var M=a.VBR==G.vbr_off?0==x.ResvMax?0:x.ResvSize/x.ResvMax*.5:a.VBR==G.vbr_rh||a.VBR==G.vbr_mtrh||a.VBR==G.vbr_mt?.6:1;for(z=0;zF;F++){var U;var da=Y[ha+F+10];for(H=U=0;9>H;H+=2)da+=O[H]*(Y[ha+F+H]+Y[ha+F+21-H]),U+=O[H+1]*(Y[ha+F+H+1]+Y[ha+F+21-H-1]); -V[z][F]=da+U}g[e][z].en.assign(x.en[z]);g[e][z].thm.assign(x.thm[z]);2F;F++)Qa[F]=x.nsPsy.last_en_subshort[z][F+6],qa[F]=Qa[F]/x.nsPsy.last_en_subshort[z][F+4],ya[0]+=Qa[F];if(2==z)for(F=0;576>F;F++){var Ya=V[0][F];var Xa=V[1][F];V[0][F]=Ya+Xa;V[1][F]=Ya-Xa}var Ia=V[z&1],ec=0;for(F=0;9> -F;F++){for(var xa=ec+64,Ga=1;ecQa[F+3-2]?Ga/Qa[F+3-2]:Qa[F+3-2]>10*Ga?Qa[F+3-2]/(10*Ga):0;qa[F+3]=Ga}if(a.analysis){var Qb=qa[0];for(F=1;12>F;F++)QbF;F++)0==ta[F/3]&&qa[F]>Ma&&(ta[F/3]=F%3+1);for(F=1;4>F;F++)1.7>(ya[F-1]>ya[F]?ya[F-1]/ya[F]:ya[F]/ -ya[F-1])&&(ta[F]=0,1==F&&(ta[0]=0));0!=ta[0]&&0!=x.nsPsy.lastAttacks[z]&&(ta[0]=0);if(3==x.nsPsy.lastAttacks[z]||0!=ta[0]+ta[1]+ta[2]+ta[3])ia=0,0!=ta[1]&&0!=ta[0]&&(ta[1]=0),0!=ta[2]&&0!=ta[1]&&(ta[2]=0),0!=ta[3]&&0!=ta[2]&&(ta[3]=0);2>z?S[z]=ia:0==ia&&(S[0]=S[1]=0);p[z]=x.tot_ener[z];var P=a,Ha=za,Gb=Wb,La=r,kb=z&1,Ra=t,Na=z&1,cb=e,Aa=z,va=d,qb=h,Va=P.internal_flags;if(2>Aa)q.fft_long(Va,La[kb],Aa,va,qb),q.fft_short(Va,Ra[Na],Aa,va,qb);else if(2==Aa){for(var ja=c.BLKSIZE-1;0<=ja;--ja){var Hb=La[kb+ -0][ja],Ib=La[kb+1][ja];La[kb+0][ja]=(Hb+Ib)*aa.SQRT2*.5;La[kb+1][ja]=(Hb-Ib)*aa.SQRT2*.5}for(var Ba=2;0<=Ba;--Ba)for(ja=c.BLKSIZE_s-1;0<=ja;--ja)Hb=Ra[Na+0][Ba][ja],Ib=Ra[Na+1][Ba][ja],Ra[Na+0][Ba][ja]=(Hb+Ib)*aa.SQRT2*.5,Ra[Na+1][Ba][ja]=(Hb-Ib)*aa.SQRT2*.5}Ha[0]=La[kb+0][0];Ha[0]*=Ha[0];for(ja=c.BLKSIZE/2-1;0<=ja;--ja){var fc=La[kb+0][c.BLKSIZE/2-ja],tb=La[kb+0][c.BLKSIZE/2+ja];Ha[c.BLKSIZE/2-ja]=.5*(fc*fc+tb*tb)}for(Ba=2;0<=Ba;--Ba)for(Gb[Ba][0]=Ra[Na+0][Ba][0],Gb[Ba][0]*=Gb[Ba][0],ja=c.BLKSIZE_s/ -2-1;0<=ja;--ja)fc=Ra[Na+0][Ba][c.BLKSIZE_s/2-ja],tb=Ra[Na+0][Ba][c.BLKSIZE_s/2+ja],Gb[Ba][c.BLKSIZE_s/2-ja]=.5*(fc*fc+tb*tb);var oa=0;for(ja=11;jaAa&&(Va.loudness_sq[cb][Aa]=Va.loudness_sq_save[Aa],Va.loudness_sq_save[Aa]=u(Ha,Va));b(x,za,A,sa,Fa);v(x,sa,Fa,ma);for(L= -0;3>L;L++){var ea=void 0,Ab=void 0,Bb=Wb,Sa=I,Za=C,ub=z,zb=L,Ja=a.internal_flags;for(ea=Ab=0;eafb;fb++)Sb=fa.thm[0].s[Ca][fb],Eb=fa.thm[1].s[Ca][fb],fa.thm[0].s[Ca][fb]+=Eb*xb,fa.thm[1].s[Ca][fb]+=Sb*xb}}if(a.mode==la.JOINT_STEREO){for(var Oa,ka=0;ka1.58*x.thm[1].l[ka]||x.thm[1].l[ka]>1.58* -x.thm[0].l[ka])){var Ua=x.mld_l[ka]*x.en[3].l[ka],gb=Math.max(x.thm[2].l[ka],Math.min(x.thm[3].l[ka],Ua));Ua=x.mld_l[ka]*x.en[2].l[ka];var gc=Math.max(x.thm[3].l[ka],Math.min(x.thm[2].l[ka],Ua));x.thm[2].l[ka]=gb;x.thm[3].l[ka]=gc}for(ka=0;kaua;ua++)x.thm[0].s[ka][ua]>1.58*x.thm[1].s[ka][ua]||x.thm[1].s[ka][ua]>1.58*x.thm[0].s[ka][ua]||(Ua=x.mld_s[ka]*x.en[3].s[ka][ua],gb=Math.max(x.thm[2].s[ka][ua],Math.min(x.thm[3].s[ka][ua],Ua)),Ua=x.mld_s[ka]*x.en[2].s[ka][ua],gc= -Math.max(x.thm[3].s[ka][ua],Math.min(x.thm[2].s[ka][ua],Ua)),x.thm[2].s[ka][ua]=gb,x.thm[3].s[ka][ua]=gc);Oa=a.msfix;if(0Da;Da++)ba=x.ATH.cb_s[x.bm_s[wa]]*Zb,Wa=Math.min(Math.max(x.thm[0].s[wa][Da],ba),Math.max(x.thm[1].s[wa][Da],ba)),ab=Math.max(x.thm[2].s[wa][Da],ba),mb=Math.max(x.thm[3].s[wa][Da],ba),Wa*KbM;M++){var Y;var ha=firbuf[T+M+10];for(var U=Y=0;9>U;U+=2)ha+=F[U]*(firbuf[T+M+U]+firbuf[T+M+21-U]),Y+=F[U+1]*(firbuf[T+M+U+1]+firbuf[T+M+21-U-1]);Z[R][M]=ha+Y}l[g][R].en.assign(G.en[R]); -l[g][R].thm.assign(G.thm[R]);2M;M++)ya[M]=G.nsPsy.last_en_subshort[R][M+6],da[M]=ya[M]/G.nsPsy.last_en_subshort[R][M+4],qa[0]+=ya[M];for(M=0;9>M;M++){for(var Xa=sa+64,Ya=1;saya[M+3-2]?Ya/ya[M+3-2]:ya[M+3-2]>10*Ya?ya[M+3-2]/(10*Ya):0;da[M+3]=Ya}for(M=0;3>M;++M){var Ia=ya[3*M+3]+ya[3*M+4]+ya[3*M+5],Wb=1;6*ya[3*M+5]M;M++)xaM;M++)0==L[R][M/3]&&da[M]>Fa&&(L[R][M/3]=M%3+1);for(M=1;4>M;M++){var Qb=qa[M-1],Ga=qa[M];4E4>Math.max(Qb,Ga)&&Qb< -1.7*Ga&&Ga<1.7*Qb&&(1==M&&L[R][0]<=L[R][M]&&(L[R][0]=0),L[R][M]=0)}L[R][0]<=G.nsPsy.lastAttacks[R]&&(L[R][0]=0);if(3==G.nsPsy.lastAttacks[R]||0!=L[R][0]+L[R][1]+L[R][2]+L[R][3])na=0,0!=L[R][1]&&0!=L[R][0]&&(L[R][1]=0),0!=L[R][2]&&0!=L[R][1]&&(L[R][2]=0),0!=L[R][3]&&0!=L[R][2]&&(L[R][3]=0);2>R?H[R]=na:0==na&&(H[0]=H[1]=0);y[R]=G.tot_ener[R]}var qb=d.internal_flags;d.short_blocks!=ra.short_block_coupled||0!=H[0]&&0!=H[1]||(H[0]=H[1]=0);for(var Ma=0;MaLa)q.fft_long(Aa,Na[cb],La,h,e);else if(2==La)for(var va=c.BLKSIZE-1;0<=va;--va){var rb=Na[cb+0][va],Va=Na[cb+1][va];Na[cb+0][va]=(rb+Va)*aa.SQRT2*.5;Na[cb+1][va]=(rb-Va)*aa.SQRT2*.5}Ra[0]=Na[cb+0][0];Ra[0]*=Ra[0];for(va=c.BLKSIZE/2-1;0<=va;--va){var ja=Na[cb+0][c.BLKSIZE/2-va],Hb=Na[cb+0][c.BLKSIZE/2+va];Ra[c.BLKSIZE/2-va]=.5*(ja*ja+Hb*Hb)}var Ib= -0;for(va=11;vaBa&&(tb.loudness_sq[g][Ba]=tb.loudness_sq_save[Ba],tb.loudness_sq_save[Ba]=u(zb,tb));if(0!=H[Ha]){var oa=void 0,ea=r,Ab=I,Bb=S[P],Sa=D[P],Za=P,ub=K(c.CBANDS),sb=K(c.CBANDS),Ja=X(c.CBANDS+2);b(ea,Ab,Bb,ub,sb);v(ea,ub, -sb,Ja);var Rb=0;for(oa=0;oa=Yb&&(Yb=$a);0>=eb&&(eb=$a); -wb=ea.blocktype_old[Za&1]==c.NORM_TYPE?Math.min(eb,Yb):eb;Sa[oa]=Math.min($a,wb)}ea.nb_2[Za][oa]=ea.nb_1[Za][oa];ea.nb_1[Za][oa]=$a;vb=ub[oa];vb*=ea.minval_l[oa];vb*=Ta;Sa[oa]>vb&&(Sa[oa]=vb);1Bb[oa]&&(Sa[oa]=Bb[oa]);1>ea.masking_lower&&(Sa[oa]*=ea.masking_lower)}for(;oafa;fa++){for(P=0;Pfb&&q.fft_short(gc,Ua[gb],fb,h,e);if(2==fb)for(var ua=c.BLKSIZE_s-1;0<=ua;--ua){var Kb=Ua[gb+0][Oa][ua],hc=Ua[gb+1][Oa][ua];Ua[gb+0][Oa][ua]=(Kb+hc)*aa.SQRT2*.5; -Ua[gb+1][Oa][ua]=(Kb-hc)*aa.SQRT2*.5}ka[Oa][0]=Ua[gb+0][Oa][0];ka[Oa][0]*=ka[Oa][0];for(ua=c.BLKSIZE_s/2-1;0<=ua;--ua){var Zb=Ua[gb+0][Oa][c.BLKSIZE_s/2-ua],wa=Ua[gb+0][Oa][c.BLKSIZE_s/2+ua];ka[Oa][c.BLKSIZE_s/2-ua]=.5*(Zb*Zb+wa*wa)}var ba=void 0,Wa=void 0,ab=void 0,mb=C,hb=S[P],Da=D[P],ib=P,Ka=fa,Ea=d.internal_flags,Lb=new float[c.CBANDS],Tb=K(c.CBANDS),Fb=new int[c.CBANDS];for(ba=Wa=0;baac&&(ob=ac);$b[pa]=ob}else $b[pa]=0;for(pa=1;paac&&(ob=ac),$b[pa]=ob):$b[pa]=0;Pa=Ub[pa-1]+Ub[pa];0ac&&(ob=ac),$b[pa]=ob):$b[pa]=0;for(Wa=ba=0;babc&&(Da[ba]=bc);1hb[ba]&&(Da[ba]=hb[ba]);1>Ea.masking_lower&&(Da[ba]*=Ea.masking_lower)}for(;bafa;fa++){var jb=r.thm[P].s[Vb][fa];jb*=.8;if(2<=L[P][fa]||1==L[P][fa+1]){var jc=0!=fa?fa-1:2,kc=B(r.thm[P].s[Vb][jc],jb,.36);jb=Math.min(jb,kc)}else if(1==L[P][fa])jc=0!=fa?fa-1:2,kc=B(r.thm[P].s[Vb][jc],jb,.18),jb=Math.min(jb,kc);else if(0!=fa&&3==L[P][fa-1]||0==fa&&3==r.nsPsy.lastAttacks[P])jc=2!=fa?fa+1:0,kc=B(r.thm[P].s[Vb][jc],jb,.18),jb=Math.min(jb,kc);jb*=O[P][fa];vc[fa]=jb}for(fa=0;3>fa;fa++)r.thm[P].s[Vb][fa]=vc[fa]}for(P=0;Pf;++f){for(var v=0;vv;++v){for(z=0;zv;v++)b.nsPsy.last_en_subshort[f][v]=10}b.loudness_sq_save[0]=b.loudness_sq_save[1]=0;b.npart_l=e(b.numlines_l,b.bo_l,b.bm_l,n,u,b.mld_l,b.PSY.bo_l_weight,w,c.BLKSIZE,b.scalefac_band.l, -c.BLKSIZE/1152,c.SBMAX_l);for(f=0;f=g&&(z=m*(n[f]-g)/(24-g)+k*(24-n[f])/(24-g)),A[f]=Math.pow(10,z/10),b.rnumlines_l[f]=0k&&(m=k);b.ATH.cb_l[f]=m;m=-20+20*n[f]/10;6m&&(m=-15);m-=8;b.minval_l[f]=Math.pow(10,m/10)*b.numlines_l[f]}b.npart_s= -e(b.numlines_s,b.bo_s,b.bm_s,n,u,b.mld_s,b.PSY.bo_s_weight,w,c.BLKSIZE_s,b.scalefac_band.s,c.BLKSIZE_s/384,c.SBMAX_s);for(f=v=0;f=g&&(z=y*(n[f]-g)/(24-g)+x*(24-n[f])/(24-g));A[f]=Math.pow(10,z/10);m=Ma.MAX_VALUE;for(z=0;zk&&(m=k);b.ATH.cb_s[f]=m;m=-7+7*n[f]/12;12n[f]&&(m*=1+2.3*Math.log(1-m));-15>m&&(m=-15);m-=8;b.minval_s[f]= -Math.pow(10,m/10)*b.numlines_s[f]}b.s3_ss=l(b.s3ind_s,b.npart_s,n,u,A,h);p=Math.pow(10,.5625);r=Math.pow(10,1.5);t=Math.pow(10,1.5);q.init_fft(b);b.decay=Math.exp(-2.302585092994046/(.01*w/192));f=3.5;0!=(a.exp_nspsytune&2)&&(f=1);0b.npart_l-1&&(b.s3ind[h][1]=b.npart_l-1);b.ATH.decay=Math.pow(10,576*b.mode_gr/w*-1.2);b.ATH.adjust=.01;b.ATH.adjustLimit=1;if(-1!=a.ATHtype){v=a.out_samplerate/c.BLKSIZE;for(f=k=h=0;f=a?1:Math.cos(Math.PI/2*a)}function E(a,b){switch(a){case 44100:return b.version= -1,0;case 48E3:return b.version=1;case 32E3:return b.version=1,2;case 22050:return b.version=0;case 24E3:return b.version=0,1;case 16E3:return b.version=0,2;case 11025:return b.version=0;case 12E3:return b.version=0,1;case 8E3:return b.version=0,2;default:return b.version=0,-1}}function B(a,b,d){16E3>d&&(b=2);d=w.bitrate_table[b][1];for(var c=2;14>=c;c++)0d&&(b=2);for(d= -0;14>=d;d++)if(0t)return t;n+=t;x+=t;u[0]=g;u[1]=k;if(qa.NEQ(f.scale,0)&&qa.NEQ(f.scale,1))for(t=0;tH.resample_ratio||1.0001da.BPC&&(sa= -da.BPC);var ra=1E-4>Math.abs(ca.resample_ratio-Math.floor(.5+ca.resample_ratio))?1:0;var R=1/ca.resample_ratio;1xa&&(xa=0);1Math.abs(Ma)?Qa/Math.PI:xa*Math.sin(na*Qa*Ma)/(Math.PI*na*Ma)}for(N=0;N<=na;N++)ca.blackfilt[ia][N]/=M}ca.fill_buffer_resample_init=1}M=ca.inbuf_old[la];for(R=0;R=aa)break;za=N-ca.itime[la]-(ia+na%2*.5);za=0|Math.floor(2*za*sa+sa+.5);for(N=Fa=0;N<=na;++N)Ia=0|N+ia-na/2,Fa+=(0>Ia?M[ra+Ia]:W[X+Ia])*ca.blackfilt[za][N];V[T+R]=Fa}ha.num_used=Math.min(aa,na+ia-na/2);ca.itime[la]+=ha.num_used- -R*ca.resample_ratio;if(ha.num_used>=ra)for(N=0;Nh.mf_samples_to_encode&&(h.mf_samples_to_encode=c.ENCDELAY+c.POSTDELAY);h.mf_samples_to_encode+=t;if(h.mf_size>=g){w=r-x;0==r&&(w=0);t=f;w=e.enc.lame_encode_mp3_frame(t,y[0],y[1],q,n,w);t.frameNum++;t=w;if(0>t)return t;n+=t;x+=t;h.mf_size-=f.framesize;h.mf_samples_to_encode-=f.framesize;for(w=0;wh;h++)if(Math.max(a,b[h+1])!=a){d=b[h+1];c=h+1;f=b[h];e=h;break}return d-a>a-f?e:c};this.lame_init_params=function(a){var b=a.internal_flags;b.Class_ID=0;null==b.ATH&&(b.ATH=new Cc);null==b.PSY&&(b.PSY=new u);null==b.rgdata&&(b.rgdata=new Ac);b.channels_in=a.num_channels; -1==b.channels_in&&(a.mode=la.MONO);b.channels_out=a.mode==la.MONO?1:2;b.mode_ext=c.MPG_MD_MS_LR;a.mode==la.MONO&&(a.force_ms=!1);a.VBR==G.vbr_off&&128!=a.VBR_mean_bitrate_kbps&&0==a.brate&&(a.brate=a.VBR_mean_bitrate_kbps);a.VBR!=G.vbr_off&&a.VBR!=G.vbr_mtrh&&a.VBR!=G.vbr_mt&&(a.free_format=!1);a.VBR==G.vbr_off&&0==a.brate&&qa.EQ(a.compression_ratio,0)&&(a.compression_ratio=11.025);a.VBR==G.vbr_off&&0a.out_samplerate?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,64)):32E3>a.out_samplerate?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,160)):(a.VBR_mean_bitrate_kbps= -Math.max(a.VBR_mean_bitrate_kbps,32),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,320)));if(0==a.lowpassfreq){switch(a.VBR){case G.vbr_off:var e=new k;f(e,a.brate);e=e.lowerlimit;break;case G.vbr_abr:e=new k;f(e,a.VBR_mean_bitrate_kbps);e=e.lowerlimit;break;case G.vbr_rh:var h=[19500,19E3,18600,18E3,17500,16E3,15600,14900,12500,1E4,3950];if(0<=a.VBR_q&&9>=a.VBR_q){e=h[a.VBR_q];h=h[a.VBR_q+1];var m=a.VBR_q_frac;e=linear_int(e,h,m)}else e=19500;break;default:h=[19500,19E3,18500,18E3,17500, -16500,15500,14500,12500,9500,3950],0<=a.VBR_q&&9>=a.VBR_q?(e=h[a.VBR_q],h=h[a.VBR_q+1],m=a.VBR_q_frac,e=linear_int(e,h,m)):e=19500}a.mode!=la.MONO||a.VBR!=G.vbr_off&&a.VBR!=G.vbr_abr||(e*=1.5);a.lowpassfreq=e|0}0==a.out_samplerate&&(2*a.lowpassfreq>a.in_samplerate&&(a.lowpassfreq=a.in_samplerate/2),e=a.lowpassfreq|0,h=a.in_samplerate,m=44100,48E3<=h?m=48E3:44100<=h?m=44100:32E3<=h?m=32E3:24E3<=h?m=24E3:22050<=h?m=22050:16E3<=h?m=16E3:12E3<=h?m=12E3:11025<=h?m=11025:8E3<=h&&(m=8E3),-1==e?e=m:(15960>= -e&&(m=44100),15250>=e&&(m=32E3),11220>=e&&(m=24E3),9970>=e&&(m=22050),7230>=e&&(m=16E3),5420>=e&&(m=12E3),4510>=e&&(m=11025),3970>=e&&(m=8E3),e=h=a.out_samplerate?1:2;a.framesize=576*b.mode_gr;a.encoder_delay=c.ENCDELAY;b.resample_ratio=a.in_samplerate/a.out_samplerate;switch(a.VBR){case G.vbr_mt:case G.vbr_rh:case G.vbr_mtrh:a.compression_ratio=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5][a.VBR_q];break;case G.vbr_abr:a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.VBR_mean_bitrate_kbps);break;default:a.compression_ratio=16*a.out_samplerate*b.channels_out/(1E3*a.brate)}a.mode==la.NOT_SET&&(a.mode=la.JOINT_STEREO);0b.lowpass1&&(b.lowpass1=0)):b.lowpass1=2*a.lowpassfreq,b.lowpass1/=a.out_samplerate,b.lowpass2/=a.out_samplerate):(b.lowpass1=0,b.lowpass2=0);e=a.internal_flags;var n=32,v=-1;if(0=h;h++)m=h/31,m>=e.lowpass2&&(n=Math.min(n,h)),e.lowpass1=h;h++)m=h/31,m<=e.highpass1&&(v=Math.max(v,h)),e.highpass1h;h++)m=h/31,v=e.highpass2>e.highpass1?V((e.highpass2-m)/(e.highpass2-e.highpass1+1E-20)):1,m=e.lowpass2>e.lowpass1?V((m-e.lowpass1)/(e.lowpass2-e.lowpass1+1E-20)):1,e.amp_filter[h]=v*m;b.samplerate_index=E(a.out_samplerate,a);if(0>b.samplerate_index)return a.internal_flags=null,-1;if(a.VBR==G.vbr_off)if(a.free_format)b.bitrate_index=0;else{if(a.brate=B(a.brate,a.version,a.out_samplerate),b.bitrate_index=U(a.brate,a.version,a.out_samplerate),0>=b.bitrate_index)return a.internal_flags=null,-1}else b.bitrate_index= -1;a.analysis&&(a.bWriteVbrTag=!1);null!=b.pinfo&&(a.bWriteVbrTag=!1);d.init_bit_stream_w(b);e=b.samplerate_index+3*a.version+6*(16E3>a.out_samplerate?1:0);for(h=0;he;e++)b.nsPsy.pefirbuf[e]=700* -b.mode_gr*b.channels_out;-1==a.ATHtype&&(a.ATHtype=4);switch(a.VBR){case G.vbr_mt:a.VBR=G.vbr_mtrh;case G.vbr_mtrh:null==a.useTemporal&&(a.useTemporal=!1);g.apply_preset(a,500-10*a.VBR_q,0);0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY);5>a.quality&&(a.quality=0);5a.quality&&(a.quality=LAME_DEFAULT_QUALITY);b.iteration_loop=new VBROldIterationLoop(D);break;default:b.sfb21_extra=!1,0>a.quality&&(a.quality=LAME_DEFAULT_QUALITY),e=a.VBR,e==G.vbr_off&&(a.VBR_mean_bitrate_kbps=a.brate),g.apply_preset(a,a.VBR_mean_bitrate_kbps,0),a.VBR=e,b.PSY.mask_adjust=a.maskingadjust,b.PSY.mask_adjust_short= -a.maskingadjust_short,b.iteration_loop=e==G.vbr_off?new Bc(D):new ABRIterationLoop(D)}if(a.VBR!=G.vbr_off){b.VBR_min_bitrate=1;b.VBR_max_bitrate=14;16E3>a.out_samplerate&&(b.VBR_max_bitrate=8);if(0!=a.VBR_min_bitrate_kbps&&(a.VBR_min_bitrate_kbps=B(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),b.VBR_min_bitrate=U(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),0>b.VBR_min_bitrate)||0!=a.VBR_max_bitrate_kbps&&(a.VBR_max_bitrate_kbps=B(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),b.VBR_max_bitrate= -U(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),0>b.VBR_max_bitrate))return-1;a.VBR_min_bitrate_kbps=w.bitrate_table[a.version][b.VBR_min_bitrate];a.VBR_max_bitrate_kbps=w.bitrate_table[a.version][b.VBR_max_bitrate];a.VBR_mean_bitrate_kbps=Math.min(w.bitrate_table[a.version][b.VBR_max_bitrate],a.VBR_mean_bitrate_kbps);a.VBR_mean_bitrate_kbps=Math.max(w.bitrate_table[a.version][b.VBR_min_bitrate],a.VBR_mean_bitrate_kbps)}a.tune&&(b.PSY.mask_adjust+=a.tune_value_a,b.PSY.mask_adjust_short+=a.tune_value_a); -e=a.internal_flags;switch(a.quality){default:case 9:e.psymodel=0;e.noise_shaping=0;e.noise_shaping_amp=0;e.noise_shaping_stop=0;e.use_best_huffman=0;e.full_outer_loop=0;break;case 8:a.quality=7;case 7:e.psymodel=1;e.noise_shaping=0;e.noise_shaping_amp=0;e.noise_shaping_stop=0;e.use_best_huffman=0;e.full_outer_loop=0;break;case 6:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=0;e.full_outer_loop= -0;break;case 5:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=0;e.full_outer_loop=0;break;case 4:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=0;e.noise_shaping_stop=0;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 3:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);e.noise_shaping_amp=1;e.noise_shaping_stop=1;-1== -e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 2:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);0==e.substep_shaping&&(e.substep_shaping=2);e.noise_shaping_amp=1;e.noise_shaping_stop=1;-1==e.subblock_gain&&(e.subblock_gain=1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 1:e.psymodel=1;0==e.noise_shaping&&(e.noise_shaping=1);0==e.substep_shaping&&(e.substep_shaping=2);e.noise_shaping_amp=2;e.noise_shaping_stop=1;-1==e.subblock_gain&&(e.subblock_gain= -1);e.use_best_huffman=1;e.full_outer_loop=0;break;case 0:e.psymodel=1,0==e.noise_shaping&&(e.noise_shaping=1),0==e.substep_shaping&&(e.substep_shaping=2),e.noise_shaping_amp=2,e.noise_shaping_stop=1,-1==e.subblock_gain&&(e.subblock_gain=1),e.use_best_huffman=1,e.full_outer_loop=0}b.ATH.useAdjust=0>a.athaa_type?3:a.athaa_type;b.ATH.aaSensitivityP=Math.pow(10,a.athaa_sensitivity/-10);null==a.short_blocks&&(a.short_blocks=ra.short_block_allowed);a.short_blocks!=ra.short_block_allowed||a.mode!=la.JOINT_STEREO&& -a.mode!=la.STEREO||(a.short_blocks=ra.short_block_coupled);0>a.quant_comp&&(a.quant_comp=1);0>a.quant_comp_short&&(a.quant_comp_short=0);0>a.msfix&&(a.msfix=0);a.exp_nspsytune|=1;0>a.internal_flags.nsPsy.attackthre&&(a.internal_flags.nsPsy.attackthre=Pb.NSATTACKTHRE);0>a.internal_flags.nsPsy.attackthre_s&&(a.internal_flags.nsPsy.attackthre_s=Pb.NSATTACKTHRE_S);0>a.scale&&(a.scale=1);0>a.ATHtype&&(a.ATHtype=4);0>a.ATHcurve&&(a.ATHcurve=4);0>a.athaa_loudapprox&&(a.athaa_loudapprox=2);0>a.interChRatio&& -(a.interChRatio=0);null==a.useTemporal&&(a.useTemporal=!0);b.slot_lag=b.frac_SpF=0;a.VBR==G.vbr_off&&(b.slot_lag=b.frac_SpF=72E3*(a.version+1)*a.brate%a.out_samplerate|0);q.iteration_init(a);p.psymodel_init(a);return 0};this.lame_encode_flush=function(a,e,f,g){var k=a.internal_flags,l=dc([2,1152]),h=0,m=k.mf_samples_to_encode-c.POSTDELAY,p=b(a);if(1>k.mf_samples_to_encode)return 0;var n=0;a.in_samplerate!=a.out_samplerate&&(m+=16*a.out_samplerate/a.in_samplerate);var q=a.framesize-m%a.framesize;576> -q&&(q+=a.framesize);a.encoder_padding=q;for(q=(m+q)/a.framesize;0r&&(r=1);h=g-n;0==g&&(h=0);h=this.lame_encode_buffer(a,l[0],l[1],r,e,f,h);f+=h;n+=h;q-=m!=a.frameNum?1:0}k.mf_samples_to_encode=0;if(0>h)return h;h=g-n;0==g&&(h=0);d.flush_bitstream(a);h=d.copy_buffer(k,e,f,h,1);if(0>h)return h;f+=h;n+=h;h=g-n;0==g&&(h=0);if(a.write_id3tag_automatic){t.id3tag_write_v1(a);h=d.copy_buffer(k,e,f,h,0);if(0> -h)return h;n+=h}return n};this.lame_encode_buffer=function(a,b,d,c,e,f,g){var h=a.internal_flags,k=[null,null];if(4294479419!=h.Class_ID)return-3;if(0==c)return 0;if(null==h.in_buffer_0||h.in_buffer_nsamplesMath.abs(k)?Math.abs(c-k)<=1E-6*Math.abs(c):Math.abs(c-k)<=1E-6*Math.abs(k)};qa.NEQ=function(c,k){return!qa.EQ(c,k)};zb.NUMTOCENTRIES=100;zb.MAXFRAMESIZE=2880; -var w={t1HB:[1,1,1,0],t2HB:[1,2,1,3,1,1,3,2,0],t3HB:[3,2,1,1,1,1,3,2,0],t5HB:[1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0],t6HB:[7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0],t7HB:[1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0],t8HB:[3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0],t9HB:[7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0],t10HB:[1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34, -46,23,18,7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0],t11HB:[3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0],t12HB:[9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0],t13HB:[1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19, -3,4,12,19,31,26,44,33,31,24,32,24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,60,51, -36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1],t15HB:[7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40, -38,125,32,60,56,50,92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0],t16HB:[1,5,14,44,74,63, -110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73, -141,131,256,245,426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3],t24HB:[15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,130,122,216, -209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289, -275,521,379,371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3],t32HB:[1,10,8,20,12,20,16,32,14,12,24,0,28,16,24,16],t33HB:[15,28,26,48,22,40,36,64,14,24,20,32,12,16,8,0],t1l:[1,4,3,5],t2l:[1,4, -7,4,5,7,6,7,8],t3l:[2,3,7,4,4,7,6,7,8],t5l:[1,4,7,8,4,5,8,9,7,8,9,10,8,8,9,10],t6l:[3,4,6,8,4,4,6,7,5,6,7,8,7,7,8,9],t7l:[1,4,7,9,9,10,4,6,8,9,9,10,7,7,9,10,10,11,8,9,10,11,11,11,8,9,10,11,11,12,9,10,11,12,12,12],t8l:[2,4,7,9,9,10,4,4,6,10,10,10,7,6,8,10,10,11,9,10,10,11,11,12,9,9,10,11,12,12,10,10,11,11,13,13],t9l:[3,4,6,7,9,10,4,5,6,7,8,10,5,6,7,8,9,10,7,7,8,9,9,10,8,8,9,9,10,11,9,9,10,10,11,11],t10l:[1,4,7,9,10,10,10,11,4,6,8,9,10,11,10,10,7,8,9,10,11,12,11,11,8,9,10,11,12,12,11,12,9,10,11,12, -12,12,12,12,10,11,12,12,13,13,12,13,9,10,11,12,12,12,13,13,10,10,11,12,12,13,13,13],t11l:[2,4,6,8,9,10,9,10,4,5,6,8,10,10,9,10,6,7,8,9,10,11,10,10,8,8,9,11,10,12,10,11,9,10,10,11,11,12,11,12,9,10,11,12,12,13,12,13,9,9,9,10,11,12,12,12,9,9,10,11,12,12,12,12],t12l:[4,4,6,8,9,10,10,10,4,5,6,7,9,9,10,10,6,6,7,8,9,10,9,10,7,7,8,8,9,10,10,10,8,8,9,9,10,10,10,11,9,9,10,10,10,11,10,11,9,9,9,10,10,11,11,12,10,10,10,11,11,11,11,12],t13l:[1,5,7,8,9,10,10,11,10,11,12,12,13,13,14,14,4,6,8,9,10,10,11,11,11,11, -12,12,13,14,14,14,7,8,9,10,11,11,12,12,11,12,12,13,13,14,15,15,8,9,10,11,11,12,12,12,12,13,13,13,13,14,15,15,9,9,11,11,12,12,13,13,12,13,13,14,14,15,15,16,10,10,11,12,12,12,13,13,13,13,14,13,15,15,16,16,10,11,12,12,13,13,13,13,13,14,14,14,15,15,16,16,11,11,12,13,13,13,14,14,14,14,15,15,15,16,18,18,10,10,11,12,12,13,13,14,14,14,14,15,15,16,17,17,11,11,12,12,13,13,13,15,14,15,15,16,16,16,18,17,11,12,12,13,13,14,14,15,14,15,16,15,16,17,18,19,12,12,12,13,14,14,14,14,15,15,15,16,17,17,17,18,12,13,13,14, -14,15,14,15,16,16,17,17,17,18,18,18,13,13,14,15,15,15,16,16,16,16,16,17,18,17,18,18,14,14,14,15,15,15,17,16,16,19,17,17,17,19,18,18,13,14,15,16,16,16,17,16,17,17,18,18,21,20,21,18],t15l:[3,5,6,8,8,9,10,10,10,11,11,12,12,12,13,14,5,5,7,8,9,9,10,10,10,11,11,12,12,12,13,13,6,7,7,8,9,9,10,10,10,11,11,12,12,13,13,13,7,8,8,9,9,10,10,11,11,11,12,12,12,13,13,13,8,8,9,9,10,10,11,11,11,11,12,12,12,13,13,13,9,9,9,10,10,10,11,11,11,11,12,12,13,13,13,14,10,9,10,10,10,11,11,11,11,12,12,12,13,13,14,14,10,10,10, -11,11,11,11,12,12,12,12,12,13,13,13,14,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,14,10,10,11,11,11,11,12,12,12,13,13,13,13,14,14,14,11,11,11,11,12,12,12,12,12,13,13,13,13,14,15,14,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,12,12,11,12,12,12,13,13,13,13,13,13,14,14,15,15,12,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,13,13,13,13,13,13,13,13,14,14,14,14,15,15,14,15,13,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15],t16_5l:[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,11,4,6,8,9,10,11,11,11,12,12, -12,13,14,13,14,11,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,12,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,13,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,12,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,13,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,13,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,13,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,13,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,14,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,13,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,14,13,14,14, -14,14,15,15,15,15,17,16,16,16,16,18,14,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,14,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,14,11,11,11,12,12,13,13,13,14,14,14,14,14,14,14,12],t16l:[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,10,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,10,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,11,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,12,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,11,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,12,11,11,11,12,13,13,13,13,14,14,14,14, -15,15,16,12,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,12,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,12,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,13,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,12,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,13,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,13,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,13,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,13,10,10,10,11,11,12,12,12,13,13,13,13,13,13,13,10],t24l:[4,5,7,8,9,10,10,11,11,12,12,12,12,12,13,10,5,6,7,8, -9,10,10,11,11,11,12,12,12,12,12,10,7,7,8,9,9,10,10,11,11,11,11,12,12,12,13,9,8,8,9,9,10,10,10,11,11,11,11,12,12,12,12,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,13,9,10,9,10,10,10,10,11,11,11,11,12,12,12,12,12,9,10,10,10,10,10,11,11,11,11,12,12,12,12,12,13,9,11,10,10,10,11,11,11,11,12,12,12,12,12,13,13,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,10,12,11,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12, -12,12,12,12,12,12,12,12,13,13,13,13,13,10,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,10,13,12,12,12,12,12,12,13,13,13,13,13,13,13,13,10,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,6],t32l:[1,5,5,7,5,8,7,9,5,7,7,9,7,9,9,10],t33l:[4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]};w.ht=[new U(0,0,null,null),new U(2,0,w.t1HB,w.t1l),new U(3,0,w.t2HB,w.t2l),new U(3,0,w.t3HB,w.t3l),new U(0,0,null,null),new U(4,0,w.t5HB,w.t5l),new U(4,0,w.t6HB,w.t6l),new U(6,0,w.t7HB,w.t7l),new U(6,0,w.t8HB,w.t8l),new U(6,0,w.t9HB,w.t9l),new U(8, -0,w.t10HB,w.t10l),new U(8,0,w.t11HB,w.t11l),new U(8,0,w.t12HB,w.t12l),new U(16,0,w.t13HB,w.t13l),new U(0,0,null,w.t16_5l),new U(16,0,w.t15HB,w.t15l),new U(1,1,w.t16HB,w.t16l),new U(2,3,w.t16HB,w.t16l),new U(3,7,w.t16HB,w.t16l),new U(4,15,w.t16HB,w.t16l),new U(6,63,w.t16HB,w.t16l),new U(8,255,w.t16HB,w.t16l),new U(10,1023,w.t16HB,w.t16l),new U(13,8191,w.t16HB,w.t16l),new U(4,15,w.t24HB,w.t24l),new U(5,31,w.t24HB,w.t24l),new U(6,63,w.t24HB,w.t24l),new U(7,127,w.t24HB,w.t24l),new U(8,255,w.t24HB,w.t24l), -new U(9,511,w.t24HB,w.t24l),new U(11,2047,w.t24HB,w.t24l),new U(13,8191,w.t24HB,w.t24l),new U(0,0,w.t32HB,w.t32l),new U(0,0,w.t33HB,w.t33l)];w.largetbl=[65540,327685,458759,589832,655369,655370,720906,720907,786443,786444,786444,851980,851980,851980,917517,655370,262149,393222,524295,589832,655369,720906,720906,720907,786443,786443,786444,851980,917516,851980,917516,655370,458759,524295,589832,655369,720905,720906,786442,786443,851979,786443,851979,851980,851980,917516,917517,720905,589832,589832, -655369,720905,720906,786442,786442,786443,851979,851979,917515,917516,917516,983052,983052,786441,655369,655369,720905,720906,786442,786442,851978,851979,851979,917515,917516,917516,983052,983052,983053,720905,655370,655369,720906,720906,786442,851978,851979,917515,851979,917515,917516,983052,983052,983052,1048588,786441,720906,720906,720906,786442,851978,851979,851979,851979,917515,917516,917516,917516,983052,983052,1048589,786441,720907,720906,786442,786442,851979,851979,851979,917515,917516,983052, -983052,983052,983052,1114125,1114125,786442,720907,786443,786443,851979,851979,851979,917515,917515,983051,983052,983052,983052,1048588,1048589,1048589,786442,786443,786443,786443,851979,851979,917515,917515,983052,983052,983052,983052,1048588,983053,1048589,983053,851978,786444,851979,786443,851979,917515,917516,917516,917516,983052,1048588,1048588,1048589,1114125,1114125,1048589,786442,851980,851980,851979,851979,917515,917516,983052,1048588,1048588,1048588,1048588,1048589,1048589,983053,1048589, -851978,851980,917516,917516,917516,917516,983052,983052,983052,983052,1114124,1048589,1048589,1048589,1048589,1179661,851978,983052,917516,917516,917516,983052,983052,1048588,1048588,1048589,1179661,1114125,1114125,1114125,1245197,1114125,851978,917517,983052,851980,917516,1048588,1048588,983052,1048589,1048589,1114125,1179661,1114125,1245197,1114125,1048589,851978,655369,655369,655369,720905,720905,786441,786441,786441,851977,851977,851977,851978,851978,851978,851978,655366];w.table23=[65538,262147, -458759,262148,327684,458759,393222,458759,524296];w.table56=[65539,262148,458758,524296,262148,327684,524294,589831,458757,524294,589831,655368,524295,524295,589832,655369];w.bitrate_table=[[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1],[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],[0,8,16,24,32,40,48,56,64,-1,-1,-1,-1,-1,-1,-1]];w.samplerate_table=[[22050,24E3,16E3,-1],[44100,48E3,32E3,-1],[11025,12E3,8E3,-1]];w.scfsi_band=[0,6,11,16,21];ia.Q_MAX=257;ia.Q_MAX2=116;ia.LARGE_BITS=1E5; -ia.IXMAX_VAL=8206;var sa={};sa.SFBMAX=3*c.SBMAX_s;c.ENCDELAY=576;c.POSTDELAY=1152;c.MDCTDELAY=48;c.FFTOFFSET=224+c.MDCTDELAY;c.DECDELAY=528;c.SBLIMIT=32;c.CBANDS=64;c.SBPSY_l=21;c.SBPSY_s=12;c.SBMAX_l=22;c.SBMAX_s=13;c.PSFB21=6;c.PSFB12=6;c.BLKSIZE=1024;c.HBLKSIZE=c.BLKSIZE/2+1;c.BLKSIZE_s=256;c.HBLKSIZE_s=c.BLKSIZE_s/2+1;c.NORM_TYPE=0;c.START_TYPE=1;c.SHORT_TYPE=2;c.STOP_TYPE=3;c.MPG_MD_LR_LR=0;c.MPG_MD_LR_I=1;c.MPG_MD_MS_LR=2;c.MPG_MD_MS_I=3;c.fircoef=[-.1039435,-.1892065,-.0432472*5,-.155915,3.898045E-17, -.0467745*5,.50455,.756825,.187098*5];da.MFSIZE=3456+c.ENCDELAY-c.MDCTDELAY;da.MAX_HEADER_BUF=256;da.MAX_BITS_PER_CHANNEL=4095;da.MAX_BITS_PER_GRANULE=7680;da.BPC=320;Fa.RIFF=cc("RIFF");Fa.WAVE=cc("WAVE");Fa.fmt_=cc("fmt ");Fa.data=cc("data");Fa.readHeader=function(c){var k=new Fa,n=c.getUint32(0,!1);if(Fa.RIFF==n&&(c.getUint32(4,!0),Fa.WAVE==c.getUint32(8,!1)&&Fa.fmt_==c.getUint32(12,!1))){var u=c.getUint32(16,!0),w=20;switch(u){case 16:case 18:k.channels=c.getUint16(w+2,!0);k.sampleRate=c.getUint32(w+ -4,!0);break;default:throw"extended fmt chunk not implemented";}w+=u;u=Fa.data;for(var B=0;u!=n;){n=c.getUint32(w,!1);B=c.getUint32(w+4,!0);if(u==n)break;w+=B+8}k.dataLen=B;k.dataOffset=w+8;return k}};sa.SFBMAX=3*c.SBMAX_s;lamejs.Mp3Encoder=function(c,k,n){3!=arguments.length&&(console.error("WARN: Mp3Encoder(channels, samplerate, kbps) not specified"),c=1,k=44100,n=128);var u=new W,w=new Kc,B=new Y,G=new qa,f=new wc,b=new ia,v=new Ec,a=new zb,m=new mc,z=new Nc,e=new xc,l=new qb,d=new Lc,g=new Mc; -u.setModules(B,G,f,b,v,a,m,z,g);G.setModules(B,g,m,a);z.setModules(G,m);f.setModules(u);v.setModules(G,e,b,l);b.setModules(l,e,u.enc.psy);e.setModules(G);l.setModules(b);a.setModules(u,G,m);w.setModules(d,g);d.setModules(m,z,f);var q=u.lame_init();q.num_channels=c;q.in_samplerate=k;q.brate=n;q.mode=la.STEREO;q.quality=3;q.bWriteVbrTag=!1;q.disable_reservoir=!0;q.write_id3tag_automatic=!1;u.lame_init_params(q);var D=1152,p=0|1.25*D+7200,r=new Int8Array(p);this.encodeBuffer=function(a,b){1==c&&(b=a); -a.length>D&&(D=a.length,p=0|1.25*D+7200,r=new Int8Array(p));a=u.lame_encode_buffer(q,a,b,a.length,r,0,p);return new Int8Array(r.subarray(0,a))};this.flush=function(){var a=u.lame_encode_flush(q,r,0,p);return new Int8Array(r.subarray(0,a))}};lamejs.WavHeader=Fa}lamejs(); -export default lamejs; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/makeall.sh b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/makeall.sh deleted file mode 100644 index c9c2bc205..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/makeall.sh +++ /dev/null @@ -1,16 +0,0 @@ -( -echo 'function lamejs() {' -browserify --list src/js/index.js | grep lamejs | grep -v node_modules | xargs cat | grep -v -e 'common\..*;' -e 'require(' -e 'module.exports.*;$' | sed 's/^module.exports = {/var module_exports = {/'; -echo 'L3Side.SFBMAX = (Encoder.SBMAX_s * 3);' -echo '//testFullLength();' -echo 'lamejs.Mp3Encoder = Mp3Encoder;' -echo 'lamejs.WavHeader = WavHeader;' -echo '}' -echo "//fs=require('fs');" -echo 'lamejs();' -)| grep -v -e '^\s*assert\s*(.*);' >lame.all.js - -#cc=closure-compiler -jar=~/java/compiler.jar -cc="java -jar $jar" -$cc lame.all.js --language_in ECMASCRIPT5 --js_output_file lame.min.js diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/minify.sh b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/minify.sh deleted file mode 100644 index e8407561d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/minify.sh +++ /dev/null @@ -1,3 +0,0 @@ -jar=~/java/compiler.jar -cc="java -jar $jar" -$cc lame.all.js --language_in ECMASCRIPT5 --js_output_file lame.min.js diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/package.json deleted file mode 100644 index fa6719051..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "lamejs", - "version": "1.2.1", - "description": "Pure JavaScript MP3 Encoder", - "main": "src/js/index.js", - "type": "module", - "directories": { - "doc": "doc", - "test": "test" - }, - "scripts": { - "test": "node src/js/Tests.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/zhuker/lamejs.git" - }, - "keywords": [ - "mp3", - "encoder", - "audio", - "webaudio" - ], - "author": "Alex Zhukov", - "license": "LGPL-3.0", - "bugs": { - "url": "https://github.com/zhuker/lamejs/issues" - }, - "homepage": "https://github.com/zhuker/lamejs#readme", - "dependencies": { - "use-strict": "1.0.1" - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/pom.xml b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/pom.xml deleted file mode 100644 index adc93f943..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - 4.0.0 - jump3r - jump3r - 1.0.3 - - - - src/main/resources - - LameUI.xml - picture.png - run.bat - run.sh - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - true - ui.LameUI - - - - - - maven-assembly-plugin - - - src/main/assembly/bundle.xml - - jump3r-1.0.3 - - - - make-assembly - package - - single - - - - - - - - - org.jma - jma-api - 1.0.1 - compile - - - org.swixml - swixml - 1.5.144 - - - junit - junit - 4.11 - - - \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ATH.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ATH.js deleted file mode 100644 index 6b196669f..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ATH.js +++ /dev/null @@ -1,79 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); - -/** - * ATH related stuff, if something new ATH related has to be added, please plug - * it here into the ATH. - */ -function ATH() { - /** - * Method for the auto adjustment. - */ - this.useAdjust = 0; - /** - * factor for tuning the (sample power) point below which adaptive threshold - * of hearing adjustment occurs - */ - this.aaSensitivityP = 0.; - /** - * Lowering based on peak volume, 1 = no lowering. - */ - this.adjust = 0.; - /** - * Limit for dynamic ATH adjust. - */ - this.adjustLimit = 0.; - /** - * Determined to lower x dB each second. - */ - this.decay = 0.; - /** - * Lowest ATH value. - */ - this.floor = 0.; - /** - * ATH for sfbs in long blocks. - */ - this.l = new_float(Encoder.SBMAX_l); - /** - * ATH for sfbs in short blocks. - */ - this.s = new_float(Encoder.SBMAX_s); - /** - * ATH for partitioned sfb21 in long blocks. - */ - this.psfb21 = new_float(Encoder.PSFB21); - /** - * ATH for partitioned sfb12 in short blocks. - */ - this.psfb12 = new_float(Encoder.PSFB12); - /** - * ATH for long block convolution bands. - */ - this.cb_l = new_float(Encoder.CBANDS); - /** - * ATH for short block convolution bands. - */ - this.cb_s = new_float(Encoder.CBANDS); - /** - * Equal loudness weights (based on ATH). - */ - this.eql_w = new_float(Encoder.BLKSIZE / 2); -} - -module.exports = ATH; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/BitStream.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/BitStream.js deleted file mode 100644 index 054941f68..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/BitStream.js +++ /dev/null @@ -1,1027 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Takehiro = require('./Takehiro.js'); -var Tables = require('./Tables.js'); -var Encoder = require('./Encoder.js'); -var LameInternalFlags = require('./LameInternalFlags.js'); - -BitStream.EQ = function (a, b) { - return (Math.abs(a) > Math.abs(b)) ? (Math.abs((a) - (b)) <= (Math - .abs(a) * 1e-6)) - : (Math.abs((a) - (b)) <= (Math.abs(b) * 1e-6)); -}; - -BitStream.NEQ = function (a, b) { - return !BitStream.EQ(a, b); -}; - -function BitStream() { - var Lame = require('./Lame.js'); - var self = this; - var CRC16_POLYNOMIAL = 0x8005; - - /* - * we work with ints, so when doing bit manipulation, we limit ourselves to - * MAX_LENGTH-2 just to be on the safe side - */ - var MAX_LENGTH = 32; - - //GainAnalysis ga; - //MPGLib mpg; - //Version ver; - //VBRTag vbr; - var ga = null; - var mpg = null; - var ver = null; - var vbr = null; - - //public final void setModules(GainAnalysis ga, MPGLib mpg, Version ver, - // VBRTag vbr) { - - this.setModules = function (_ga, _mpg, _ver, _vbr) { - ga = _ga; - mpg = _mpg; - ver = _ver; - vbr = _vbr; - }; - - /** - * Bit stream buffer. - */ - //private byte[] buf; - var buf = null; - /** - * Bit counter of bit stream. - */ - var totbit = 0; - /** - * Pointer to top byte in buffer. - */ - var bufByteIdx = 0; - /** - * Pointer to top bit of top byte in buffer. - */ - var bufBitIdx = 0; - - /** - * compute bitsperframe and mean_bits for a layer III frame - */ - this.getframebits = function (gfp) { - var gfc = gfp.internal_flags; - var bit_rate; - - /* get bitrate in kbps [?] */ - if (gfc.bitrate_index != 0) - bit_rate = Tables.bitrate_table[gfp.version][gfc.bitrate_index]; - else - bit_rate = gfp.brate; - assert(8 <= bit_rate && bit_rate <= 640); - - /* main encoding routine toggles padding on and off */ - /* one Layer3 Slot consists of 8 bits */ - var bytes = 0 | (gfp.version + 1) * 72000 * bit_rate / gfp.out_samplerate + gfc.padding; - return 8 * bytes; - }; - - function putheader_bits(gfc) { - System.arraycopy(gfc.header[gfc.w_ptr].buf, 0, buf, bufByteIdx, gfc.sideinfo_len); - bufByteIdx += gfc.sideinfo_len; - totbit += gfc.sideinfo_len * 8; - gfc.w_ptr = (gfc.w_ptr + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1); - } - - /** - * write j bits into the bit stream - */ - function putbits2(gfc, val, j) { - assert(j < MAX_LENGTH - 2); - - while (j > 0) { - var k; - if (bufBitIdx == 0) { - bufBitIdx = 8; - bufByteIdx++; - assert(bufByteIdx < Lame.LAME_MAXMP3BUFFER); - assert(gfc.header[gfc.w_ptr].write_timing >= totbit); - if (gfc.header[gfc.w_ptr].write_timing == totbit) { - putheader_bits(gfc); - } - buf[bufByteIdx] = 0; - } - - k = Math.min(j, bufBitIdx); - j -= k; - - bufBitIdx -= k; - - assert(j < MAX_LENGTH); - /* 32 too large on 32 bit machines */ - assert(bufBitIdx < MAX_LENGTH); - - buf[bufByteIdx] |= ((val >> j) << bufBitIdx); - totbit += k; - } - } - - /** - * write j bits into the bit stream, ignoring frame headers - */ - function putbits_noheaders(gfc, val, j) { - assert(j < MAX_LENGTH - 2); - - while (j > 0) { - var k; - if (bufBitIdx == 0) { - bufBitIdx = 8; - bufByteIdx++; - assert(bufByteIdx < Lame.LAME_MAXMP3BUFFER); - buf[bufByteIdx] = 0; - } - - k = Math.min(j, bufBitIdx); - j -= k; - - bufBitIdx -= k; - - assert(j < MAX_LENGTH); - /* 32 too large on 32 bit machines */ - assert(bufBitIdx < MAX_LENGTH); - - buf[bufByteIdx] |= ((val >> j) << bufBitIdx); - totbit += k; - } - } - - /** - * Some combinations of bitrate, Fs, and stereo make it impossible to stuff - * out a frame using just main_data, due to the limited number of bits to - * indicate main_data_length. In these situations, we put stuffing bits into - * the ancillary data... - */ - function drain_into_ancillary(gfp, remainingBits) { - var gfc = gfp.internal_flags; - var i; - assert(remainingBits >= 0); - - if (remainingBits >= 8) { - putbits2(gfc, 0x4c, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x41, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x4d, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x45, 8); - remainingBits -= 8; - } - - if (remainingBits >= 32) { - var version = ver.getLameShortVersion(); - if (remainingBits >= 32) - for (i = 0; i < version.length && remainingBits >= 8; ++i) { - remainingBits -= 8; - putbits2(gfc, version.charAt(i), 8); - } - } - - for (; remainingBits >= 1; remainingBits -= 1) { - putbits2(gfc, gfc.ancillary_flag, 1); - gfc.ancillary_flag ^= (!gfp.disable_reservoir ? 1 : 0); - } - - assert(remainingBits == 0); - - } - - /** - * write N bits into the header - */ - function writeheader(gfc, val, j) { - var ptr = gfc.header[gfc.h_ptr].ptr; - - while (j > 0) { - var k = Math.min(j, 8 - (ptr & 7)); - j -= k; - assert(j < MAX_LENGTH); - /* >> 32 too large for 32 bit machines */ - - gfc.header[gfc.h_ptr].buf[ptr >> 3] |= ((val >> j)) << (8 - (ptr & 7) - k); - ptr += k; - } - gfc.header[gfc.h_ptr].ptr = ptr; - } - - function CRC_update(value, crc) { - value <<= 8; - for (var i = 0; i < 8; i++) { - value <<= 1; - crc <<= 1; - - if ((((crc ^ value) & 0x10000) != 0)) - crc ^= CRC16_POLYNOMIAL; - } - return crc; - } - - this.CRC_writeheader = function (gfc, header) { - var crc = 0xffff; - /* (jo) init crc16 for error_protection */ - - crc = CRC_update(header[2] & 0xff, crc); - crc = CRC_update(header[3] & 0xff, crc); - for (var i = 6; i < gfc.sideinfo_len; i++) { - crc = CRC_update(header[i] & 0xff, crc); - } - - header[4] = (byte)(crc >> 8); - header[5] = (byte)(crc & 255); - }; - - function encodeSideInfo2(gfp, bitsPerFrame) { - var gfc = gfp.internal_flags; - var l3_side; - var gr, ch; - - l3_side = gfc.l3_side; - gfc.header[gfc.h_ptr].ptr = 0; - Arrays.fill(gfc.header[gfc.h_ptr].buf, 0, gfc.sideinfo_len, 0); - if (gfp.out_samplerate < 16000) - writeheader(gfc, 0xffe, 12); - else - writeheader(gfc, 0xfff, 12); - writeheader(gfc, (gfp.version), 1); - writeheader(gfc, 4 - 3, 2); - writeheader(gfc, (!gfp.error_protection ? 1 : 0), 1); - writeheader(gfc, (gfc.bitrate_index), 4); - writeheader(gfc, (gfc.samplerate_index), 2); - writeheader(gfc, (gfc.padding), 1); - writeheader(gfc, (gfp.extension), 1); - writeheader(gfc, (gfp.mode.ordinal()), 2); - writeheader(gfc, (gfc.mode_ext), 2); - writeheader(gfc, (gfp.copyright), 1); - writeheader(gfc, (gfp.original), 1); - writeheader(gfc, (gfp.emphasis), 2); - if (gfp.error_protection) { - writeheader(gfc, 0, 16); - /* dummy */ - } - - if (gfp.version == 1) { - /* MPEG1 */ - assert(l3_side.main_data_begin >= 0); - writeheader(gfc, (l3_side.main_data_begin), 9); - - if (gfc.channels_out == 2) - writeheader(gfc, l3_side.private_bits, 3); - else - writeheader(gfc, l3_side.private_bits, 5); - - for (ch = 0; ch < gfc.channels_out; ch++) { - var band; - for (band = 0; band < 4; band++) { - writeheader(gfc, l3_side.scfsi[ch][band], 1); - } - } - - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - writeheader(gfc, gi.part2_3_length + gi.part2_length, 12); - writeheader(gfc, gi.big_values / 2, 9); - writeheader(gfc, gi.global_gain, 8); - writeheader(gfc, gi.scalefac_compress, 4); - - if (gi.block_type != Encoder.NORM_TYPE) { - writeheader(gfc, 1, 1); - /* window_switching_flag */ - writeheader(gfc, gi.block_type, 2); - writeheader(gfc, gi.mixed_block_flag, 1); - - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - - writeheader(gfc, gi.subblock_gain[0], 3); - writeheader(gfc, gi.subblock_gain[1], 3); - writeheader(gfc, gi.subblock_gain[2], 3); - } else { - writeheader(gfc, 0, 1); - /* window_switching_flag */ - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - if (gi.table_select[2] == 14) - gi.table_select[2] = 16; - writeheader(gfc, gi.table_select[2], 5); - - assert(0 <= gi.region0_count && gi.region0_count < 16); - assert(0 <= gi.region1_count && gi.region1_count < 8); - writeheader(gfc, gi.region0_count, 4); - writeheader(gfc, gi.region1_count, 3); - } - writeheader(gfc, gi.preflag, 1); - writeheader(gfc, gi.scalefac_scale, 1); - writeheader(gfc, gi.count1table_select, 1); - } - } - } else { - /* MPEG2 */ - assert(l3_side.main_data_begin >= 0); - writeheader(gfc, (l3_side.main_data_begin), 8); - writeheader(gfc, l3_side.private_bits, gfc.channels_out); - - gr = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - writeheader(gfc, gi.part2_3_length + gi.part2_length, 12); - writeheader(gfc, gi.big_values / 2, 9); - writeheader(gfc, gi.global_gain, 8); - writeheader(gfc, gi.scalefac_compress, 9); - - if (gi.block_type != Encoder.NORM_TYPE) { - writeheader(gfc, 1, 1); - /* window_switching_flag */ - writeheader(gfc, gi.block_type, 2); - writeheader(gfc, gi.mixed_block_flag, 1); - - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - - writeheader(gfc, gi.subblock_gain[0], 3); - writeheader(gfc, gi.subblock_gain[1], 3); - writeheader(gfc, gi.subblock_gain[2], 3); - } else { - writeheader(gfc, 0, 1); - /* window_switching_flag */ - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - if (gi.table_select[2] == 14) - gi.table_select[2] = 16; - writeheader(gfc, gi.table_select[2], 5); - - assert(0 <= gi.region0_count && gi.region0_count < 16); - assert(0 <= gi.region1_count && gi.region1_count < 8); - writeheader(gfc, gi.region0_count, 4); - writeheader(gfc, gi.region1_count, 3); - } - - writeheader(gfc, gi.scalefac_scale, 1); - writeheader(gfc, gi.count1table_select, 1); - } - } - - if (gfp.error_protection) { - /* (jo) error_protection: add crc16 information to header */ - CRC_writeheader(gfc, gfc.header[gfc.h_ptr].buf); - } - - { - var old = gfc.h_ptr; - assert(gfc.header[old].ptr == gfc.sideinfo_len * 8); - - gfc.h_ptr = (old + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1); - gfc.header[gfc.h_ptr].write_timing = gfc.header[old].write_timing - + bitsPerFrame; - - if (gfc.h_ptr == gfc.w_ptr) { - /* yikes! we are out of header buffer space */ - System.err - .println("Error: MAX_HEADER_BUF too small in bitstream.c \n"); - } - - } - } - - function huffman_coder_count1(gfc, gi) { - /* Write count1 area */ - var h = Tables.ht[gi.count1table_select + 32]; - var i, bits = 0; - - var ix = gi.big_values; - var xr = gi.big_values; - assert(gi.count1table_select < 2); - - for (i = (gi.count1 - gi.big_values) / 4; i > 0; --i) { - var huffbits = 0; - var p = 0, v; - - v = gi.l3_enc[ix + 0]; - if (v != 0) { - p += 8; - if (gi.xr[xr + 0] < 0) - huffbits++; - assert(v <= 1); - } - - v = gi.l3_enc[ix + 1]; - if (v != 0) { - p += 4; - huffbits *= 2; - if (gi.xr[xr + 1] < 0) - huffbits++; - assert(v <= 1); - } - - v = gi.l3_enc[ix + 2]; - if (v != 0) { - p += 2; - huffbits *= 2; - if (gi.xr[xr + 2] < 0) - huffbits++; - assert(v <= 1); - } - - v = gi.l3_enc[ix + 3]; - if (v != 0) { - p++; - huffbits *= 2; - if (gi.xr[xr + 3] < 0) - huffbits++; - assert(v <= 1); - } - - ix += 4; - xr += 4; - putbits2(gfc, huffbits + h.table[p], h.hlen[p]); - bits += h.hlen[p]; - } - return bits; - } - - /** - * Implements the pseudocode of page 98 of the IS - */ - function Huffmancode(gfc, tableindex, start, end, gi) { - var h = Tables.ht[tableindex]; - var bits = 0; - - assert(tableindex < 32); - if (0 == tableindex) - return bits; - - for (var i = start; i < end; i += 2) { - var cbits = 0; - var xbits = 0; - var linbits = h.xlen; - var xlen = h.xlen; - var ext = 0; - var x1 = gi.l3_enc[i]; - var x2 = gi.l3_enc[i + 1]; - - if (x1 != 0) { - if (gi.xr[i] < 0) - ext++; - cbits--; - } - - if (tableindex > 15) { - /* use ESC-words */ - if (x1 > 14) { - var linbits_x1 = x1 - 15; - assert(linbits_x1 <= h.linmax); - ext |= linbits_x1 << 1; - xbits = linbits; - x1 = 15; - } - - if (x2 > 14) { - var linbits_x2 = x2 - 15; - assert(linbits_x2 <= h.linmax); - ext <<= linbits; - ext |= linbits_x2; - xbits += linbits; - x2 = 15; - } - xlen = 16; - } - - if (x2 != 0) { - ext <<= 1; - if (gi.xr[i + 1] < 0) - ext++; - cbits--; - } - - assert((x1 | x2) < 16); - - x1 = x1 * xlen + x2; - xbits -= cbits; - cbits += h.hlen[x1]; - - assert(cbits <= MAX_LENGTH); - assert(xbits <= MAX_LENGTH); - - putbits2(gfc, h.table[x1], cbits); - putbits2(gfc, ext, xbits); - bits += cbits + xbits; - } - return bits; - } - - /** - * Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as - * well as the definitions of the side information on pages 26 and 27. - */ - function ShortHuffmancodebits(gfc, gi) { - var region1Start = 3 * gfc.scalefac_band.s[3]; - if (region1Start > gi.big_values) - region1Start = gi.big_values; - - /* short blocks do not have a region2 */ - var bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi); - bits += Huffmancode(gfc, gi.table_select[1], region1Start, - gi.big_values, gi); - return bits; - } - - function LongHuffmancodebits(gfc, gi) { - var bigvalues, bits; - var region1Start, region2Start; - - bigvalues = gi.big_values; - assert(0 <= bigvalues && bigvalues <= 576); - - var i = gi.region0_count + 1; - assert(0 <= i); - assert(i < gfc.scalefac_band.l.length); - region1Start = gfc.scalefac_band.l[i]; - i += gi.region1_count + 1; - assert(0 <= i); - assert(i < gfc.scalefac_band.l.length); - region2Start = gfc.scalefac_band.l[i]; - - if (region1Start > bigvalues) - region1Start = bigvalues; - - if (region2Start > bigvalues) - region2Start = bigvalues; - - bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi); - bits += Huffmancode(gfc, gi.table_select[1], region1Start, - region2Start, gi); - bits += Huffmancode(gfc, gi.table_select[2], region2Start, bigvalues, - gi); - return bits; - } - - function writeMainData(gfp) { - var gr, ch, sfb, data_bits, tot_bits = 0; - var gfc = gfp.internal_flags; - var l3_side = gfc.l3_side; - - if (gfp.version == 1) { - /* MPEG 1 */ - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - var slen1 = Takehiro.slen1_tab[gi.scalefac_compress]; - var slen2 = Takehiro.slen2_tab[gi.scalefac_compress]; - data_bits = 0; - for (sfb = 0; sfb < gi.sfbdivide; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - /* scfsi is used */ - putbits2(gfc, gi.scalefac[sfb], slen1); - data_bits += slen1; - } - for (; sfb < gi.sfbmax; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - /* scfsi is used */ - putbits2(gfc, gi.scalefac[sfb], slen2); - data_bits += slen2; - } - assert(data_bits == gi.part2_length); - - if (gi.block_type == Encoder.SHORT_TYPE) { - data_bits += ShortHuffmancodebits(gfc, gi); - } else { - data_bits += LongHuffmancodebits(gfc, gi); - } - data_bits += huffman_coder_count1(gfc, gi); - /* does bitcount in quantize.c agree with actual bit count? */ - assert(data_bits == gi.part2_3_length + gi.part2_length); - tot_bits += data_bits; - } - /* for ch */ - } - /* for gr */ - } else { - /* MPEG 2 */ - gr = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - var gi = l3_side.tt[gr][ch]; - var i, sfb_partition, scale_bits = 0; - assert(gi.sfb_partition_table != null); - data_bits = 0; - sfb = 0; - sfb_partition = 0; - - if (gi.block_type == Encoder.SHORT_TYPE) { - for (; sfb_partition < 4; sfb_partition++) { - var sfbs = gi.sfb_partition_table[sfb_partition] / 3; - var slen = gi.slen[sfb_partition]; - for (i = 0; i < sfbs; i++, sfb++) { - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 0], 0), slen); - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 1], 0), slen); - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 2], 0), slen); - scale_bits += 3 * slen; - } - } - data_bits += ShortHuffmancodebits(gfc, gi); - } else { - for (; sfb_partition < 4; sfb_partition++) { - var sfbs = gi.sfb_partition_table[sfb_partition]; - var slen = gi.slen[sfb_partition]; - for (i = 0; i < sfbs; i++, sfb++) { - putbits2(gfc, Math.max(gi.scalefac[sfb], 0), slen); - scale_bits += slen; - } - } - data_bits += LongHuffmancodebits(gfc, gi); - } - data_bits += huffman_coder_count1(gfc, gi); - /* does bitcount in quantize.c agree with actual bit count? */ - assert(data_bits == gi.part2_3_length); - assert(scale_bits == gi.part2_length); - tot_bits += scale_bits + data_bits; - } - /* for ch */ - } - /* for gf */ - return tot_bits; - } - - /* main_data */ - - function TotalBytes() { - this.total = 0; - } - - /* - * compute the number of bits required to flush all mp3 frames currently in - * the buffer. This should be the same as the reservoir size. Only call this - * routine between frames - i.e. only after all headers and data have been - * added to the buffer by format_bitstream(). - * - * Also compute total_bits_output = size of mp3 buffer (including frame - * headers which may not have yet been send to the mp3 buffer) + number of - * bits needed to flush all mp3 frames. - * - * total_bytes_output is the size of the mp3 output buffer if - * lame_encode_flush_nogap() was called right now. - */ - function compute_flushbits(gfp, total_bytes_output) { - var gfc = gfp.internal_flags; - var flushbits, remaining_headers; - var bitsPerFrame; - var last_ptr, first_ptr; - first_ptr = gfc.w_ptr; - /* first header to add to bitstream */ - last_ptr = gfc.h_ptr - 1; - /* last header to add to bitstream */ - if (last_ptr == -1) - last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1; - - /* add this many bits to bitstream so we can flush all headers */ - flushbits = gfc.header[last_ptr].write_timing - totbit; - total_bytes_output.total = flushbits; - - if (flushbits >= 0) { - /* if flushbits >= 0, some headers have not yet been written */ - /* reduce flushbits by the size of the headers */ - remaining_headers = 1 + last_ptr - first_ptr; - if (last_ptr < first_ptr) - remaining_headers = 1 + last_ptr - first_ptr - + LameInternalFlags.MAX_HEADER_BUF; - flushbits -= remaining_headers * 8 * gfc.sideinfo_len; - } - - /* - * finally, add some bits so that the last frame is complete these bits - * are not necessary to decode the last frame, but some decoders will - * ignore last frame if these bits are missing - */ - bitsPerFrame = self.getframebits(gfp); - flushbits += bitsPerFrame; - total_bytes_output.total += bitsPerFrame; - /* round up: */ - if ((total_bytes_output.total % 8) != 0) - total_bytes_output.total = 1 + (total_bytes_output.total / 8); - else - total_bytes_output.total = (total_bytes_output.total / 8); - total_bytes_output.total += bufByteIdx + 1; - - if (flushbits < 0) { - System.err.println("strange error flushing buffer ... \n"); - } - return flushbits; - } - - this.flush_bitstream = function (gfp) { - var gfc = gfp.internal_flags; - var l3_side; - var flushbits; - var last_ptr = gfc.h_ptr - 1; - /* last header to add to bitstream */ - if (last_ptr == -1) - last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1; - l3_side = gfc.l3_side; - - if ((flushbits = compute_flushbits(gfp, new TotalBytes())) < 0) - return; - drain_into_ancillary(gfp, flushbits); - - /* check that the 100% of the last frame has been written to bitstream */ - assert(gfc.header[last_ptr].write_timing + this.getframebits(gfp) == totbit); - - /* - * we have padded out all frames with ancillary data, which is the same - * as filling the bitreservoir with ancillary data, so : - */ - gfc.ResvSize = 0; - l3_side.main_data_begin = 0; - - /* save the ReplayGain value */ - if (gfc.findReplayGain) { - var RadioGain = ga.GetTitleGain(gfc.rgdata); - assert(NEQ(RadioGain, GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)); - gfc.RadioGain = Math.floor(RadioGain * 10.0 + 0.5) | 0; - /* round to nearest */ - } - - /* find the gain and scale change required for no clipping */ - if (gfc.findPeakSample) { - gfc.noclipGainChange = Math.ceil(Math - .log10(gfc.PeakSample / 32767.0) * 20.0 * 10.0) | 0; - /* round up */ - - if (gfc.noclipGainChange > 0) { - /* clipping occurs */ - if (EQ(gfp.scale, 1.0) || EQ(gfp.scale, 0.0)) - gfc.noclipScale = (Math - .floor((32767.0 / gfc.PeakSample) * 100.0) / 100.0); - /* round down */ - else { - /* - * the user specified his own scaling factor. We could - * suggest the scaling factor of - * (32767.0/gfp.PeakSample)*(gfp.scale) but it's usually - * very inaccurate. So we'd rather not advice him on the - * scaling factor. - */ - gfc.noclipScale = -1; - } - } else - /* no clipping */ - gfc.noclipScale = -1; - } - }; - - this.add_dummy_byte = function (gfp, val, n) { - var gfc = gfp.internal_flags; - var i; - - while (n-- > 0) { - putbits_noheaders(gfc, val, 8); - - for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i) - gfc.header[i].write_timing += 8; - } - }; - - /** - * This is called after a frame of audio has been quantized and coded. It - * will write the encoded audio to the bitstream. Note that from a layer3 - * encoder's perspective the bit stream is primarily a series of main_data() - * blocks, with header and side information inserted at the proper locations - * to maintain framing. (See Figure A.7 in the IS). - */ - this.format_bitstream = function (gfp) { - var gfc = gfp.internal_flags; - var l3_side; - l3_side = gfc.l3_side; - - var bitsPerFrame = this.getframebits(gfp); - drain_into_ancillary(gfp, l3_side.resvDrain_pre); - - encodeSideInfo2(gfp, bitsPerFrame); - var bits = 8 * gfc.sideinfo_len; - bits += writeMainData(gfp); - drain_into_ancillary(gfp, l3_side.resvDrain_post); - bits += l3_side.resvDrain_post; - - l3_side.main_data_begin += (bitsPerFrame - bits) / 8; - - /* - * compare number of bits needed to clear all buffered mp3 frames with - * what we think the resvsize is: - */ - if (compute_flushbits(gfp, new TotalBytes()) != gfc.ResvSize) { - System.err.println("Internal buffer inconsistency. flushbits <> ResvSize"); - } - - /* - * compare main_data_begin for the next frame with what we think the - * resvsize is: - */ - if ((l3_side.main_data_begin * 8) != gfc.ResvSize) { - System.err.printf("bit reservoir error: \n" - + "l3_side.main_data_begin: %d \n" - + "Resvoir size: %d \n" - + "resv drain (post) %d \n" - + "resv drain (pre) %d \n" - + "header and sideinfo: %d \n" - + "data bits: %d \n" - + "total bits: %d (remainder: %d) \n" - + "bitsperframe: %d \n", - 8 * l3_side.main_data_begin, gfc.ResvSize, - l3_side.resvDrain_post, l3_side.resvDrain_pre, - 8 * gfc.sideinfo_len, bits - l3_side.resvDrain_post - 8 - * gfc.sideinfo_len, bits, bits % 8, bitsPerFrame); - - System.err.println("This is a fatal error. It has several possible causes:"); - System.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"); - System.err.println(" 9%% Your system is overclocked"); - System.err.println(" 1%% bug in LAME encoding library"); - - gfc.ResvSize = l3_side.main_data_begin * 8; - } - //; - assert(totbit % 8 == 0); - - if (totbit > 1000000000) { - /* - * to avoid totbit overflow, (at 8h encoding at 128kbs) lets reset - * bit counter - */ - var i; - for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i) - gfc.header[i].write_timing -= totbit; - totbit = 0; - } - - return 0; - }; - - /** - *

-     * copy data out of the internal MP3 bit buffer into a user supplied
-     *       unsigned char buffer.
-     *
-     *       mp3data=0      indicates data in buffer is an id3tags and VBR tags
-     *       mp3data=1      data is real mp3 frame data.
-     * 
- */ - this.copy_buffer = function (gfc, buffer, bufferPos, size, mp3data) { - var minimum = bufByteIdx + 1; - if (minimum <= 0) - return 0; - if (size != 0 && minimum > size) { - /* buffer is too small */ - return -1; - } - System.arraycopy(buf, 0, buffer, bufferPos, minimum); - bufByteIdx = -1; - bufBitIdx = 0; - - if (mp3data != 0) { - var crc = new_int(1); - crc[0] = gfc.nMusicCRC; - vbr.updateMusicCRC(crc, buffer, bufferPos, minimum); - gfc.nMusicCRC = crc[0]; - - /** - * sum number of bytes belonging to the mp3 stream this info will be - * written into the Xing/LAME header for seeking - */ - if (minimum > 0) { - gfc.VBR_seek_table.nBytesWritten += minimum; - } - - if (gfc.decode_on_the_fly) { /* decode the frame */ - var pcm_buf = new_float_n([2, 1152]); - var mp3_in = minimum; - var samples_out = -1; - var i; - - /* re-synthesis to pcm. Repeat until we get a samples_out=0 */ - while (samples_out != 0) { - - samples_out = mpg.hip_decode1_unclipped(gfc.hip, buffer, - bufferPos, mp3_in, pcm_buf[0], pcm_buf[1]); - /* - * samples_out = 0: need more data to decode samples_out = - * -1: error. Lets assume 0 pcm output samples_out = number - * of samples output - */ - - /* - * set the lenght of the mp3 input buffer to zero, so that - * in the next iteration of the loop we will be querying - * mpglib about buffered data - */ - mp3_in = 0; - - if (samples_out == -1) { - /* - * error decoding. Not fatal, but might screw up the - * ReplayGain tag. What should we do? Ignore for now - */ - samples_out = 0; - } - if (samples_out > 0) { - /* process the PCM data */ - - /* - * this should not be possible, and indicates we have - * overflown the pcm_buf buffer - */ - assert(samples_out <= 1152); - - if (gfc.findPeakSample) { - for (i = 0; i < samples_out; i++) { - if (pcm_buf[0][i] > gfc.PeakSample) - gfc.PeakSample = pcm_buf[0][i]; - else if (-pcm_buf[0][i] > gfc.PeakSample) - gfc.PeakSample = -pcm_buf[0][i]; - } - if (gfc.channels_out > 1) - for (i = 0; i < samples_out; i++) { - if (pcm_buf[1][i] > gfc.PeakSample) - gfc.PeakSample = pcm_buf[1][i]; - else if (-pcm_buf[1][i] > gfc.PeakSample) - gfc.PeakSample = -pcm_buf[1][i]; - } - } - - if (gfc.findReplayGain) - if (ga.AnalyzeSamples(gfc.rgdata, pcm_buf[0], 0, - pcm_buf[1], 0, samples_out, - gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR) - return -6; - - } - /* if (samples_out>0) */ - } - /* while (samples_out!=0) */ - } - /* if (gfc.decode_on_the_fly) */ - - } - /* if (mp3data) */ - return minimum; - }; - - this.init_bit_stream_w = function (gfc) { - buf = new_byte(Lame.LAME_MAXMP3BUFFER); - - gfc.h_ptr = gfc.w_ptr = 0; - gfc.header[gfc.h_ptr].write_timing = 0; - bufByteIdx = -1; - bufBitIdx = 0; - totbit = 0; - }; - - // From machine.h - - -} - -module.exports = BitStream; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CBRNewIterationLoop.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CBRNewIterationLoop.js deleted file mode 100644 index 7ebdd2b39..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CBRNewIterationLoop.js +++ /dev/null @@ -1,92 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var MeanBits = require('./MeanBits.js'); -var Encoder = require('./Encoder.js'); -var L3Side = require('./L3Side.js'); -var LameInternalFlags = require('./LameInternalFlags.js'); - -function CBRNewIterationLoop(_quantize) { - var quantize = _quantize; - this.quantize = quantize; - this.iteration_loop = function(gfp, pe, ms_ener_ratio, ratio) { - var gfc = gfp.internal_flags; - var l3_xmin = new_float(L3Side.SFBMAX); - var xrpow = new_float(576); - var targ_bits = new_int(2); - var mean_bits = 0, max_bits; - var l3_side = gfc.l3_side; - - var mb = new MeanBits(mean_bits); - this.quantize.rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - /* quantize! */ - for (var gr = 0; gr < gfc.mode_gr; gr++) { - - /* - * calculate needed bits - */ - max_bits = this.quantize.qupvt.on_pe(gfp, pe, targ_bits, mean_bits, - gr, gr); - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - this.quantize.ms_convert(gfc.l3_side, gr); - this.quantize.qupvt.reduce_side(targ_bits, ms_ener_ratio[gr], - mean_bits, max_bits); - } - - for (var ch = 0; ch < gfc.channels_out; ch++) { - var adjust, masking_lower_db; - var cod_info = l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = Math.pow(10.0, - masking_lower_db * 0.1); - - /* - * init_outer_loop sets up cod_info, scalefac and xrpow - */ - this.quantize.init_outer_loop(gfc, cod_info); - if (this.quantize.init_xrpow(gfc, cod_info, xrpow)) { - /* - * xr contains energy we will have to encode calculate the - * masking abilities find some good quantization in - * outer_loop - */ - this.quantize.qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin); - this.quantize.outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, - targ_bits[ch]); - } - - this.quantize.iteration_finish_one(gfc, gr, ch); - assert (cod_info.part2_3_length <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - assert (cod_info.part2_3_length <= targ_bits[ch]); - } /* for ch */ - } /* for gr */ - - this.quantize.rv.ResvFrameEnd(gfc, mean_bits); - } -} -module.exports = CBRNewIterationLoop; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseData.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseData.js deleted file mode 100644 index 096353b2c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseData.js +++ /dev/null @@ -1,14 +0,0 @@ -var common = require('./common.js'); -var new_float = common.new_float; -var new_int = common.new_int; -var assert = common.assert; - -function CalcNoiseData() { - this.global_gain = 0; - this.sfb_count1 = 0; - this.step = new_int(39); - this.noise = new_float(39); - this.noise_log = new_float(39); -} - -module.exports = CalcNoiseData; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseResult.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseResult.js deleted file mode 100644 index a96cb3263..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/CalcNoiseResult.js +++ /dev/null @@ -1,27 +0,0 @@ -//package mp3; - -function CalcNoiseResult() { - /** - * sum of quantization noise > masking - */ - this.over_noise = 0.; - /** - * sum of all quantization noise - */ - this.tot_noise = 0.; - /** - * max quantization noise - */ - this.max_noise = 0.; - /** - * number of quantization noise > masking - */ - this.over_count = 0; - /** - * SSD-like cost of distorted bands - */ - this.over_SSD = 0; - this.bits = 0; -} - -module.exports = CalcNoiseResult; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Encoder.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Encoder.js deleted file mode 100644 index 3c43761a9..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Encoder.js +++ /dev/null @@ -1,663 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -/** - * ENCDELAY The encoder delay. - * - * Minimum allowed is MDCTDELAY (see below) - * - * The first 96 samples will be attenuated, so using a value less than 96 - * will result in corrupt data for the first 96-ENCDELAY samples. - * - * suggested: 576 set to 1160 to sync with FhG. - */ -Encoder.ENCDELAY = 576; -/** - * make sure there is at least one complete frame after the last frame - * containing real data - * - * Using a value of 288 would be sufficient for a a very sophisticated - * decoder that can decode granule-by-granule instead of frame by frame. But - * lets not assume this, and assume the decoder will not decode frame N - * unless it also has data for frame N+1 - */ -Encoder.POSTDELAY = 1152; - -/** - * delay of the MDCT used in mdct.c original ISO routines had a delay of - * 528! Takehiro's routines: - */ -Encoder.MDCTDELAY = 48; -Encoder.FFTOFFSET = (224 + Encoder.MDCTDELAY); - -/** - * Most decoders, including the one we use, have a delay of 528 samples. - */ -Encoder.DECDELAY = 528; - -/** - * number of subbands - */ -Encoder.SBLIMIT = 32; - -/** - * parition bands bands - */ -Encoder.CBANDS = 64; - -/** - * number of critical bands/scale factor bands where masking is computed - */ -Encoder.SBPSY_l = 21; -Encoder.SBPSY_s = 12; - -/** - * total number of scalefactor bands encoded - */ -Encoder.SBMAX_l = 22; -Encoder.SBMAX_s = 13; -Encoder.PSFB21 = 6; -Encoder.PSFB12 = 6; - -/** - * FFT sizes - */ -Encoder.BLKSIZE = 1024; -Encoder.HBLKSIZE = (Encoder.BLKSIZE / 2 + 1); -Encoder.BLKSIZE_s = 256; -Encoder.HBLKSIZE_s = (Encoder.BLKSIZE_s / 2 + 1); - -Encoder.NORM_TYPE = 0; -Encoder.START_TYPE = 1; -Encoder.SHORT_TYPE = 2; -Encoder.STOP_TYPE = 3; - -/** - *
- * Mode Extention:
- * When we are in stereo mode, there are 4 possible methods to store these
- * two channels. The stereo modes -m? are using a subset of them.
- *
- *  -ms: MPG_MD_LR_LR
- *  -mj: MPG_MD_LR_LR and MPG_MD_MS_LR
- *  -mf: MPG_MD_MS_LR
- *  -mi: all
- * 
- */ -Encoder.MPG_MD_LR_LR = 0; -Encoder.MPG_MD_LR_I = 1; -Encoder.MPG_MD_MS_LR = 2; -Encoder.MPG_MD_MS_I = 3; - -Encoder.fircoef = [-0.0207887 * 5, -0.0378413 * 5, - -0.0432472 * 5, -0.031183 * 5, 7.79609e-18 * 5, 0.0467745 * 5, - 0.10091 * 5, 0.151365 * 5, 0.187098 * 5]; - -function Encoder() { - var NewMDCT = require('./NewMDCT.js'); - var III_psy_ratio = require('./III_psy_ratio.js'); - var MPEGMode = require('./MPEGMode.js'); - - var FFTOFFSET = Encoder.FFTOFFSET; - var MPG_MD_MS_LR = Encoder.MPG_MD_MS_LR; - //BitStream bs; - //PsyModel psy; - //VBRTag vbr; - //QuantizePVT qupvt; - var bs = null; - this.psy = null; - var psy = null; - var vbr = null; - var qupvt = null; - - //public final void setModules(BitStream bs, PsyModel psy, QuantizePVT qupvt, - // VBRTag vbr) { - this.setModules = function (_bs, _psy, _qupvt, _vbr) { - bs = _bs; - this.psy = _psy; - psy = _psy; - vbr = _vbr; - qupvt = _qupvt; - }; - - var newMDCT = new NewMDCT(); - - /*********************************************************************** - * - * encoder and decoder delays - * - ***********************************************************************/ - - /** - *
-     * layer III enc->dec delay:  1056 (1057?)   (observed)
-     * layer  II enc->dec delay:   480  (481?)   (observed)
-     *
-     * polyphase 256-16             (dec or enc)        = 240
-     * mdct      256+32  (9*32)     (dec or enc)        = 288
-     * total:    512+16
-     *
-     * My guess is that delay of polyphase filterbank is actualy 240.5
-     * (there are technical reasons for this, see postings in mp3encoder).
-     * So total Encode+Decode delay = ENCDELAY + 528 + 1
-     * 
- */ - - - /** - * auto-adjust of ATH, useful for low volume Gabriel Bouvigne 3 feb 2001 - * - * modifies some values in gfp.internal_flags.ATH (gfc.ATH) - */ -//private void adjust_ATH(final LameInternalFlags gfc) { - function adjust_ATH(gfc) { - var gr2_max, max_pow; - - if (gfc.ATH.useAdjust == 0) { - gfc.ATH.adjust = 1.0; - /* no adjustment */ - return; - } - - /* jd - 2001 mar 12, 27, jun 30 */ - /* loudness based on equal loudness curve; */ - /* use granule with maximum combined loudness */ - max_pow = gfc.loudness_sq[0][0]; - gr2_max = gfc.loudness_sq[1][0]; - if (gfc.channels_out == 2) { - max_pow += gfc.loudness_sq[0][1]; - gr2_max += gfc.loudness_sq[1][1]; - } else { - max_pow += max_pow; - gr2_max += gr2_max; - } - if (gfc.mode_gr == 2) { - max_pow = Math.max(max_pow, gr2_max); - } - max_pow *= 0.5; - /* max_pow approaches 1.0 for full band noise */ - - /* jd - 2001 mar 31, jun 30 */ - /* user tuning of ATH adjustment region */ - max_pow *= gfc.ATH.aaSensitivityP; - - /* - * adjust ATH depending on range of maximum value - */ - - /* jd - 2001 feb27, mar12,20, jun30, jul22 */ - /* continuous curves based on approximation */ - /* to GB's original values. */ - /* For an increase in approximate loudness, */ - /* set ATH adjust to adjust_limit immediately */ - /* after a delay of one frame. */ - /* For a loudness decrease, reduce ATH adjust */ - /* towards adjust_limit gradually. */ - /* max_pow is a loudness squared or a power. */ - if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */ - if (gfc.ATH.adjust >= 1.0) { - gfc.ATH.adjust = 1.0; - } else { - /* preceding frame has lower ATH adjust; */ - /* ascend only to the preceding adjust_limit */ - /* in case there is leading low volume */ - if (gfc.ATH.adjust < gfc.ATH.adjustLimit) { - gfc.ATH.adjust = gfc.ATH.adjustLimit; - } - } - gfc.ATH.adjustLimit = 1.0; - } else { /* adjustment curve */ - /* about 32 dB maximum adjust (0.000625) */ - var adj_lim_new = 31.98 * max_pow + 0.000625; - if (gfc.ATH.adjust >= adj_lim_new) { /* descend gradually */ - gfc.ATH.adjust *= adj_lim_new * 0.075 + 0.925; - if (gfc.ATH.adjust < adj_lim_new) { /* stop descent */ - gfc.ATH.adjust = adj_lim_new; - } - } else { /* ascend */ - if (gfc.ATH.adjustLimit >= adj_lim_new) { - gfc.ATH.adjust = adj_lim_new; - } else { - /* preceding frame has lower ATH adjust; */ - /* ascend only to the preceding adjust_limit */ - if (gfc.ATH.adjust < gfc.ATH.adjustLimit) { - gfc.ATH.adjust = gfc.ATH.adjustLimit; - } - } - } - gfc.ATH.adjustLimit = adj_lim_new; - } - } - - /** - *
-     *  some simple statistics
-     *
-     *  bitrate index 0: free bitrate . not allowed in VBR mode
-     *  : bitrates, kbps depending on MPEG version
-     *  bitrate index 15: forbidden
-     *
-     *  mode_ext:
-     *  0:  LR
-     *  1:  LR-i
-     *  2:  MS
-     *  3:  MS-i
-     * 
- */ - function updateStats(gfc) { - var gr, ch; - assert(0 <= gfc.bitrate_index && gfc.bitrate_index < 16); - assert(0 <= gfc.mode_ext && gfc.mode_ext < 4); - - /* count bitrate indices */ - gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][4]++; - gfc.bitrate_stereoMode_Hist[15][4]++; - - /* count 'em for every mode extension in case of 2 channel encoding */ - if (gfc.channels_out == 2) { - gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][gfc.mode_ext]++; - gfc.bitrate_stereoMode_Hist[15][gfc.mode_ext]++; - } - for (gr = 0; gr < gfc.mode_gr; ++gr) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - var bt = gfc.l3_side.tt[gr][ch].block_type | 0; - if (gfc.l3_side.tt[gr][ch].mixed_block_flag != 0) - bt = 4; - gfc.bitrate_blockType_Hist[gfc.bitrate_index][bt]++; - gfc.bitrate_blockType_Hist[gfc.bitrate_index][5]++; - gfc.bitrate_blockType_Hist[15][bt]++; - gfc.bitrate_blockType_Hist[15][5]++; - } - } - } - - function lame_encode_frame_init(gfp, inbuf) { - var gfc = gfp.internal_flags; - - var ch, gr; - - if (gfc.lame_encode_frame_init == 0) { - /* prime the MDCT/polyphase filterbank with a short block */ - var i, j; - var primebuff0 = new_float(286 + 1152 + 576); - var primebuff1 = new_float(286 + 1152 + 576); - gfc.lame_encode_frame_init = 1; - for (i = 0, j = 0; i < 286 + 576 * (1 + gfc.mode_gr); ++i) { - if (i < 576 * gfc.mode_gr) { - primebuff0[i] = 0; - if (gfc.channels_out == 2) - primebuff1[i] = 0; - } else { - primebuff0[i] = inbuf[0][j]; - if (gfc.channels_out == 2) - primebuff1[i] = inbuf[1][j]; - ++j; - } - } - /* polyphase filtering / mdct */ - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.l3_side.tt[gr][ch].block_type = Encoder.SHORT_TYPE; - } - } - newMDCT.mdct_sub48(gfc, primebuff0, primebuff1); - - /* check FFT will not use a negative starting offset */ - assert(576 >= Encoder.FFTOFFSET); - /* check if we have enough data for FFT */ - assert(gfc.mf_size >= (Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET)); - /* check if we have enough data for polyphase filterbank */ - assert(gfc.mf_size >= (512 + gfp.framesize - 32)); - } - - } - - /** - *
-     * encodeframe()           Layer 3
-     *
-     * encode a single frame
-     *
-     *
-     *    lame_encode_frame()
-     *
-     *
-     *                           gr 0            gr 1
-     *    inbuf:           |--------------|--------------|--------------|
-     *
-     *
-     *    Polyphase (18 windows, each shifted 32)
-     *    gr 0:
-     *    window1          <----512---.
-     *    window18                 <----512---.
-     *
-     *    gr 1:
-     *    window1                         <----512---.
-     *    window18                                <----512---.
-     *
-     *
-     *
-     *    MDCT output:  |--------------|--------------|--------------|
-     *
-     *    FFT's                    <---------1024---------.
-     *                                             <---------1024-------.
-     *
-     *
-     *
-     *        inbuf = buffer of PCM data size=MP3 framesize
-     *        encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY
-     *        so the MDCT coefficints are from inbuf[ch][-MDCTDELAY]
-     *
-     *        psy-model FFT has a 1 granule delay, so we feed it data for the
-     *        next granule.
-     *        FFT is centered over granule:  224+576+224
-     *        So FFT starts at:   576-224-MDCTDELAY
-     *
-     *        MPEG2:  FFT ends at:  BLKSIZE+576-224-MDCTDELAY      (1328)
-     *        MPEG1:  FFT ends at:  BLKSIZE+2*576-224-MDCTDELAY    (1904)
-     *
-     *        MPEG2:  polyphase first window:  [0..511]
-     *                          18th window:   [544..1055]          (1056)
-     *        MPEG1:            36th window:   [1120..1631]         (1632)
-     *                data needed:  512+framesize-32
-     *
-     *        A close look newmdct.c shows that the polyphase filterbank
-     *        only uses data from [0..510] for each window.  Perhaps because the window
-     *        used by the filterbank is zero for the last point, so Takehiro's
-     *        code doesn't bother to compute with it.
-     *
-     *        FFT starts at 576-224-MDCTDELAY (304)  = 576-FFTOFFSET
-     *
-     * 
- */ - - - this.lame_encode_mp3_frame = function (gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) { - var mp3count; - var masking_LR = new_array_n([2, 2]); - /* - * LR masking & - * energy - */ - masking_LR[0][0] = new III_psy_ratio(); - masking_LR[0][1] = new III_psy_ratio(); - masking_LR[1][0] = new III_psy_ratio(); - masking_LR[1][1] = new III_psy_ratio(); - var masking_MS = new_array_n([2, 2]); - /* MS masking & energy */ - masking_MS[0][0] = new III_psy_ratio(); - masking_MS[0][1] = new III_psy_ratio(); - masking_MS[1][0] = new III_psy_ratio(); - masking_MS[1][1] = new III_psy_ratio(); - //III_psy_ratio masking[][]; - var masking; - /* pointer to selected maskings */ - var inbuf = [null, null]; - var gfc = gfp.internal_flags; - - var tot_ener = new_float_n([2, 4]); - var ms_ener_ratio = [.5, .5]; - var pe = [[0., 0.], [0., 0.]]; - var pe_MS = [[0., 0.], [0., 0.]]; - -//float[][] pe_use; - var pe_use; - - var ch, gr; - - inbuf[0] = inbuf_l; - inbuf[1] = inbuf_r; - - if (gfc.lame_encode_frame_init == 0) { - /* first run? */ - lame_encode_frame_init(gfp, inbuf); - - } - - /********************** padding *****************************/ - /** - *
-         * padding method as described in
-         * "MPEG-Layer3 / Bitstream Syntax and Decoding"
-         * by Martin Sieler, Ralph Sperschneider
-         *
-         * note: there is no padding for the very first frame
-         *
-         * Robert Hegemann 2000-06-22
-         * 
- */ - gfc.padding = 0; - if ((gfc.slot_lag -= gfc.frac_SpF) < 0) { - gfc.slot_lag += gfp.out_samplerate; - gfc.padding = 1; - } - - /**************************************** - * Stage 1: psychoacoustic model * - ****************************************/ - - if (gfc.psymodel != 0) { - /* - * psychoacoustic model psy model has a 1 granule (576) delay that - * we must compensate for (mt 6/99). - */ - var ret; - var bufp = [null, null]; - /* address of beginning of left & right granule */ - var bufpPos = 0; - /* address of beginning of left & right granule */ - var blocktype = new_int(2); - - for (gr = 0; gr < gfc.mode_gr; gr++) { - - for (ch = 0; ch < gfc.channels_out; ch++) { - bufp[ch] = inbuf[ch]; - bufpPos = 576 + gr * 576 - Encoder.FFTOFFSET; - } - if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) { - ret = psy.L3psycho_anal_vbr(gfp, bufp, bufpPos, gr, - masking_LR, masking_MS, pe[gr], pe_MS[gr], - tot_ener[gr], blocktype); - } else { - ret = psy.L3psycho_anal_ns(gfp, bufp, bufpPos, gr, - masking_LR, masking_MS, pe[gr], pe_MS[gr], - tot_ener[gr], blocktype); - } - if (ret != 0) - return -4; - - if (gfp.mode == MPEGMode.JOINT_STEREO) { - ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3]; - if (ms_ener_ratio[gr] > 0) - ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr]; - } - - /* block type flags */ - for (ch = 0; ch < gfc.channels_out; ch++) { - var cod_info = gfc.l3_side.tt[gr][ch]; - cod_info.block_type = blocktype[ch]; - cod_info.mixed_block_flag = 0; - } - } - } else { - /* no psy model */ - for (gr = 0; gr < gfc.mode_gr; gr++) - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.l3_side.tt[gr][ch].block_type = Encoder.NORM_TYPE; - gfc.l3_side.tt[gr][ch].mixed_block_flag = 0; - pe_MS[gr][ch] = pe[gr][ch] = 700; - } - } - - /* auto-adjust of ATH, useful for low volume */ - adjust_ATH(gfc); - - /**************************************** - * Stage 2: MDCT * - ****************************************/ - - /* polyphase filtering / mdct */ - newMDCT.mdct_sub48(gfc, inbuf[0], inbuf[1]); - - /**************************************** - * Stage 3: MS/LR decision * - ****************************************/ - - /* Here will be selected MS or LR coding of the 2 stereo channels */ - gfc.mode_ext = Encoder.MPG_MD_LR_LR; - - if (gfp.force_ms) { - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - } else if (gfp.mode == MPEGMode.JOINT_STEREO) { - /* - * ms_ratio = is scaled, for historical reasons, to look like a - * ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R - * uncorrelated - */ - - /** - *
-             * [0] and [1] are the results for the two granules in MPEG-1,
-             * in MPEG-2 it's only a faked averaging of the same value
-             * _prev is the value of the last granule of the previous frame
-             * _next is the value of the first granule of the next frame
-             * 
- */ - - var sum_pe_MS = 0.; - var sum_pe_LR = 0.; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - sum_pe_MS += pe_MS[gr][ch]; - sum_pe_LR += pe[gr][ch]; - } - } - - /* based on PE: M/S coding would not use much more bits than L/R */ - if (sum_pe_MS <= 1.00 * sum_pe_LR) { - - var gi0 = gfc.l3_side.tt[0]; - var gi1 = gfc.l3_side.tt[gfc.mode_gr - 1]; - - if (gi0[0].block_type == gi0[1].block_type - && gi1[0].block_type == gi1[1].block_type) { - - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - } - } - } - - /* bit and noise allocation */ - if (gfc.mode_ext == MPG_MD_MS_LR) { - masking = masking_MS; - /* use MS masking */ - pe_use = pe_MS; - } else { - masking = masking_LR; - /* use LR masking */ - pe_use = pe; - } - - /* copy data for MP3 frame analyzer */ - if (gfp.analysis && gfc.pinfo != null) { - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.pinfo.ms_ratio[gr] = gfc.ms_ratio[gr]; - gfc.pinfo.ms_ener_ratio[gr] = ms_ener_ratio[gr]; - gfc.pinfo.blocktype[gr][ch] = gfc.l3_side.tt[gr][ch].block_type; - gfc.pinfo.pe[gr][ch] = pe_use[gr][ch]; - System.arraycopy(gfc.l3_side.tt[gr][ch].xr, 0, - gfc.pinfo.xr[gr][ch], 0, 576); - /* - * in psymodel, LR and MS data was stored in pinfo. switch - * to MS data: - */ - if (gfc.mode_ext == MPG_MD_MS_LR) { - gfc.pinfo.ers[gr][ch] = gfc.pinfo.ers[gr][ch + 2]; - System.arraycopy(gfc.pinfo.energy[gr][ch + 2], 0, - gfc.pinfo.energy[gr][ch], 0, - gfc.pinfo.energy[gr][ch].length); - } - } - } - } - - /**************************************** - * Stage 4: quantization loop * - ****************************************/ - - if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr) { - - var i; - var f; - - for (i = 0; i < 18; i++) - gfc.nsPsy.pefirbuf[i] = gfc.nsPsy.pefirbuf[i + 1]; - - f = 0.0; - for (gr = 0; gr < gfc.mode_gr; gr++) - for (ch = 0; ch < gfc.channels_out; ch++) - f += pe_use[gr][ch]; - gfc.nsPsy.pefirbuf[18] = f; - - f = gfc.nsPsy.pefirbuf[9]; - for (i = 0; i < 9; i++) - f += (gfc.nsPsy.pefirbuf[i] + gfc.nsPsy.pefirbuf[18 - i]) - * Encoder.fircoef[i]; - - f = (670 * 5 * gfc.mode_gr * gfc.channels_out) / f; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - pe_use[gr][ch] *= f; - } - } - } - gfc.iteration_loop.iteration_loop(gfp, pe_use, ms_ener_ratio, masking); - - /**************************************** - * Stage 5: bitstream formatting * - ****************************************/ - - /* write the frame to the bitstream */ - bs.format_bitstream(gfp); - - /* copy mp3 bit buffer into array */ - mp3count = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 1); - - if (gfp.bWriteVbrTag) - vbr.addVbrFrame(gfp); - - if (gfp.analysis && gfc.pinfo != null) { - for (ch = 0; ch < gfc.channels_out; ch++) { - var j; - for (j = 0; j < FFTOFFSET; j++) - gfc.pinfo.pcmdata[ch][j] = gfc.pinfo.pcmdata[ch][j - + gfp.framesize]; - for (j = FFTOFFSET; j < 1600; j++) { - gfc.pinfo.pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET]; - } - } - qupvt.set_frame_pinfo(gfp, masking); - } - - updateStats(gfc); - - return mp3count; - } -} - - -module.exports = Encoder; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/FFT.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/FFT.js deleted file mode 100644 index b3bdc269e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/FFT.js +++ /dev/null @@ -1,246 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); - -function FFT() { - - var window = new_float(Encoder.BLKSIZE); - var window_s = new_float(Encoder.BLKSIZE_s / 2); - - var costab = [ - 9.238795325112867e-01, 3.826834323650898e-01, - 9.951847266721969e-01, 9.801714032956060e-02, - 9.996988186962042e-01, 2.454122852291229e-02, - 9.999811752826011e-01, 6.135884649154475e-03 - ]; - - function fht(fz, fzPos, n) { - var tri = 0; - var k4; - var fi; - var gi; - - n <<= 1; - /* to get BLKSIZE, because of 3DNow! ASM routine */ - var fn = fzPos + n; - k4 = 4; - do { - var s1, c1; - var i, k1, k2, k3, kx; - kx = k4 >> 1; - k1 = k4; - k2 = k4 << 1; - k3 = k2 + k1; - k4 = k2 << 1; - fi = fzPos; - gi = fi + kx; - do { - var f0, f1, f2, f3; - f1 = fz[fi + 0] - fz[fi + k1]; - f0 = fz[fi + 0] + fz[fi + k1]; - f3 = fz[fi + k2] - fz[fi + k3]; - f2 = fz[fi + k2] + fz[fi + k3]; - fz[fi + k2] = f0 - f2; - fz[fi + 0] = f0 + f2; - fz[fi + k3] = f1 - f3; - fz[fi + k1] = f1 + f3; - f1 = fz[gi + 0] - fz[gi + k1]; - f0 = fz[gi + 0] + fz[gi + k1]; - f3 = (Util.SQRT2 * fz[gi + k3]); - f2 = (Util.SQRT2 * fz[gi + k2]); - fz[gi + k2] = f0 - f2; - fz[gi + 0] = f0 + f2; - fz[gi + k3] = f1 - f3; - fz[gi + k1] = f1 + f3; - gi += k4; - fi += k4; - } while (fi < fn); - c1 = costab[tri + 0]; - s1 = costab[tri + 1]; - for (i = 1; i < kx; i++) { - var c2, s2; - c2 = 1 - (2 * s1) * s1; - s2 = (2 * s1) * c1; - fi = fzPos + i; - gi = fzPos + k1 - i; - do { - var a, b, g0, f0, f1, g1, f2, g2, f3, g3; - b = s2 * fz[fi + k1] - c2 * fz[gi + k1]; - a = c2 * fz[fi + k1] + s2 * fz[gi + k1]; - f1 = fz[fi + 0] - a; - f0 = fz[fi + 0] + a; - g1 = fz[gi + 0] - b; - g0 = fz[gi + 0] + b; - b = s2 * fz[fi + k3] - c2 * fz[gi + k3]; - a = c2 * fz[fi + k3] + s2 * fz[gi + k3]; - f3 = fz[fi + k2] - a; - f2 = fz[fi + k2] + a; - g3 = fz[gi + k2] - b; - g2 = fz[gi + k2] + b; - b = s1 * f2 - c1 * g3; - a = c1 * f2 + s1 * g3; - fz[fi + k2] = f0 - a; - fz[fi + 0] = f0 + a; - fz[gi + k3] = g1 - b; - fz[gi + k1] = g1 + b; - b = c1 * g2 - s1 * f3; - a = s1 * g2 + c1 * f3; - fz[gi + k2] = g0 - a; - fz[gi + 0] = g0 + a; - fz[fi + k3] = f1 - b; - fz[fi + k1] = f1 + b; - gi += k4; - fi += k4; - } while (fi < fn); - c2 = c1; - c1 = c2 * costab[tri + 0] - s1 * costab[tri + 1]; - s1 = c2 * costab[tri + 1] + s1 * costab[tri + 0]; - } - tri += 2; - } while (k4 < n); - } - - var rv_tbl = [0x00, 0x80, 0x40, - 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, - 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, - 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, - 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, - 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, - 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, - 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, - 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c, - 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, - 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, - 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, - 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, - 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, - 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, - 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, - 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46, - 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, - 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, - 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, - 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, - 0xde, 0x3e, 0xbe, 0x7e, 0xfe]; - - this.fft_short = function (gfc, x_real, chn, buffer, bufPos) { - for (var b = 0; b < 3; b++) { - var x = Encoder.BLKSIZE_s / 2; - var k = 0xffff & ((576 / 3) * (b + 1)); - var j = Encoder.BLKSIZE_s / 8 - 1; - do { - var f0, f1, f2, f3, w; - var i = rv_tbl[j << 2] & 0xff; - - f0 = window_s[i] * buffer[chn][bufPos + i + k]; - w = window_s[0x7f - i] * buffer[chn][bufPos + i + k + 0x80]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window_s[i + 0x40] * buffer[chn][bufPos + i + k + 0x40]; - w = window_s[0x3f - i] * buffer[chn][bufPos + i + k + 0xc0]; - f3 = f2 - w; - f2 = f2 + w; - - x -= 4; - x_real[b][x + 0] = f0 + f2; - x_real[b][x + 2] = f0 - f2; - x_real[b][x + 1] = f1 + f3; - x_real[b][x + 3] = f1 - f3; - - f0 = window_s[i + 0x01] * buffer[chn][bufPos + i + k + 0x01]; - w = window_s[0x7e - i] * buffer[chn][bufPos + i + k + 0x81]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window_s[i + 0x41] * buffer[chn][bufPos + i + k + 0x41]; - w = window_s[0x3e - i] * buffer[chn][bufPos + i + k + 0xc1]; - f3 = f2 - w; - f2 = f2 + w; - - x_real[b][x + Encoder.BLKSIZE_s / 2 + 0] = f0 + f2; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 2] = f0 - f2; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 1] = f1 + f3; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 3] = f1 - f3; - } while (--j >= 0); - - fht(x_real[b], x, Encoder.BLKSIZE_s / 2); - /* BLKSIZE_s/2 because of 3DNow! ASM routine */ - /* BLKSIZE/2 because of 3DNow! ASM routine */ - } - } - - this.fft_long = function (gfc, y, chn, buffer, bufPos) { - var jj = Encoder.BLKSIZE / 8 - 1; - var x = Encoder.BLKSIZE / 2; - - do { - var f0, f1, f2, f3, w; - var i = rv_tbl[jj] & 0xff; - f0 = window[i] * buffer[chn][bufPos + i]; - w = window[i + 0x200] * buffer[chn][bufPos + i + 0x200]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window[i + 0x100] * buffer[chn][bufPos + i + 0x100]; - w = window[i + 0x300] * buffer[chn][bufPos + i + 0x300]; - f3 = f2 - w; - f2 = f2 + w; - - x -= 4; - y[x + 0] = f0 + f2; - y[x + 2] = f0 - f2; - y[x + 1] = f1 + f3; - y[x + 3] = f1 - f3; - - f0 = window[i + 0x001] * buffer[chn][bufPos + i + 0x001]; - w = window[i + 0x201] * buffer[chn][bufPos + i + 0x201]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window[i + 0x101] * buffer[chn][bufPos + i + 0x101]; - w = window[i + 0x301] * buffer[chn][bufPos + i + 0x301]; - f3 = f2 - w; - f2 = f2 + w; - - y[x + Encoder.BLKSIZE / 2 + 0] = f0 + f2; - y[x + Encoder.BLKSIZE / 2 + 2] = f0 - f2; - y[x + Encoder.BLKSIZE / 2 + 1] = f1 + f3; - y[x + Encoder.BLKSIZE / 2 + 3] = f1 - f3; - } while (--jj >= 0); - - fht(y, x, Encoder.BLKSIZE / 2); - /* BLKSIZE/2 because of 3DNow! ASM routine */ - } - - this.init_fft = function (gfc) { - /* The type of window used here will make no real difference, but */ - /* - * in the interest of merging nspsytune stuff - switch to blackman - * window - */ - for (var i = 0; i < Encoder.BLKSIZE; i++) - /* blackman window */ - window[i] = (0.42 - 0.5 * Math.cos(2 * Math.PI * (i + .5) - / Encoder.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (i + .5) - / Encoder.BLKSIZE)); - - for (var i = 0; i < Encoder.BLKSIZE_s / 2; i++) - window_s[i] = (0.5 * (1.0 - Math.cos(2.0 * Math.PI - * (i + 0.5) / Encoder.BLKSIZE_s))); - - } - -} - -module.exports = FFT; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GainAnalysis.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GainAnalysis.js deleted file mode 100644 index 7f893554a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GainAnalysis.js +++ /dev/null @@ -1,552 +0,0 @@ -/* - * ReplayGainAnalysis - analyzes input samples and give the recommended dB change - * Copyright (C) 2001 David Robinson and Glen Sawyer - * Improvements and optimizations added by Frank Klemm, and by Marcel Muller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * concept and filter values by David Robinson (David@Robinson.org) - * -- blame him if you think the idea is flawed - * original coding by Glen Sawyer (mp3gain@hotmail.com) - * -- blame him if you think this runs too slowly, or the coding is otherwise flawed - * - * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ ) - * -- credit him for all the _good_ programming ;) - * - * - * For an explanation of the concepts and the basic algorithms involved, go to: - * http://www.replaygain.org/ - */ - -/* - * Here's the deal. Call - * - * InitGainAnalysis ( long samplefreq ); - * - * to initialize everything. Call - * - * AnalyzeSamples ( var Float_t* left_samples, - * var Float_t* right_samples, - * size_t num_samples, - * int num_channels ); - * - * as many times as you want, with as many or as few samples as you want. - * If mono, pass the sample buffer in through left_samples, leave - * right_samples NULL, and make sure num_channels = 1. - * - * GetTitleGain() - * - * will return the recommended dB level change for all samples analyzed - * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis(). - * - * GetAlbumGain() - * - * will return the recommended dB level change for all samples analyzed - * since InitGainAnalysis() was called and finalized with GetTitleGain(). - * - * Pseudo-code to process an album: - * - * Float_t l_samples [4096]; - * Float_t r_samples [4096]; - * size_t num_samples; - * unsigned int num_songs; - * unsigned int i; - * - * InitGainAnalysis ( 44100 ); - * for ( i = 1; i <= num_songs; i++ ) { - * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 ) - * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 ); - * fprintf ("Recommended dB change for song %2d: %+6.2 dB\n", i, GetTitleGain() ); - * } - * fprintf ("Recommended dB change for whole album: %+6.2 dB\n", GetAlbumGain() ); - */ - -/* - * So here's the main source of potential code confusion: - * - * The filters applied to the incoming samples are IIR filters, - * meaning they rely on up to number of previous samples - * AND up to number of previous filtered samples. - * - * I set up the AnalyzeSamples routine to minimize memory usage and interface - * complexity. The speed isn't compromised too much (I don't think), but the - * internal complexity is higher than it should be for such a relatively - * simple routine. - * - * Optimization/clarity suggestions are welcome. - */ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -/** - * Table entries per dB - */ -GainAnalysis.STEPS_per_dB = 100.; -/** - * Table entries for 0...MAX_dB (normal max. values are 70...80 dB) - */ -GainAnalysis.MAX_dB = 120.; -GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES = -24601; -GainAnalysis.GAIN_ANALYSIS_ERROR = 0; -GainAnalysis.GAIN_ANALYSIS_OK = 1; -GainAnalysis.INIT_GAIN_ANALYSIS_ERROR = 0; -GainAnalysis.INIT_GAIN_ANALYSIS_OK = 1; - -GainAnalysis.YULE_ORDER = 10; -GainAnalysis.MAX_ORDER = GainAnalysis.YULE_ORDER; - -GainAnalysis.MAX_SAMP_FREQ = 48000; -GainAnalysis.RMS_WINDOW_TIME_NUMERATOR = 1; -GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR = 20; -GainAnalysis.MAX_SAMPLES_PER_WINDOW = ((GainAnalysis.MAX_SAMP_FREQ * GainAnalysis.RMS_WINDOW_TIME_NUMERATOR) / GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR + 1); - -function GainAnalysis() { - /** - * calibration value for 89dB - */ - var PINK_REF = 64.82; - - var YULE_ORDER = GainAnalysis.YULE_ORDER; - /** - * percentile which is louder than the proposed level - */ - var RMS_PERCENTILE = 0.95; - /** - * maximum allowed sample frequency [Hz] - */ - var MAX_SAMP_FREQ = GainAnalysis.MAX_SAMP_FREQ; - var RMS_WINDOW_TIME_NUMERATOR = GainAnalysis.RMS_WINDOW_TIME_NUMERATOR; - /** - * numerator / denominator = time slice size [s] - */ - var RMS_WINDOW_TIME_DENOMINATOR = GainAnalysis.RMS_WINDOW_TIME_DENOMINATOR; - /** - * max. Samples per Time slice - */ - var MAX_SAMPLES_PER_WINDOW = GainAnalysis.MAX_SAMPLES_PER_WINDOW; - - - var ABYule = [ - [0.03857599435200, -3.84664617118067, -0.02160367184185, - 7.81501653005538, -0.00123395316851, -11.34170355132042, - -0.00009291677959, 13.05504219327545, -0.01655260341619, - -12.28759895145294, 0.02161526843274, 9.48293806319790, - -0.02074045215285, -5.87257861775999, 0.00594298065125, - 2.75465861874613, 0.00306428023191, -0.86984376593551, - 0.00012025322027, 0.13919314567432, 0.00288463683916], - [0.05418656406430, -3.47845948550071, -0.02911007808948, - 6.36317777566148, -0.00848709379851, -8.54751527471874, - -0.00851165645469, 9.47693607801280, -0.00834990904936, - -8.81498681370155, 0.02245293253339, 6.85401540936998, - -0.02596338512915, -4.39470996079559, 0.01624864962975, - 2.19611684890774, -0.00240879051584, -0.75104302451432, - 0.00674613682247, 0.13149317958808, -0.00187763777362], - [0.15457299681924, -2.37898834973084, -0.09331049056315, - 2.84868151156327, -0.06247880153653, -2.64577170229825, - 0.02163541888798, 2.23697657451713, -0.05588393329856, - -1.67148153367602, 0.04781476674921, 1.00595954808547, - 0.00222312597743, -0.45953458054983, 0.03174092540049, - 0.16378164858596, -0.01390589421898, -0.05032077717131, - 0.00651420667831, 0.02347897407020, -0.00881362733839], - [0.30296907319327, -1.61273165137247, -0.22613988682123, - 1.07977492259970, -0.08587323730772, -0.25656257754070, - 0.03282930172664, -0.16276719120440, -0.00915702933434, - -0.22638893773906, -0.02364141202522, 0.39120800788284, - -0.00584456039913, -0.22138138954925, 0.06276101321749, - 0.04500235387352, -0.00000828086748, 0.02005851806501, - 0.00205861885564, 0.00302439095741, -0.02950134983287], - [0.33642304856132, -1.49858979367799, -0.25572241425570, - 0.87350271418188, -0.11828570177555, 0.12205022308084, - 0.11921148675203, -0.80774944671438, -0.07834489609479, - 0.47854794562326, -0.00469977914380, -0.12453458140019, - -0.00589500224440, -0.04067510197014, 0.05724228140351, - 0.08333755284107, 0.00832043980773, -0.04237348025746, - -0.01635381384540, 0.02977207319925, -0.01760176568150], - [0.44915256608450, -0.62820619233671, -0.14351757464547, - 0.29661783706366, -0.22784394429749, -0.37256372942400, - -0.01419140100551, 0.00213767857124, 0.04078262797139, - -0.42029820170918, -0.12398163381748, 0.22199650564824, - 0.04097565135648, 0.00613424350682, 0.10478503600251, - 0.06747620744683, -0.01863887810927, 0.05784820375801, - -0.03193428438915, 0.03222754072173, 0.00541907748707], - [0.56619470757641, -1.04800335126349, -0.75464456939302, - 0.29156311971249, 0.16242137742230, -0.26806001042947, - 0.16744243493672, 0.00819999645858, -0.18901604199609, - 0.45054734505008, 0.30931782841830, -0.33032403314006, - -0.27562961986224, 0.06739368333110, 0.00647310677246, - -0.04784254229033, 0.08647503780351, 0.01639907836189, - -0.03788984554840, 0.01807364323573, -0.00588215443421], - [0.58100494960553, -0.51035327095184, -0.53174909058578, - -0.31863563325245, -0.14289799034253, -0.20256413484477, - 0.17520704835522, 0.14728154134330, 0.02377945217615, - 0.38952639978999, 0.15558449135573, -0.23313271880868, - -0.25344790059353, -0.05246019024463, 0.01628462406333, - -0.02505961724053, 0.06920467763959, 0.02442357316099, - -0.03721611395801, 0.01818801111503, -0.00749618797172], - [0.53648789255105, -0.25049871956020, -0.42163034350696, - -0.43193942311114, -0.00275953611929, -0.03424681017675, - 0.04267842219415, -0.04678328784242, -0.10214864179676, - 0.26408300200955, 0.14590772289388, 0.15113130533216, - -0.02459864859345, -0.17556493366449, -0.11202315195388, - -0.18823009262115, -0.04060034127000, 0.05477720428674, - 0.04788665548180, 0.04704409688120, -0.02217936801134]]; - - var ABButter = [ - [0.98621192462708, -1.97223372919527, -1.97242384925416, - 0.97261396931306, 0.98621192462708], - [0.98500175787242, -1.96977855582618, -1.97000351574484, - 0.97022847566350, 0.98500175787242], - [0.97938932735214, -1.95835380975398, -1.95877865470428, - 0.95920349965459, 0.97938932735214], - [0.97531843204928, -1.95002759149878, -1.95063686409857, - 0.95124613669835, 0.97531843204928], - [0.97316523498161, -1.94561023566527, -1.94633046996323, - 0.94705070426118, 0.97316523498161], - [0.96454515552826, -1.92783286977036, -1.92909031105652, - 0.93034775234268, 0.96454515552826], - [0.96009142950541, -1.91858953033784, -1.92018285901082, - 0.92177618768381, 0.96009142950541], - [0.95856916599601, -1.91542108074780, -1.91713833199203, - 0.91885558323625, 0.95856916599601], - [0.94597685600279, -1.88903307939452, -1.89195371200558, - 0.89487434461664, 0.94597685600279]]; - - - /** - * When calling this procedure, make sure that ip[-order] and op[-order] - * point to real data - */ - //private void filterYule(final float[] input, int inputPos, float[] output, - //int outputPos, int nSamples, final float[] kernel) { - function filterYule(input, inputPos, output, outputPos, nSamples, kernel) { - - while ((nSamples--) != 0) { - /* 1e-10 is a hack to avoid slowdown because of denormals */ - output[outputPos] = 1e-10 + input[inputPos + 0] * kernel[0] - - output[outputPos - 1] * kernel[1] + input[inputPos - 1] - * kernel[2] - output[outputPos - 2] * kernel[3] - + input[inputPos - 2] * kernel[4] - output[outputPos - 3] - * kernel[5] + input[inputPos - 3] * kernel[6] - - output[outputPos - 4] * kernel[7] + input[inputPos - 4] - * kernel[8] - output[outputPos - 5] * kernel[9] - + input[inputPos - 5] * kernel[10] - output[outputPos - 6] - * kernel[11] + input[inputPos - 6] * kernel[12] - - output[outputPos - 7] * kernel[13] + input[inputPos - 7] - * kernel[14] - output[outputPos - 8] * kernel[15] - + input[inputPos - 8] * kernel[16] - output[outputPos - 9] - * kernel[17] + input[inputPos - 9] * kernel[18] - - output[outputPos - 10] * kernel[19] - + input[inputPos - 10] * kernel[20]; - ++outputPos; - ++inputPos; - } - } - -//private void filterButter(final float[] input, int inputPos, -// float[] output, int outputPos, int nSamples, final float[] kernel) { - function filterButter(input, inputPos, output, outputPos, nSamples, kernel) { - - while ((nSamples--) != 0) { - output[outputPos] = input[inputPos + 0] * kernel[0] - - output[outputPos - 1] * kernel[1] + input[inputPos - 1] - * kernel[2] - output[outputPos - 2] * kernel[3] - + input[inputPos - 2] * kernel[4]; - ++outputPos; - ++inputPos; - } - } - - /** - * @return INIT_GAIN_ANALYSIS_OK if successful, INIT_GAIN_ANALYSIS_ERROR if - * not - */ - function ResetSampleFrequency(rgData, samplefreq) { - /* zero out initial values */ - for (var i = 0; i < MAX_ORDER; i++) - rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.; - - switch (0 | (samplefreq)) { - case 48000: - rgData.reqindex = 0; - break; - case 44100: - rgData.reqindex = 1; - break; - case 32000: - rgData.reqindex = 2; - break; - case 24000: - rgData.reqindex = 3; - break; - case 22050: - rgData.reqindex = 4; - break; - case 16000: - rgData.reqindex = 5; - break; - case 12000: - rgData.reqindex = 6; - break; - case 11025: - rgData.reqindex = 7; - break; - case 8000: - rgData.reqindex = 8; - break; - default: - return INIT_GAIN_ANALYSIS_ERROR; - } - - rgData.sampleWindow = 0 | ((samplefreq * RMS_WINDOW_TIME_NUMERATOR - + RMS_WINDOW_TIME_DENOMINATOR - 1) / RMS_WINDOW_TIME_DENOMINATOR); - - rgData.lsum = 0.; - rgData.rsum = 0.; - rgData.totsamp = 0; - - Arrays.ill(rgData.A, 0); - - return INIT_GAIN_ANALYSIS_OK; - } - - this.InitGainAnalysis = function (rgData, samplefreq) { - if (ResetSampleFrequency(rgData, samplefreq) != INIT_GAIN_ANALYSIS_OK) { - return INIT_GAIN_ANALYSIS_ERROR; - } - - rgData.linpre = MAX_ORDER; - rgData.rinpre = MAX_ORDER; - rgData.lstep = MAX_ORDER; - rgData.rstep = MAX_ORDER; - rgData.lout = MAX_ORDER; - rgData.rout = MAX_ORDER; - - Arrays.fill(rgData.B, 0); - - return INIT_GAIN_ANALYSIS_OK; - }; - - /** - * square - */ - function fsqr(d) { - return d * d; - } - - this.AnalyzeSamples = function (rgData, left_samples, left_samplesPos, right_samples, right_samplesPos, num_samples, - num_channels) { - var curleft; - var curleftBase; - var curright; - var currightBase; - var batchsamples; - var cursamples; - var cursamplepos; - - if (num_samples == 0) - return GAIN_ANALYSIS_OK; - - cursamplepos = 0; - batchsamples = num_samples; - - switch (num_channels) { - case 1: - right_samples = left_samples; - right_samplesPos = left_samplesPos; - break; - case 2: - break; - default: - return GAIN_ANALYSIS_ERROR; - } - - if (num_samples < MAX_ORDER) { - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER, num_samples); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER, num_samples); - } else { - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER, MAX_ORDER); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER, MAX_ORDER); - } - - while (batchsamples > 0) { - cursamples = batchsamples > rgData.sampleWindow - rgData.totsamp ? rgData.sampleWindow - - rgData.totsamp - : batchsamples; - if (cursamplepos < MAX_ORDER) { - curleft = rgData.linpre + cursamplepos; - curleftBase = rgData.linprebuf; - curright = rgData.rinpre + cursamplepos; - currightBase = rgData.rinprebuf; - if (cursamples > MAX_ORDER - cursamplepos) - cursamples = MAX_ORDER - cursamplepos; - } else { - curleft = left_samplesPos + cursamplepos; - curleftBase = left_samples; - curright = right_samplesPos + cursamplepos; - currightBase = right_samples; - } - - filterYule(curleftBase, curleft, rgData.lstepbuf, rgData.lstep - + rgData.totsamp, cursamples, ABYule[rgData.reqindex]); - filterYule(currightBase, curright, rgData.rstepbuf, rgData.rstep - + rgData.totsamp, cursamples, ABYule[rgData.reqindex]); - - filterButter(rgData.lstepbuf, rgData.lstep + rgData.totsamp, - rgData.loutbuf, rgData.lout + rgData.totsamp, cursamples, - ABButter[rgData.reqindex]); - filterButter(rgData.rstepbuf, rgData.rstep + rgData.totsamp, - rgData.routbuf, rgData.rout + rgData.totsamp, cursamples, - ABButter[rgData.reqindex]); - - curleft = rgData.lout + rgData.totsamp; - /* Get the squared values */ - curleftBase = rgData.loutbuf; - curright = rgData.rout + rgData.totsamp; - currightBase = rgData.routbuf; - - var i = cursamples % 8; - while ((i--) != 0) { - rgData.lsum += fsqr(curleftBase[curleft++]); - rgData.rsum += fsqr(currightBase[curright++]); - } - i = cursamples / 8; - while ((i--) != 0) { - rgData.lsum += fsqr(curleftBase[curleft + 0]) - + fsqr(curleftBase[curleft + 1]) - + fsqr(curleftBase[curleft + 2]) - + fsqr(curleftBase[curleft + 3]) - + fsqr(curleftBase[curleft + 4]) - + fsqr(curleftBase[curleft + 5]) - + fsqr(curleftBase[curleft + 6]) - + fsqr(curleftBase[curleft + 7]); - curleft += 8; - rgData.rsum += fsqr(currightBase[curright + 0]) - + fsqr(currightBase[curright + 1]) - + fsqr(currightBase[curright + 2]) - + fsqr(currightBase[curright + 3]) - + fsqr(currightBase[curright + 4]) - + fsqr(currightBase[curright + 5]) - + fsqr(currightBase[curright + 6]) - + fsqr(currightBase[curright + 7]); - curright += 8; - } - - batchsamples -= cursamples; - cursamplepos += cursamples; - rgData.totsamp += cursamples; - if (rgData.totsamp == rgData.sampleWindow) { - /* Get the Root Mean Square (RMS) for this set of samples */ - var val = GainAnalysis.STEPS_per_dB - * 10. - * Math.log10((rgData.lsum + rgData.rsum) - / rgData.totsamp * 0.5 + 1.e-37); - var ival = (val <= 0) ? 0 : 0 | val; - if (ival >= rgData.A.length) - ival = rgData.A.length - 1; - rgData.A[ival]++; - rgData.lsum = rgData.rsum = 0.; - - System.arraycopy(rgData.loutbuf, rgData.totsamp, - rgData.loutbuf, 0, MAX_ORDER); - System.arraycopy(rgData.routbuf, rgData.totsamp, - rgData.routbuf, 0, MAX_ORDER); - System.arraycopy(rgData.lstepbuf, rgData.totsamp, - rgData.lstepbuf, 0, MAX_ORDER); - System.arraycopy(rgData.rstepbuf, rgData.totsamp, - rgData.rstepbuf, 0, MAX_ORDER); - rgData.totsamp = 0; - } - if (rgData.totsamp > rgData.sampleWindow) { - /* - * somehow I really screwed up: Error in programming! Contact - * author about totsamp > sampleWindow - */ - return GAIN_ANALYSIS_ERROR; - } - } - if (num_samples < MAX_ORDER) { - System.arraycopy(rgData.linprebuf, num_samples, rgData.linprebuf, - 0, MAX_ORDER - num_samples); - System.arraycopy(rgData.rinprebuf, num_samples, rgData.rinprebuf, - 0, MAX_ORDER - num_samples); - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER - num_samples, num_samples); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER - num_samples, num_samples); - } else { - System.arraycopy(left_samples, left_samplesPos + num_samples - - MAX_ORDER, rgData.linprebuf, 0, MAX_ORDER); - System.arraycopy(right_samples, right_samplesPos + num_samples - - MAX_ORDER, rgData.rinprebuf, 0, MAX_ORDER); - } - - return GAIN_ANALYSIS_OK; - }; - - function analyzeResult(Array, len) { - var i; - - var elems = 0; - for (i = 0; i < len; i++) - elems += Array[i]; - if (elems == 0) - return GAIN_NOT_ENOUGH_SAMPLES; - - var upper = 0 | Math.ceil(elems * (1. - RMS_PERCENTILE)); - for (i = len; i-- > 0;) { - if ((upper -= Array[i]) <= 0) - break; - } - - //return (float) ((float) PINK_REF - (float) i / (float) STEPS_per_dB); - return (PINK_REF - i / GainAnalysis.STEPS_per_dB); - } - - this.GetTitleGain = function (rgData) { - var retval = analyzeResult(rgData.A, rgData.A.length); - - for (var i = 0; i < rgData.A.length; i++) { - rgData.B[i] += rgData.A[i]; - rgData.A[i] = 0; - } - - for (var i = 0; i < MAX_ORDER; i++) - rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.; - - rgData.totsamp = 0; - rgData.lsum = rgData.rsum = 0.; - return retval; - } - -} - -module.exports = GainAnalysis; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GrInfo.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GrInfo.js deleted file mode 100644 index f62dcee42..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/GrInfo.js +++ /dev/null @@ -1,107 +0,0 @@ -//package mp3; -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var L3Side = require('./L3Side.js'); - -function GrInfo() { - //float xr[] = new float[576]; - this.xr = new_float(576); - //int l3_enc[] = new int[576]; - this.l3_enc = new_int(576); - //int scalefac[] = new int[L3Side.SFBMAX]; - this.scalefac = new_int(L3Side.SFBMAX); - this.xrpow_max = 0.; - - this.part2_3_length = 0; - this.big_values = 0; - this.count1 = 0; - this.global_gain = 0; - this.scalefac_compress = 0; - this.block_type = 0; - this.mixed_block_flag = 0; - this.table_select = new_int(3); - this.subblock_gain = new_int(3 + 1); - this.region0_count = 0; - this.region1_count = 0; - this.preflag = 0; - this.scalefac_scale = 0; - this.count1table_select = 0; - - this.part2_length = 0; - this.sfb_lmax = 0; - this.sfb_smin = 0; - this.psy_lmax = 0; - this.sfbmax = 0; - this.psymax = 0; - this.sfbdivide = 0; - this.width = new_int(L3Side.SFBMAX); - this.window = new_int(L3Side.SFBMAX); - this.count1bits = 0; - /** - * added for LSF - */ - this.sfb_partition_table = null; - this.slen = new_int(4); - - this.max_nonzero_coeff = 0; - - var self = this; - function clone_int(array) { - return new Int32Array(array); - } - function clone_float(array) { - return new Float32Array(array); - } - this.assign = function (other) { - self.xr = clone_float(other.xr); //.slice(0); //clone(); - self.l3_enc = clone_int(other.l3_enc); //.slice(0); //clone(); - self.scalefac = clone_int(other.scalefac);//.slice(0); //clone(); - self.xrpow_max = other.xrpow_max; - - self.part2_3_length = other.part2_3_length; - self.big_values = other.big_values; - self.count1 = other.count1; - self.global_gain = other.global_gain; - self.scalefac_compress = other.scalefac_compress; - self.block_type = other.block_type; - self.mixed_block_flag = other.mixed_block_flag; - self.table_select = clone_int(other.table_select);//.slice(0); //clone(); - self.subblock_gain = clone_int(other.subblock_gain); //.slice(0); //.clone(); - self.region0_count = other.region0_count; - self.region1_count = other.region1_count; - self.preflag = other.preflag; - self.scalefac_scale = other.scalefac_scale; - self.count1table_select = other.count1table_select; - - self.part2_length = other.part2_length; - self.sfb_lmax = other.sfb_lmax; - self.sfb_smin = other.sfb_smin; - self.psy_lmax = other.psy_lmax; - self.sfbmax = other.sfbmax; - self.psymax = other.psymax; - self.sfbdivide = other.sfbdivide; - self.width = clone_int(other.width); //.slice(0); //.clone(); - self.window = clone_int(other.window); //.slice(0); //.clone(); - self.count1bits = other.count1bits; - - self.sfb_partition_table = other.sfb_partition_table.slice(0); //.clone(); - self.slen = clone_int(other.slen); //.slice(0); //.clone(); - self.max_nonzero_coeff = other.max_nonzero_coeff; - } -} - -module.exports = GrInfo; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ID3TagSpec.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ID3TagSpec.js deleted file mode 100644 index 1fd648dec..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ID3TagSpec.js +++ /dev/null @@ -1,25 +0,0 @@ -//package mp3; - -//import java.util.ArrayList; - -//import mp3.ID3Tag.MimeType; - -function ID3TagSpec() { - this.flags = 0; - this.year = 0; - this.title = null; - this.artist = null; - this.album = null; - this.comment = null; - this.track_id3v1 = 0; - this.genre_id3v1 = 0; - //byte[] albumart; - this.albumart = null; - this.albumart_size = 0; - this.padding_size = 0; - this.albumart_mimetype = null; - this.values = []; - this.num_values = 0; - this.v2_head = null; - this.v2_tail = null; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/IIISideInfo.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/IIISideInfo.js deleted file mode 100644 index ca1647405..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/IIISideInfo.js +++ /dev/null @@ -1,34 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var GrInfo = require('./GrInfo.js'); - -function IIISideInfo() { - this.tt = [[null, null], [null, null]]; - this.main_data_begin = 0; - this.private_bits = 0; - this.resvDrain_pre = 0; - this.resvDrain_post = 0; - this.scfsi = [new_int(4), new_int(4)]; - - for (var gr = 0; gr < 2; gr++) { - for (var ch = 0; ch < 2; ch++) { - this.tt[gr][ch] = new GrInfo(); - } - } -} - -module.exports = IIISideInfo; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_ratio.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_ratio.js deleted file mode 100644 index d2e748608..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_ratio.js +++ /dev/null @@ -1,10 +0,0 @@ -//package mp3; - -var III_psy_xmin = require('./III_psy_xmin.js'); - -function III_psy_ratio() { - this.thm = new III_psy_xmin(); - this.en = new III_psy_xmin(); -} - -module.exports = III_psy_ratio; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_xmin.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_xmin.js deleted file mode 100644 index 466cb93ff..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/III_psy_xmin.js +++ /dev/null @@ -1,33 +0,0 @@ -var Encoder = require('./Encoder.js'); -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -function III_psy_xmin() { - this.l = new_float(Encoder.SBMAX_l); - this.s = new_float_n([Encoder.SBMAX_s, 3]); - - var self = this; - this.assign = function (iii_psy_xmin) { - System.arraycopy(iii_psy_xmin.l, 0, self.l, 0, Encoder.SBMAX_l); - for (var i = 0; i < Encoder.SBMAX_s; i++) { - for (var j = 0; j < 3; j++) { - self.s[i][j] = iii_psy_xmin.s[i][j]; - } - } - } -} - -module.exports = III_psy_xmin; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/L3Side.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/L3Side.js deleted file mode 100644 index 1831f8304..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/L3Side.js +++ /dev/null @@ -1,11 +0,0 @@ -var Encoder = require('./Encoder.js'); - -var L3Side = {}; - - - /** - * max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8) - */ -L3Side.SFBMAX = (Encoder.SBMAX_s * 3); - -module.exports = L3Side; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Lame.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Lame.js deleted file mode 100644 index b90bdd603..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Lame.js +++ /dev/null @@ -1,1870 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var new_short_n = common.new_short_n; -var assert = common.assert; - -var PsyModel = require('./PsyModel.js'); -var LameGlobalFlags = require('./LameGlobalFlags.js'); -var LameInternalFlags = require('./LameInternalFlags.js'); -var ATH = require('./ATH.js'); -var ReplayGain = require('./ReplayGain.js'); -var CBRNewIterationLoop = require('./CBRNewIterationLoop.js'); -var BitStream = require('./BitStream.js'); -var Tables = require('./Tables.js'); -var Encoder = require('./Encoder.js'); - -function Lame() { - var MPEGMode = require('./MPEGMode.js'); - var self = this; - var LAME_MAXALBUMART = (128 * 1024); - - Lame.V9 = 410; - Lame.V8 = 420; - Lame.V7 = 430; - Lame.V6 = 440; - Lame.V5 = 450; - Lame.V4 = 460; - Lame.V3 = 470; - Lame.V2 = 480; - Lame.V1 = 490; - Lame.V0 = 500; - - /* still there for compatibility */ - - Lame.R3MIX = 1000; - Lame.STANDARD = 1001; - Lame.EXTREME = 1002; - Lame.INSANE = 1003; - Lame.STANDARD_FAST = 1004; - Lame.EXTREME_FAST = 1005; - Lame.MEDIUM = 1006; - Lame.MEDIUM_FAST = 1007; - - /** - * maximum size of mp3buffer needed if you encode at most 1152 samples for - * each call to lame_encode_buffer. see lame_encode_buffer() below - * (LAME_MAXMP3BUFFER is now obsolete) - */ - var LAME_MAXMP3BUFFER = (16384 + LAME_MAXALBUMART); - Lame.LAME_MAXMP3BUFFER = LAME_MAXMP3BUFFER; - - var ga; - var bs; - var p; - var qupvt; - var qu; - var psy = new PsyModel(); - var vbr; - var ver; - var id3; - var mpglib; - this.enc = new Encoder(); - - this.setModules = function (_ga, _bs, _p, _qupvt, _qu, _vbr, _ver, _id3, _mpglib) { - ga = _ga; - bs = _bs; - p = _p; - qupvt = _qupvt; - qu = _qu; - vbr = _vbr; - ver = _ver; - id3 = _id3; - mpglib = _mpglib; - this.enc.setModules(bs, psy, qupvt, vbr); - } - - /** - * PSY Model related stuff - */ - function PSY() { - /** - * The dbQ stuff. - */ - this.mask_adjust = 0.; - /** - * The dbQ stuff. - */ - this.mask_adjust_short = 0.; - /* at transition from one scalefactor band to next */ - /** - * Band weight long scalefactor bands. - */ - this.bo_l_weight = new_float(Encoder.SBMAX_l); - /** - * Band weight short scalefactor bands. - */ - this.bo_s_weight = new_float(Encoder.SBMAX_s); - } - - function LowPassHighPass() { - this.lowerlimit = 0.; - } - - function BandPass(bitrate, lPass) { - this.lowpass = lPass; - } - - var LAME_ID = 0xFFF88E3B; - - function lame_init_old(gfp) { - var gfc; - - gfp.class_id = LAME_ID; - - gfc = gfp.internal_flags = new LameInternalFlags(); - - /* Global flags. set defaults here for non-zero values */ - /* see lame.h for description */ - /* - * set integer values to -1 to mean that LAME will compute the best - * value, UNLESS the calling program as set it (and the value is no - * longer -1) - */ - - gfp.mode = MPEGMode.NOT_SET; - gfp.original = 1; - gfp.in_samplerate = 44100; - gfp.num_channels = 2; - gfp.num_samples = -1; - - gfp.bWriteVbrTag = true; - gfp.quality = -1; - gfp.short_blocks = null; - gfc.subblock_gain = -1; - - gfp.lowpassfreq = 0; - gfp.highpassfreq = 0; - gfp.lowpasswidth = -1; - gfp.highpasswidth = -1; - - gfp.VBR = VbrMode.vbr_off; - gfp.VBR_q = 4; - gfp.ATHcurve = -1; - gfp.VBR_mean_bitrate_kbps = 128; - gfp.VBR_min_bitrate_kbps = 0; - gfp.VBR_max_bitrate_kbps = 0; - gfp.VBR_hard_min = 0; - gfc.VBR_min_bitrate = 1; - /* not 0 ????? */ - gfc.VBR_max_bitrate = 13; - /* not 14 ????? */ - - gfp.quant_comp = -1; - gfp.quant_comp_short = -1; - - gfp.msfix = -1; - - gfc.resample_ratio = 1; - - gfc.OldValue[0] = 180; - gfc.OldValue[1] = 180; - gfc.CurrentStep[0] = 4; - gfc.CurrentStep[1] = 4; - gfc.masking_lower = 1; - gfc.nsPsy.attackthre = -1; - gfc.nsPsy.attackthre_s = -1; - - gfp.scale = -1; - - gfp.athaa_type = -1; - gfp.ATHtype = -1; - /* default = -1 = set in lame_init_params */ - gfp.athaa_loudapprox = -1; - /* 1 = flat loudness approx. (total energy) */ - /* 2 = equal loudness curve */ - gfp.athaa_sensitivity = 0.0; - /* no offset */ - gfp.useTemporal = null; - gfp.interChRatio = -1; - - /* - * The reason for int mf_samples_to_encode = ENCDELAY + POSTDELAY; - * ENCDELAY = internal encoder delay. And then we have to add - * POSTDELAY=288 because of the 50% MDCT overlap. A 576 MDCT granule - * decodes to 1152 samples. To synthesize the 576 samples centered under - * this granule we need the previous granule for the first 288 samples - * (no problem), and the next granule for the next 288 samples (not - * possible if this is last granule). So we need to pad with 288 samples - * to make sure we can encode the 576 samples we are interested in. - */ - gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY; - gfp.encoder_padding = 0; - gfc.mf_size = Encoder.ENCDELAY - Encoder.MDCTDELAY; - /* - * we pad input with this many 0's - */ - - gfp.findReplayGain = false; - gfp.decode_on_the_fly = false; - - gfc.decode_on_the_fly = false; - gfc.findReplayGain = false; - gfc.findPeakSample = false; - - gfc.RadioGain = 0; - gfc.AudiophileGain = 0; - gfc.noclipGainChange = 0; - gfc.noclipScale = -1.0; - - gfp.preset = 0; - - gfp.write_id3tag_automatic = true; - return 0; - } - - this.lame_init = function () { - var gfp = new LameGlobalFlags(); - - var ret = lame_init_old(gfp); - if (ret != 0) { - return null; - } - - gfp.lame_allocated_gfp = 1; - return gfp; - } - - function filter_coef(x) { - if (x > 1.0) - return 0.0; - if (x <= 0.0) - return 1.0; - - return Math.cos(Math.PI / 2 * x); - } - - this.nearestBitrateFullIndex = function (bitrate) { - /* borrowed from DM abr presets */ - - var full_bitrate_table = [8, 16, 24, 32, 40, 48, 56, 64, 80, - 96, 112, 128, 160, 192, 224, 256, 320]; - - var lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0; - - /* We assume specified bitrate will be 320kbps */ - upper_range_kbps = full_bitrate_table[16]; - upper_range = 16; - lower_range_kbps = full_bitrate_table[16]; - lower_range = 16; - - /* - * Determine which significant bitrates the value specified falls - * between, if loop ends without breaking then we were correct above - * that the value was 320 - */ - for (var b = 0; b < 16; b++) { - if ((Math.max(bitrate, full_bitrate_table[b + 1])) != bitrate) { - upper_range_kbps = full_bitrate_table[b + 1]; - upper_range = b + 1; - lower_range_kbps = full_bitrate_table[b]; - lower_range = (b); - break; - /* We found upper range */ - } - } - - /* Determine which range the value specified is closer to */ - if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) { - return lower_range; - } - return upper_range; - } - - function optimum_samplefreq(lowpassfreq, input_samplefreq) { - /* - * Rules: - * - * - if possible, sfb21 should NOT be used - */ - var suggested_samplefreq = 44100; - - if (input_samplefreq >= 48000) - suggested_samplefreq = 48000; - else if (input_samplefreq >= 44100) - suggested_samplefreq = 44100; - else if (input_samplefreq >= 32000) - suggested_samplefreq = 32000; - else if (input_samplefreq >= 24000) - suggested_samplefreq = 24000; - else if (input_samplefreq >= 22050) - suggested_samplefreq = 22050; - else if (input_samplefreq >= 16000) - suggested_samplefreq = 16000; - else if (input_samplefreq >= 12000) - suggested_samplefreq = 12000; - else if (input_samplefreq >= 11025) - suggested_samplefreq = 11025; - else if (input_samplefreq >= 8000) - suggested_samplefreq = 8000; - - if (lowpassfreq == -1) - return suggested_samplefreq; - - if (lowpassfreq <= 15960) - suggested_samplefreq = 44100; - if (lowpassfreq <= 15250) - suggested_samplefreq = 32000; - if (lowpassfreq <= 11220) - suggested_samplefreq = 24000; - if (lowpassfreq <= 9970) - suggested_samplefreq = 22050; - if (lowpassfreq <= 7230) - suggested_samplefreq = 16000; - if (lowpassfreq <= 5420) - suggested_samplefreq = 12000; - if (lowpassfreq <= 4510) - suggested_samplefreq = 11025; - if (lowpassfreq <= 3970) - suggested_samplefreq = 8000; - - if (input_samplefreq < suggested_samplefreq) { - /* - * choose a valid MPEG sample frequency above the input sample - * frequency to avoid SFB21/12 bitrate bloat rh 061115 - */ - if (input_samplefreq > 44100) { - return 48000; - } - if (input_samplefreq > 32000) { - return 44100; - } - if (input_samplefreq > 24000) { - return 32000; - } - if (input_samplefreq > 22050) { - return 24000; - } - if (input_samplefreq > 16000) { - return 22050; - } - if (input_samplefreq > 12000) { - return 16000; - } - if (input_samplefreq > 11025) { - return 12000; - } - if (input_samplefreq > 8000) { - return 11025; - } - return 8000; - } - return suggested_samplefreq; - } - - /** - * convert samp freq in Hz to index - */ - function SmpFrqIndex(sample_freq, gpf) { - switch (sample_freq) { - case 44100: - gpf.version = 1; - return 0; - case 48000: - gpf.version = 1; - return 1; - case 32000: - gpf.version = 1; - return 2; - case 22050: - gpf.version = 0; - return 0; - case 24000: - gpf.version = 0; - return 1; - case 16000: - gpf.version = 0; - return 2; - case 11025: - gpf.version = 0; - return 0; - case 12000: - gpf.version = 0; - return 1; - case 8000: - gpf.version = 0; - return 2; - default: - gpf.version = 0; - return -1; - } - } - - /** - * @param bRate - * legal rates from 8 to 320 - */ - function FindNearestBitrate(bRate, version, samplerate) { - /* MPEG-1 or MPEG-2 LSF */ - if (samplerate < 16000) - version = 2; - - var bitrate = Tables.bitrate_table[version][1]; - - for (var i = 2; i <= 14; i++) { - if (Tables.bitrate_table[version][i] > 0) { - if (Math.abs(Tables.bitrate_table[version][i] - bRate) < Math - .abs(bitrate - bRate)) - bitrate = Tables.bitrate_table[version][i]; - } - } - return bitrate; - } - - /** - * @param bRate - * legal rates from 32 to 448 kbps - * @param version - * MPEG-1 or MPEG-2/2.5 LSF - */ - function BitrateIndex(bRate, version, samplerate) { - /* convert bitrate in kbps to index */ - if (samplerate < 16000) - version = 2; - for (var i = 0; i <= 14; i++) { - if (Tables.bitrate_table[version][i] > 0) { - if (Tables.bitrate_table[version][i] == bRate) { - return i; - } - } - } - return -1; - } - - function optimum_bandwidth(lh, bitrate) { - /** - *
-         *  Input:
-         *      bitrate     total bitrate in kbps
-         *
-         *   Output:
-         *      lowerlimit: best lowpass frequency limit for input filter in Hz
-         *      upperlimit: best highpass frequency limit for input filter in Hz
-         * 
- */ - var freq_map = [new BandPass(8, 2000), - new BandPass(16, 3700), new BandPass(24, 3900), - new BandPass(32, 5500), new BandPass(40, 7000), - new BandPass(48, 7500), new BandPass(56, 10000), - new BandPass(64, 11000), new BandPass(80, 13500), - new BandPass(96, 15100), new BandPass(112, 15600), - new BandPass(128, 17000), new BandPass(160, 17500), - new BandPass(192, 18600), new BandPass(224, 19400), - new BandPass(256, 19700), new BandPass(320, 20500)]; - - var table_index = self.nearestBitrateFullIndex(bitrate); - lh.lowerlimit = freq_map[table_index].lowpass; - } - - function lame_init_params_ppflt(gfp) { - var gfc = gfp.internal_flags; - /***************************************************************/ - /* compute info needed for polyphase filter (filter type==0, default) */ - /***************************************************************/ - - var lowpass_band = 32; - var highpass_band = -1; - - if (gfc.lowpass1 > 0) { - var minband = 999; - for (var band = 0; band <= 31; band++) { - var freq = (band / 31.0); - /* this band and above will be zeroed: */ - if (freq >= gfc.lowpass2) { - lowpass_band = Math.min(lowpass_band, band); - } - if (gfc.lowpass1 < freq && freq < gfc.lowpass2) { - minband = Math.min(minband, band); - } - } - - /* - * compute the *actual* transition band implemented by the polyphase - * filter - */ - if (minband == 999) { - gfc.lowpass1 = (lowpass_band - .75) / 31.0; - } else { - gfc.lowpass1 = (minband - .75) / 31.0; - } - gfc.lowpass2 = lowpass_band / 31.0; - } - - /* - * make sure highpass filter is within 90% of what the effective - * highpass frequency will be - */ - if (gfc.highpass2 > 0) { - if (gfc.highpass2 < .9 * (.75 / 31.0)) { - gfc.highpass1 = 0; - gfc.highpass2 = 0; - System.err.println("Warning: highpass filter disabled. " - + "highpass frequency too small\n"); - } - } - - if (gfc.highpass2 > 0) { - var maxband = -1; - for (var band = 0; band <= 31; band++) { - var freq = band / 31.0; - /* this band and below will be zereod */ - if (freq <= gfc.highpass1) { - highpass_band = Math.max(highpass_band, band); - } - if (gfc.highpass1 < freq && freq < gfc.highpass2) { - maxband = Math.max(maxband, band); - } - } - /* - * compute the *actual* transition band implemented by the polyphase - * filter - */ - gfc.highpass1 = highpass_band / 31.0; - if (maxband == -1) { - gfc.highpass2 = (highpass_band + .75) / 31.0; - } else { - gfc.highpass2 = (maxband + .75) / 31.0; - } - } - - for (var band = 0; band < 32; band++) { - var fc1, fc2; - var freq = band / 31.0; - if (gfc.highpass2 > gfc.highpass1) { - fc1 = filter_coef((gfc.highpass2 - freq) - / (gfc.highpass2 - gfc.highpass1 + 1e-20)); - } else { - fc1 = 1.0; - } - if (gfc.lowpass2 > gfc.lowpass1) { - fc2 = filter_coef((freq - gfc.lowpass1) - / (gfc.lowpass2 - gfc.lowpass1 + 1e-20)); - } else { - fc2 = 1.0; - } - gfc.amp_filter[band] = (fc1 * fc2); - } - } - - function lame_init_qval(gfp) { - var gfc = gfp.internal_flags; - - switch (gfp.quality) { - default: - case 9: /* no psymodel, no noise shaping */ - gfc.psymodel = 0; - gfc.noise_shaping = 0; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 8: - gfp.quality = 7; - //$FALL-THROUGH$ - case 7: - /* - * use psymodel (for short block and m/s switching), but no noise - * shapping - */ - gfc.psymodel = 1; - gfc.noise_shaping = 0; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 6: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 5: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 4: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 3: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 1; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 2: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 1; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - /* inner loop */ - gfc.full_outer_loop = 0; - break; - - case 1: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 2; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 0: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 2; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - /* - * type 2 disabled because of it slowness, in favor of full outer - * loop search - */ - gfc.full_outer_loop = 0; - /* - * full outer loop search disabled because of audible distortions it - * may generate rh 060629 - */ - break; - } - - } - - function lame_init_bitstream(gfp) { - var gfc = gfp.internal_flags; - gfp.frameNum = 0; - - if (gfp.write_id3tag_automatic) { - id3.id3tag_write_v2(gfp); - } - /* initialize histogram data optionally used by frontend */ - - gfc.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]); - gfc.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]); - - gfc.PeakSample = 0.0; - - /* Write initial VBR Header to bitstream and init VBR data */ - if (gfp.bWriteVbrTag) - vbr.InitVbrTag(gfp); - } - - /******************************************************************** - * initialize internal params based on data in gf (globalflags struct filled - * in by calling program) - * - * OUTLINE: - * - * We first have some complex code to determine bitrate, output samplerate - * and mode. It is complicated by the fact that we allow the user to set - * some or all of these parameters, and need to determine best possible - * values for the rest of them: - * - * 1. set some CPU related flags 2. check if we are mono.mono, stereo.mono - * or stereo.stereo 3. compute bitrate and output samplerate: user may have - * set compression ratio user may have set a bitrate user may have set a - * output samplerate 4. set some options which depend on output samplerate - * 5. compute the actual compression ratio 6. set mode based on compression - * ratio - * - * The remaining code is much simpler - it just sets options based on the - * mode & compression ratio: - * - * set allow_diff_short based on mode select lowpass filter based on - * compression ratio & mode set the bitrate index, and min/max bitrates for - * VBR modes disable VBR tag if it is not appropriate initialize the - * bitstream initialize scalefac_band data set sideinfo_len (based on - * channels, CRC, out_samplerate) write an id3v2 tag into the bitstream - * write VBR tag into the bitstream set mpeg1/2 flag estimate the number of - * frames (based on a lot of data) - * - * now we set more flags: nspsytune: see code VBR modes see code CBR/ABR see - * code - * - * Finally, we set the algorithm flags based on the gfp.quality value - * lame_init_qval(gfp); - * - ********************************************************************/ - this.lame_init_params = function (gfp) { - var gfc = gfp.internal_flags; - - gfc.Class_ID = 0; - if (gfc.ATH == null) - gfc.ATH = new ATH(); - if (gfc.PSY == null) - gfc.PSY = new PSY(); - if (gfc.rgdata == null) - gfc.rgdata = new ReplayGain(); - - gfc.channels_in = gfp.num_channels; - if (gfc.channels_in == 1) - gfp.mode = MPEGMode.MONO; - gfc.channels_out = (gfp.mode == MPEGMode.MONO) ? 1 : 2; - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - if (gfp.mode == MPEGMode.MONO) - gfp.force_ms = false; - /* - * don't allow forced mid/side stereo for mono output - */ - - if (gfp.VBR == VbrMode.vbr_off && gfp.VBR_mean_bitrate_kbps != 128 - && gfp.brate == 0) - gfp.brate = gfp.VBR_mean_bitrate_kbps; - - if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_mtrh - || gfp.VBR == VbrMode.vbr_mt) { - /* these modes can handle free format condition */ - } else { - gfp.free_format = false; - /* mode can't be mixed with free format */ - } - - if (gfp.VBR == VbrMode.vbr_off && gfp.brate == 0) { - /* no bitrate or compression ratio specified, use 11.025 */ - if (BitStream.EQ(gfp.compression_ratio, 0)) - gfp.compression_ratio = 11.025; - /* - * rate to compress a CD down to exactly 128000 bps - */ - } - - /* find bitrate if user specify a compression ratio */ - if (gfp.VBR == VbrMode.vbr_off && gfp.compression_ratio > 0) { - - if (gfp.out_samplerate == 0) - gfp.out_samplerate = map2MP3Frequency((int)(0.97 * gfp.in_samplerate)); - /* - * round up with a margin of 3 % - */ - - /* - * choose a bitrate for the output samplerate which achieves - * specified compression ratio - */ - gfp.brate = 0 | (gfp.out_samplerate * 16 * gfc.channels_out / (1.e3 * gfp.compression_ratio)); - - /* we need the version for the bitrate table look up */ - gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp); - - if (!gfp.free_format) /* - * for non Free Format find the nearest allowed - * bitrate - */ - gfp.brate = FindNearestBitrate(gfp.brate, gfp.version, - gfp.out_samplerate); - } - - if (gfp.out_samplerate != 0) { - if (gfp.out_samplerate < 16000) { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 8); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 64); - } else if (gfp.out_samplerate < 32000) { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 8); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 160); - } else { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 32); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 320); - } - } - - /****************************************************************/ - /* if a filter has not been enabled, see if we should add one: */ - /****************************************************************/ - if (gfp.lowpassfreq == 0) { - var lowpass = 16000.; - - switch (gfp.VBR) { - case VbrMode.vbr_off: - { - var lh = new LowPassHighPass(); - optimum_bandwidth(lh, gfp.brate); - lowpass = lh.lowerlimit; - break; - } - case VbrMode.vbr_abr: - { - var lh = new LowPassHighPass(); - optimum_bandwidth(lh, gfp.VBR_mean_bitrate_kbps); - lowpass = lh.lowerlimit; - break; - } - case VbrMode.vbr_rh: - { - var x = [19500, 19000, 18600, 18000, 17500, 16000, - 15600, 14900, 12500, 10000, 3950]; - if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) { - var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac; - lowpass = linear_int(a, b, m); - } else { - lowpass = 19500; - } - break; - } - default: - { - var x = [19500, 19000, 18500, 18000, 17500, 16500, - 15500, 14500, 12500, 9500, 3950]; - if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) { - var a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac; - lowpass = linear_int(a, b, m); - } else { - lowpass = 19500; - } - } - } - if (gfp.mode == MPEGMode.MONO - && (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr)) - lowpass *= 1.5; - - gfp.lowpassfreq = lowpass | 0; - } - - if (gfp.out_samplerate == 0) { - if (2 * gfp.lowpassfreq > gfp.in_samplerate) { - gfp.lowpassfreq = gfp.in_samplerate / 2; - } - gfp.out_samplerate = optimum_samplefreq(gfp.lowpassfreq | 0, - gfp.in_samplerate); - } - - gfp.lowpassfreq = Math.min(20500, gfp.lowpassfreq); - gfp.lowpassfreq = Math.min(gfp.out_samplerate / 2, gfp.lowpassfreq); - - if (gfp.VBR == VbrMode.vbr_off) { - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.brate); - } - if (gfp.VBR == VbrMode.vbr_abr) { - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.VBR_mean_bitrate_kbps); - } - - /* - * do not compute ReplayGain values and do not find the peak sample if - * we can't store them - */ - if (!gfp.bWriteVbrTag) { - gfp.findReplayGain = false; - gfp.decode_on_the_fly = false; - gfc.findPeakSample = false; - } - gfc.findReplayGain = gfp.findReplayGain; - gfc.decode_on_the_fly = gfp.decode_on_the_fly; - - if (gfc.decode_on_the_fly) - gfc.findPeakSample = true; - - if (gfc.findReplayGain) { - if (ga.InitGainAnalysis(gfc.rgdata, gfp.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR) { - gfp.internal_flags = null; - return -6; - } - } - - if (gfc.decode_on_the_fly && !gfp.decode_only) { - if (gfc.hip != null) { - mpglib.hip_decode_exit(gfc.hip); - } - gfc.hip = mpglib.hip_decode_init(); - } - - gfc.mode_gr = gfp.out_samplerate <= 24000 ? 1 : 2; - /* - * Number of granules per frame - */ - gfp.framesize = 576 * gfc.mode_gr; - gfp.encoder_delay = Encoder.ENCDELAY; - - gfc.resample_ratio = gfp.in_samplerate / gfp.out_samplerate; - - /** - *
-         *  sample freq       bitrate     compression ratio
-         *     [kHz]      [kbps/channel]   for 16 bit input
-         *     44.1            56               12.6
-         *     44.1            64               11.025
-         *     44.1            80                8.82
-         *     22.05           24               14.7
-         *     22.05           32               11.025
-         *     22.05           40                8.82
-         *     16              16               16.0
-         *     16              24               10.667
-         * 
- */ - /** - *
-         *  For VBR, take a guess at the compression_ratio.
-         *  For example:
-         *
-         *    VBR_q    compression     like
-         *     -        4.4         320 kbps/44 kHz
-         *   0...1      5.5         256 kbps/44 kHz
-         *     2        7.3         192 kbps/44 kHz
-         *     4        8.8         160 kbps/44 kHz
-         *     6       11           128 kbps/44 kHz
-         *     9       14.7          96 kbps
-         *
-         *  for lower bitrates, downsample with --resample
-         * 
- */ - switch (gfp.VBR) { - case VbrMode.vbr_mt: - case VbrMode.vbr_rh: - case VbrMode.vbr_mtrh: - { - /* numbers are a bit strange, but they determine the lowpass value */ - var cmp = [5.7, 6.5, 7.3, 8.2, 10, 11.9, 13, 14, - 15, 16.5]; - gfp.compression_ratio = cmp[gfp.VBR_q]; - } - break; - case VbrMode.vbr_abr: - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.VBR_mean_bitrate_kbps); - break; - default: - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3 * gfp.brate); - break; - } - - /* - * mode = -1 (not set by user) or mode = MONO (because of only 1 input - * channel). If mode has not been set, then select J-STEREO - */ - if (gfp.mode == MPEGMode.NOT_SET) { - gfp.mode = MPEGMode.JOINT_STEREO; - } - - /* apply user driven high pass filter */ - if (gfp.highpassfreq > 0) { - gfc.highpass1 = 2. * gfp.highpassfreq; - - if (gfp.highpasswidth >= 0) - gfc.highpass2 = 2. * (gfp.highpassfreq + gfp.highpasswidth); - else - /* 0% above on default */ - gfc.highpass2 = (1 + 0.00) * 2. * gfp.highpassfreq; - - gfc.highpass1 /= gfp.out_samplerate; - gfc.highpass2 /= gfp.out_samplerate; - } else { - gfc.highpass1 = 0; - gfc.highpass2 = 0; - } - /* apply user driven low pass filter */ - if (gfp.lowpassfreq > 0) { - gfc.lowpass2 = 2. * gfp.lowpassfreq; - if (gfp.lowpasswidth >= 0) { - gfc.lowpass1 = 2. * (gfp.lowpassfreq - gfp.lowpasswidth); - if (gfc.lowpass1 < 0) /* has to be >= 0 */ - gfc.lowpass1 = 0; - } else { /* 0% below on default */ - gfc.lowpass1 = (1 - 0.00) * 2. * gfp.lowpassfreq; - } - gfc.lowpass1 /= gfp.out_samplerate; - gfc.lowpass2 /= gfp.out_samplerate; - } else { - gfc.lowpass1 = 0; - gfc.lowpass2 = 0; - } - - /**********************************************************************/ - /* compute info needed for polyphase filter (filter type==0, default) */ - /**********************************************************************/ - lame_init_params_ppflt(gfp); - /******************************************************* - * samplerate and bitrate index - *******************************************************/ - gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp); - if (gfc.samplerate_index < 0) { - gfp.internal_flags = null; - return -1; - } - - if (gfp.VBR == VbrMode.vbr_off) { - if (gfp.free_format) { - gfc.bitrate_index = 0; - } else { - gfp.brate = FindNearestBitrate(gfp.brate, gfp.version, - gfp.out_samplerate); - gfc.bitrate_index = BitrateIndex(gfp.brate, gfp.version, - gfp.out_samplerate); - if (gfc.bitrate_index <= 0) { - gfp.internal_flags = null; - return -1; - } - } - } else { - gfc.bitrate_index = 1; - } - - /* for CBR, we will write an "info" tag. */ - - if (gfp.analysis) - gfp.bWriteVbrTag = false; - - /* some file options not allowed if output is: not specified or stdout */ - if (gfc.pinfo != null) - gfp.bWriteVbrTag = false; - /* disable Xing VBR tag */ - - bs.init_bit_stream_w(gfc); - - var j = gfc.samplerate_index + (3 * gfp.version) + 6 - * (gfp.out_samplerate < 16000 ? 1 : 0); - for (var i = 0; i < Encoder.SBMAX_l + 1; i++) - gfc.scalefac_band.l[i] = qupvt.sfBandIndex[j].l[i]; - - for (var i = 0; i < Encoder.PSFB21 + 1; i++) { - var size = (gfc.scalefac_band.l[22] - gfc.scalefac_band.l[21]) - / Encoder.PSFB21; - var start = gfc.scalefac_band.l[21] + i * size; - gfc.scalefac_band.psfb21[i] = start; - } - gfc.scalefac_band.psfb21[Encoder.PSFB21] = 576; - - for (var i = 0; i < Encoder.SBMAX_s + 1; i++) - gfc.scalefac_band.s[i] = qupvt.sfBandIndex[j].s[i]; - - for (var i = 0; i < Encoder.PSFB12 + 1; i++) { - var size = (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]) - / Encoder.PSFB12; - var start = gfc.scalefac_band.s[12] + i * size; - gfc.scalefac_band.psfb12[i] = start; - } - gfc.scalefac_band.psfb12[Encoder.PSFB12] = 192; - /* determine the mean bitrate for main data */ - if (gfp.version == 1) /* MPEG 1 */ - gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 17 : 4 + 32; - else - /* MPEG 2 */ - gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 9 : 4 + 17; - - if (gfp.error_protection) - gfc.sideinfo_len += 2; - - lame_init_bitstream(gfp); - - gfc.Class_ID = LAME_ID; - - { - var k; - - for (k = 0; k < 19; k++) - gfc.nsPsy.pefirbuf[k] = 700 * gfc.mode_gr * gfc.channels_out; - - if (gfp.ATHtype == -1) - gfp.ATHtype = 4; - } - assert(gfp.VBR_q <= 9); - assert(gfp.VBR_q >= 0); - - switch (gfp.VBR) { - - case VbrMode.vbr_mt: - gfp.VBR = VbrMode.vbr_mtrh; - //$FALL-THROUGH$ - case VbrMode.vbr_mtrh: - { - if (gfp.useTemporal == null) { - gfp.useTemporal = false; - /* off by default for this VBR mode */ - } - - p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0); - /** - *
-                 *   The newer VBR code supports only a limited
-                 *     subset of quality levels:
-                 *     9-5=5 are the same, uses x^3/4 quantization
-                 *   4-0=0 are the same  5 plus best huffman divide code
-                 * 
- */ - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - if (gfp.quality < 5) - gfp.quality = 0; - if (gfp.quality > 5) - gfp.quality = 5; - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - /* - * sfb21 extra only with MPEG-1 at higher sampling rates - */ - if (gfp.experimentalY) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = (gfp.out_samplerate > 44000); - - gfc.iteration_loop = new VBRNewIterationLoop(qu); - break; - - } - case VbrMode.vbr_rh: - { - - p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0); - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - /* - * sfb21 extra only with MPEG-1 at higher sampling rates - */ - if (gfp.experimentalY) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = (gfp.out_samplerate > 44000); - - /* - * VBR needs at least the output of GPSYCHO, so we have to garantee - * that by setting a minimum quality level, actually level 6 does - * it. down to level 6 - */ - if (gfp.quality > 6) - gfp.quality = 6; - - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - - gfc.iteration_loop = new VBROldIterationLoop(qu); - break; - } - - default: /* cbr/abr */ - { - var vbrmode; - - /* - * no sfb21 extra with CBR code - */ - gfc.sfb21_extra = false; - - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - - vbrmode = gfp.VBR; - if (vbrmode == VbrMode.vbr_off) - gfp.VBR_mean_bitrate_kbps = gfp.brate; - /* second, set parameters depending on bitrate */ - p.apply_preset(gfp, gfp.VBR_mean_bitrate_kbps, 0); - gfp.VBR = vbrmode; - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - if (vbrmode == VbrMode.vbr_off) { - gfc.iteration_loop = new CBRNewIterationLoop(qu); - } else { - gfc.iteration_loop = new ABRIterationLoop(qu); - } - break; - } - } - assert(gfp.scale >= 0); - /* initialize default values common for all modes */ - - if (gfp.VBR != VbrMode.vbr_off) { /* choose a min/max bitrate for VBR */ - /* if the user didn't specify VBR_max_bitrate: */ - gfc.VBR_min_bitrate = 1; - /* - * default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1) - */ - gfc.VBR_max_bitrate = 14; - /* - * default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1) - */ - if (gfp.out_samplerate < 16000) - gfc.VBR_max_bitrate = 8; - /* default: allow 64 kbps (MPEG-2.5) */ - if (gfp.VBR_min_bitrate_kbps != 0) { - gfp.VBR_min_bitrate_kbps = FindNearestBitrate( - gfp.VBR_min_bitrate_kbps, gfp.version, - gfp.out_samplerate); - gfc.VBR_min_bitrate = BitrateIndex(gfp.VBR_min_bitrate_kbps, - gfp.version, gfp.out_samplerate); - if (gfc.VBR_min_bitrate < 0) - return -1; - } - if (gfp.VBR_max_bitrate_kbps != 0) { - gfp.VBR_max_bitrate_kbps = FindNearestBitrate( - gfp.VBR_max_bitrate_kbps, gfp.version, - gfp.out_samplerate); - gfc.VBR_max_bitrate = BitrateIndex(gfp.VBR_max_bitrate_kbps, - gfp.version, gfp.out_samplerate); - if (gfc.VBR_max_bitrate < 0) - return -1; - } - gfp.VBR_min_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate]; - gfp.VBR_max_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate]; - gfp.VBR_mean_bitrate_kbps = Math.min( - Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate], - gfp.VBR_mean_bitrate_kbps); - gfp.VBR_mean_bitrate_kbps = Math.max( - Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate], - gfp.VBR_mean_bitrate_kbps); - } - - /* just another daily changing developer switch */ - if (gfp.tune) { - gfc.PSY.mask_adjust += gfp.tune_value_a; - gfc.PSY.mask_adjust_short += gfp.tune_value_a; - } - - /* initialize internal qval settings */ - lame_init_qval(gfp); - assert(gfp.scale >= 0); - /* - * automatic ATH adjustment on - */ - if (gfp.athaa_type < 0) - gfc.ATH.useAdjust = 3; - else - gfc.ATH.useAdjust = gfp.athaa_type; - - /* initialize internal adaptive ATH settings -jd */ - gfc.ATH.aaSensitivityP = Math.pow(10.0, gfp.athaa_sensitivity - / -10.0); - - if (gfp.short_blocks == null) { - gfp.short_blocks = ShortBlock.short_block_allowed; - } - - /* - * Note Jan/2003: Many hardware decoders cannot handle short blocks in - * regular stereo mode unless they are coupled (same type in both - * channels) it is a rare event (1 frame per min. or so) that LAME would - * use uncoupled short blocks, so lets turn them off until we decide how - * to handle this. No other encoders allow uncoupled short blocks, even - * though it is in the standard. - */ - /* - * rh 20040217: coupling makes no sense for mono and dual-mono streams - */ - if (gfp.short_blocks == ShortBlock.short_block_allowed - && (gfp.mode == MPEGMode.JOINT_STEREO || gfp.mode == MPEGMode.STEREO)) { - gfp.short_blocks = ShortBlock.short_block_coupled; - } - - if (gfp.quant_comp < 0) - gfp.quant_comp = 1; - if (gfp.quant_comp_short < 0) - gfp.quant_comp_short = 0; - - if (gfp.msfix < 0) - gfp.msfix = 0; - - /* select psychoacoustic model */ - gfp.exp_nspsytune = gfp.exp_nspsytune | 1; - - if (gfp.internal_flags.nsPsy.attackthre < 0) - gfp.internal_flags.nsPsy.attackthre = PsyModel.NSATTACKTHRE; - if (gfp.internal_flags.nsPsy.attackthre_s < 0) - gfp.internal_flags.nsPsy.attackthre_s = PsyModel.NSATTACKTHRE_S; - - assert(gfp.scale >= 0); - - if (gfp.scale < 0) - gfp.scale = 1; - - if (gfp.ATHtype < 0) - gfp.ATHtype = 4; - - if (gfp.ATHcurve < 0) - gfp.ATHcurve = 4; - - if (gfp.athaa_loudapprox < 0) - gfp.athaa_loudapprox = 2; - - if (gfp.interChRatio < 0) - gfp.interChRatio = 0; - - if (gfp.useTemporal == null) - gfp.useTemporal = true; - /* on by default */ - - /* - * padding method as described in - * "MPEG-Layer3 / Bitstream Syntax and Decoding" by Martin Sieler, Ralph - * Sperschneider - * - * note: there is no padding for the very first frame - * - * Robert Hegemann 2000-06-22 - */ - gfc.slot_lag = gfc.frac_SpF = 0; - if (gfp.VBR == VbrMode.vbr_off) - gfc.slot_lag = gfc.frac_SpF = (((gfp.version + 1) * 72000 * gfp.brate) % gfp.out_samplerate) | 0; - - qupvt.iteration_init(gfp); - psy.psymodel_init(gfp); - assert(gfp.scale >= 0); - return 0; - } - - function update_inbuffer_size(gfc, nsamples) { - if (gfc.in_buffer_0 == null || gfc.in_buffer_nsamples < nsamples) { - gfc.in_buffer_0 = new_float(nsamples); - gfc.in_buffer_1 = new_float(nsamples); - gfc.in_buffer_nsamples = nsamples; - } - } - - this.lame_encode_flush = function (gfp, mp3buffer, mp3bufferPos, mp3buffer_size) { - var gfc = gfp.internal_flags; - var buffer = new_short_n([2, 1152]); - var imp3 = 0, mp3count, mp3buffer_size_remaining; - - /* - * we always add POSTDELAY=288 padding to make sure granule with real - * data can be complety decoded (because of 50% overlap with next - * granule - */ - var end_padding; - var frames_left; - var samples_to_encode = gfc.mf_samples_to_encode - Encoder.POSTDELAY; - var mf_needed = calcNeeded(gfp); - - /* Was flush already called? */ - if (gfc.mf_samples_to_encode < 1) { - return 0; - } - mp3count = 0; - - if (gfp.in_samplerate != gfp.out_samplerate) { - /* - * delay due to resampling; needs to be fixed, if resampling code - * gets changed - */ - samples_to_encode += 16. * gfp.out_samplerate / gfp.in_samplerate; - } - end_padding = gfp.framesize - (samples_to_encode % gfp.framesize); - if (end_padding < 576) - end_padding += gfp.framesize; - gfp.encoder_padding = end_padding; - - frames_left = (samples_to_encode + end_padding) / gfp.framesize; - - /* - * send in a frame of 0 padding until all internal sample buffers are - * flushed - */ - while (frames_left > 0 && imp3 >= 0) { - var bunch = mf_needed - gfc.mf_size; - var frame_num = gfp.frameNum; - - bunch *= gfp.in_samplerate; - bunch /= gfp.out_samplerate; - if (bunch > 1152) - bunch = 1152; - if (bunch < 1) - bunch = 1; - - mp3buffer_size_remaining = mp3buffer_size - mp3count; - - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - imp3 = this.lame_encode_buffer(gfp, buffer[0], buffer[1], bunch, - mp3buffer, mp3bufferPos, mp3buffer_size_remaining); - - mp3bufferPos += imp3; - mp3count += imp3; - frames_left -= (frame_num != gfp.frameNum) ? 1 : 0; - } - /* - * Set gfc.mf_samples_to_encode to 0, so we may detect and break loops - * calling it more than once in a row. - */ - gfc.mf_samples_to_encode = 0; - - if (imp3 < 0) { - /* some type of fatal error */ - return imp3; - } - - mp3buffer_size_remaining = mp3buffer_size - mp3count; - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - /* mp3 related stuff. bit buffer might still contain some mp3 data */ - bs.flush_bitstream(gfp); - imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos, - mp3buffer_size_remaining, 1); - if (imp3 < 0) { - /* some type of fatal error */ - return imp3; - } - mp3bufferPos += imp3; - mp3count += imp3; - mp3buffer_size_remaining = mp3buffer_size - mp3count; - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - if (gfp.write_id3tag_automatic) { - /* write a id3 tag to the bitstream */ - id3.id3tag_write_v1(gfp); - - imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos, - mp3buffer_size_remaining, 0); - - if (imp3 < 0) { - return imp3; - } - mp3count += imp3; - } - return mp3count; - }; - - this.lame_encode_buffer = function (gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) { - var gfc = gfp.internal_flags; - var in_buffer = [null, null]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - update_inbuffer_size(gfc, nsamples); - - in_buffer[0] = gfc.in_buffer_0; - in_buffer[1] = gfc.in_buffer_1; - - /* make a copy of input buffer, changing type to sample_t */ - for (var i = 0; i < nsamples; i++) { - in_buffer[0][i] = buffer_l[i]; - if (gfc.channels_in > 1) - in_buffer[1][i] = buffer_r[i]; - } - - return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1], - nsamples, mp3buf, mp3bufPos, mp3buf_size); - } - - function calcNeeded(gfp) { - var mf_needed = Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET; - /* - * amount needed for FFT - */ - mf_needed = Math.max(mf_needed, 512 + gfp.framesize - 32); - assert(LameInternalFlags.MFSIZE >= mf_needed); - - return mf_needed; - } - - function lame_encode_buffer_sample(gfp, buffer_l, buffer_r, nsamples, mp3buf, mp3bufPos, mp3buf_size) { - var gfc = gfp.internal_flags; - var mp3size = 0, ret, i, ch, mf_needed; - var mp3out; - var mfbuf = [null, null]; - var in_buffer = [null, null]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - /* copy out any tags that may have been written into bitstream */ - mp3out = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 0); - if (mp3out < 0) - return mp3out; - /* not enough buffer space */ - mp3bufPos += mp3out; - mp3size += mp3out; - - in_buffer[0] = buffer_l; - in_buffer[1] = buffer_r; - - /* Apply user defined re-scaling */ - - /* user selected scaling of the samples */ - if (BitStream.NEQ(gfp.scale, 0) && BitStream.NEQ(gfp.scale, 1.0)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] *= gfp.scale; - if (gfc.channels_out == 2) - in_buffer[1][i] *= gfp.scale; - } - } - - /* user selected scaling of the channel 0 (left) samples */ - if (BitStream.NEQ(gfp.scale_left, 0) - && BitStream.NEQ(gfp.scale_left, 1.0)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] *= gfp.scale_left; - } - } - - /* user selected scaling of the channel 1 (right) samples */ - if (BitStream.NEQ(gfp.scale_right, 0) - && BitStream.NEQ(gfp.scale_right, 1.0)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[1][i] *= gfp.scale_right; - } - } - - /* Downsample to Mono if 2 channels in and 1 channel out */ - if (gfp.num_channels == 2 && gfc.channels_out == 1) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] = 0.5 * ( in_buffer[0][i] + in_buffer[1][i]); - in_buffer[1][i] = 0.0; - } - } - - mf_needed = calcNeeded(gfp); - - mfbuf[0] = gfc.mfbuf[0]; - mfbuf[1] = gfc.mfbuf[1]; - - var in_bufferPos = 0; - while (nsamples > 0) { - var in_buffer_ptr = [null, null]; - var n_in = 0; - /* number of input samples processed with fill_buffer */ - var n_out = 0; - /* number of samples output with fill_buffer */ - /* n_in <> n_out if we are resampling */ - - in_buffer_ptr[0] = in_buffer[0]; - in_buffer_ptr[1] = in_buffer[1]; - /* copy in new samples into mfbuf, with resampling */ - var inOut = new InOut(); - fill_buffer(gfp, mfbuf, in_buffer_ptr, in_bufferPos, nsamples, - inOut); - n_in = inOut.n_in; - n_out = inOut.n_out; - - /* compute ReplayGain of resampled input if requested */ - if (gfc.findReplayGain && !gfc.decode_on_the_fly) - if (ga.AnalyzeSamples(gfc.rgdata, mfbuf[0], gfc.mf_size, - mfbuf[1], gfc.mf_size, n_out, gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR) - return -6; - - /* update in_buffer counters */ - nsamples -= n_in; - in_bufferPos += n_in; - if (gfc.channels_out == 2) - ;// in_bufferPos += n_in; - - /* update mfbuf[] counters */ - gfc.mf_size += n_out; - assert(gfc.mf_size <= LameInternalFlags.MFSIZE); - - /* - * lame_encode_flush may have set gfc.mf_sample_to_encode to 0 so we - * have to reinitialize it here when that happened. - */ - if (gfc.mf_samples_to_encode < 1) { - gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY; - } - gfc.mf_samples_to_encode += n_out; - - if (gfc.mf_size >= mf_needed) { - /* encode the frame. */ - /* mp3buf = pointer to current location in buffer */ - /* mp3buf_size = size of original mp3 output buffer */ - /* = 0 if we should not worry about the */ - /* buffer size because calling program is */ - /* to lazy to compute it */ - /* mp3size = size of data written to buffer so far */ - /* mp3buf_size-mp3size = amount of space avalable */ - - var buf_size = mp3buf_size - mp3size; - if (mp3buf_size == 0) - buf_size = 0; - - ret = lame_encode_frame(gfp, mfbuf[0], mfbuf[1], mp3buf, - mp3bufPos, buf_size); - - if (ret < 0) - return ret; - mp3bufPos += ret; - mp3size += ret; - - /* shift out old samples */ - gfc.mf_size -= gfp.framesize; - gfc.mf_samples_to_encode -= gfp.framesize; - for (ch = 0; ch < gfc.channels_out; ch++) - for (i = 0; i < gfc.mf_size; i++) - mfbuf[ch][i] = mfbuf[ch][i + gfp.framesize]; - } - } - assert(nsamples == 0); - - return mp3size; - } - - function lame_encode_frame(gfp, inbuf_l, inbuf_r, mp3buf, mp3bufPos, mp3buf_size) { - var ret = self.enc.lame_encode_mp3_frame(gfp, inbuf_l, inbuf_r, mp3buf, - mp3bufPos, mp3buf_size); - gfp.frameNum++; - return ret; - } - - function InOut() { - this.n_in = 0; - this.n_out = 0; - } - - - function NumUsed() { - this.num_used = 0; - } - - /** - * Greatest common divisor. - *

- * Joint work of Euclid and M. Hendry - */ - function gcd(i, j) { - return j != 0 ? gcd(j, i % j) : i; - } - - /** - * Resampling via FIR filter, blackman window. - */ - function blackman(x, fcn, l) { - /* - * This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C - * S.D. Stearns and R.A. David, Prentice-Hall, 1992 - */ - var wcn = (Math.PI * fcn); - - x /= l; - if (x < 0) - x = 0; - if (x > 1) - x = 1; - var x2 = x - .5; - - var bkwn = 0.42 - 0.5 * Math.cos(2 * x * Math.PI) + 0.08 * Math.cos(4 * x * Math.PI); - if (Math.abs(x2) < 1e-9) - return (wcn / Math.PI); - else - return (bkwn * Math.sin(l * wcn * x2) / (Math.PI * l * x2)); - } - - function fill_buffer_resample(gfp, outbuf, outbufPos, desired_len, inbuf, in_bufferPos, len, num_used, ch) { - var gfc = gfp.internal_flags; - var i, j = 0, k; - /* number of convolution functions to pre-compute */ - var bpc = gfp.out_samplerate - / gcd(gfp.out_samplerate, gfp.in_samplerate); - if (bpc > LameInternalFlags.BPC) - bpc = LameInternalFlags.BPC; - - var intratio = (Math.abs(gfc.resample_ratio - - Math.floor(.5 + gfc.resample_ratio)) < .0001) ? 1 : 0; - var fcn = 1.00 / gfc.resample_ratio; - if (fcn > 1.00) - fcn = 1.00; - var filter_l = 31; - if (0 == filter_l % 2) - --filter_l; - /* must be odd */ - filter_l += intratio; - /* unless resample_ratio=int, it must be even */ - - var BLACKSIZE = filter_l + 1; - /* size of data needed for FIR */ - - if (gfc.fill_buffer_resample_init == 0) { - gfc.inbuf_old[0] = new_float(BLACKSIZE); - gfc.inbuf_old[1] = new_float(BLACKSIZE); - for (i = 0; i <= 2 * bpc; ++i) - gfc.blackfilt[i] = new_float(BLACKSIZE); - - gfc.itime[0] = 0; - gfc.itime[1] = 0; - - /* precompute blackman filter coefficients */ - for (j = 0; j <= 2 * bpc; j++) { - var sum = 0.; - var offset = (j - bpc) / (2. * bpc); - for (i = 0; i <= filter_l; i++) - sum += gfc.blackfilt[j][i] = blackman(i - offset, fcn, - filter_l); - for (i = 0; i <= filter_l; i++) - gfc.blackfilt[j][i] /= sum; - } - gfc.fill_buffer_resample_init = 1; - } - - var inbuf_old = gfc.inbuf_old[ch]; - - /* time of j'th element in inbuf = itime + j/ifreq; */ - /* time of k'th element in outbuf = j/ofreq */ - for (k = 0; k < desired_len; k++) { - var time0; - var joff; - - time0 = k * gfc.resample_ratio; - /* time of k'th output sample */ - j = 0 | Math.floor(time0 - gfc.itime[ch]); - - /* check if we need more input data */ - if ((filter_l + j - filter_l / 2) >= len) - break; - - /* blackman filter. by default, window centered at j+.5(filter_l%2) */ - /* but we want a window centered at time0. */ - var offset = (time0 - gfc.itime[ch] - (j + .5 * (filter_l % 2))); - assert(Math.abs(offset) <= .501); - - /* find the closest precomputed window for this offset: */ - joff = 0 | Math.floor((offset * 2 * bpc) + bpc + .5); - var xvalue = 0.; - for (i = 0; i <= filter_l; ++i) { - /* force integer index */ - var j2 = 0 | (i + j - filter_l / 2); - var y; - assert(j2 < len); - assert(j2 + BLACKSIZE >= 0); - y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[in_bufferPos - + j2]; - xvalue += y * gfc.blackfilt[joff][i]; - } - outbuf[outbufPos + k] = xvalue; - } - - /* k = number of samples added to outbuf */ - /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */ - - /* how many samples of input data were used: */ - num_used.num_used = Math.min(len, filter_l + j - filter_l / 2); - - /* - * adjust our input time counter. Incriment by the number of samples - * used, then normalize so that next output sample is at time 0, next - * input buffer is at time itime[ch] - */ - gfc.itime[ch] += num_used.num_used - k * gfc.resample_ratio; - - /* save the last BLACKSIZE samples into the inbuf_old buffer */ - if (num_used.num_used >= BLACKSIZE) { - for (i = 0; i < BLACKSIZE; i++) - inbuf_old[i] = inbuf[in_bufferPos + num_used.num_used + i - - BLACKSIZE]; - } else { - /* shift in num_used.num_used samples into inbuf_old */ - var n_shift = BLACKSIZE - num_used.num_used; - /* - * number of samples to - * shift - */ - - /* - * shift n_shift samples by num_used.num_used, to make room for the - * num_used new samples - */ - for (i = 0; i < n_shift; ++i) - inbuf_old[i] = inbuf_old[i + num_used.num_used]; - - /* shift in the num_used.num_used samples */ - for (j = 0; i < BLACKSIZE; ++i, ++j) - inbuf_old[i] = inbuf[in_bufferPos + j]; - - assert(j == num_used.num_used); - } - return k; - /* return the number samples created at the new samplerate */ - } - - function fill_buffer(gfp, mfbuf, in_buffer, in_bufferPos, nsamples, io) { - var gfc = gfp.internal_flags; - - /* copy in new samples into mfbuf, with resampling if necessary */ - if ((gfc.resample_ratio < .9999) || (gfc.resample_ratio > 1.0001)) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - var numUsed = new NumUsed(); - io.n_out = fill_buffer_resample(gfp, mfbuf[ch], gfc.mf_size, - gfp.framesize, in_buffer[ch], in_bufferPos, nsamples, - numUsed, ch); - io.n_in = numUsed.num_used; - } - } else { - io.n_out = Math.min(gfp.framesize, nsamples); - io.n_in = io.n_out; - for (var i = 0; i < io.n_out; ++i) { - mfbuf[0][gfc.mf_size + i] = in_buffer[0][in_bufferPos + i]; - if (gfc.channels_out == 2) - mfbuf[1][gfc.mf_size + i] = in_buffer[1][in_bufferPos + i]; - } - } - } - -} - -module.exports = Lame; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameGlobalFlags.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameGlobalFlags.js deleted file mode 100644 index 67ba833fa..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameGlobalFlags.js +++ /dev/null @@ -1,269 +0,0 @@ -var MPEGMode = require('./MPEGMode.js'); - -function LameGlobalFlags() { - - this.class_id = 0; - - /* input description */ - - /** - * number of samples. default=-1 - */ - this.num_samples = 0; - /** - * input number of channels. default=2 - */ - this.num_channels = 0; - /** - * input_samp_rate in Hz. default=44.1 kHz - */ - this.in_samplerate = 0; - /** - * output_samp_rate. default: LAME picks best value at least not used for - * MP3 decoding: Remember 44.1 kHz MP3s and AC97 - */ - this.out_samplerate = 0; - /** - * scale input by this amount before encoding at least not used for MP3 - * decoding - */ - this.scale = 0.; - /** - * scale input of channel 0 (left) by this amount before encoding - */ - this.scale_left = 0.; - /** - * scale input of channel 1 (right) by this amount before encoding - */ - this.scale_right = 0.; - - /* general control params */ - /** - * collect data for a MP3 frame analyzer? - */ - this.analysis = false; - /** - * add Xing VBR tag? - */ - this.bWriteVbrTag = false; - - /** - * use lame/mpglib to convert mp3 to wav - */ - this.decode_only = false; - /** - * quality setting 0=best, 9=worst default=5 - */ - this.quality = 0; - /** - * see enum default = LAME picks best value - */ - this.mode = MPEGMode.STEREO; - /** - * force M/S mode. requires mode=1 - */ - this.force_ms = false; - /** - * use free format? default=0 - */ - this.free_format = false; - /** - * find the RG value? default=0 - */ - this.findReplayGain = false; - /** - * decode on the fly? default=0 - */ - this.decode_on_the_fly = false; - /** - * 1 (default) writes ID3 tags, 0 not - */ - this.write_id3tag_automatic = false; - - /* - * set either brate>0 or compression_ratio>0, LAME will compute the value of - * the variable not set. Default is compression_ratio = 11.025 - */ - /** - * bitrate - */ - this.brate = 0; - /** - * sizeof(wav file)/sizeof(mp3 file) - */ - this.compression_ratio = 0.; - - /* frame params */ - /** - * mark as copyright. default=0 - */ - this.copyright = 0; - /** - * mark as original. default=1 - */ - this.original = 0; - /** - * the MP3 'private extension' bit. Meaningless - */ - this.extension = 0; - /** - * Input PCM is emphased PCM (for instance from one of the rarely emphased - * CDs), it is STRONGLY not recommended to use this, because psycho does not - * take it into account, and last but not least many decoders don't care - * about these bits - */ - this.emphasis = 0; - /** - * use 2 bytes per frame for a CRC checksum. default=0 - */ - this.error_protection = 0; - /** - * enforce ISO spec as much as possible - */ - this.strict_ISO = false; - - /** - * use bit reservoir? - */ - this.disable_reservoir = false; - - /* quantization/noise shaping */ - this.quant_comp = 0; - this.quant_comp_short = 0; - this.experimentalY = false; - this.experimentalZ = 0; - this.exp_nspsytune = 0; - - this.preset = 0; - - /* VBR control */ - this.VBR = null; - /** - * Range [0,...,1[ - */ - this.VBR_q_frac = 0.; - /** - * Range [0,...,9] - */ - this.VBR_q = 0; - this.VBR_mean_bitrate_kbps = 0; - this.VBR_min_bitrate_kbps = 0; - this.VBR_max_bitrate_kbps = 0; - /** - * strictly enforce VBR_min_bitrate normaly, it will be violated for analog - * silence - */ - this.VBR_hard_min = 0; - - /* resampling and filtering */ - - /** - * freq in Hz. 0=lame choses. -1=no filter - */ - this.lowpassfreq = 0; - /** - * freq in Hz. 0=lame choses. -1=no filter - */ - this.highpassfreq = 0; - /** - * freq width of filter, in Hz (default=15%) - */ - this.lowpasswidth = 0; - /** - * freq width of filter, in Hz (default=15%) - */ - this.highpasswidth = 0; - - /* - * psycho acoustics and other arguments which you should not change unless - * you know what you are doing - */ - - this.maskingadjust = 0.; - this.maskingadjust_short = 0.; - /** - * only use ATH - */ - this.ATHonly = false; - /** - * only use ATH for short blocks - */ - this.ATHshort = false; - /** - * disable ATH - */ - this.noATH = false; - /** - * select ATH formula - */ - this.ATHtype = 0; - /** - * change ATH formula 4 shape - */ - this.ATHcurve = 0.; - /** - * lower ATH by this many db - */ - this.ATHlower = 0.; - /** - * select ATH auto-adjust scheme - */ - this.athaa_type = 0; - /** - * select ATH auto-adjust loudness calc - */ - this.athaa_loudapprox = 0; - /** - * dB, tune active region of auto-level - */ - this.athaa_sensitivity = 0.; - this.short_blocks = null; - /** - * use temporal masking effect - */ - this.useTemporal = false; - this.interChRatio = 0.; - /** - * Naoki's adjustment of Mid/Side maskings - */ - this.msfix = 0.; - - /** - * 0 off, 1 on - */ - this.tune = false; - /** - * used to pass values for debugging and stuff - */ - this.tune_value_a = 0.; - - /************************************************************************/ - /* internal variables, do not set... */ - /* provided because they may be of use to calling application */ - /************************************************************************/ - - /** - * 0=MPEG-2/2.5 1=MPEG-1 - */ - this.version = 0; - this.encoder_delay = 0; - /** - * number of samples of padding appended to input - */ - this.encoder_padding = 0; - this.framesize = 0; - /** - * number of frames encoded - */ - this.frameNum = 0; - /** - * is this struct owned by calling program or lame? - */ - this.lame_allocated_gfp = 0; - /**************************************************************************/ - /* more internal variables are stored in this structure: */ - /**************************************************************************/ - this.internal_flags = null; -} - -module.exports = LameGlobalFlags; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameInternalFlags.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameInternalFlags.js deleted file mode 100644 index c4311e9f6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/LameInternalFlags.js +++ /dev/null @@ -1,390 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var IIISideInfo = require('./IIISideInfo.js'); -var ScaleFac = require('./ScaleFac.js'); -var NsPsy = require('./NsPsy.js'); -var VBRSeekInfo = require('./VBRSeekInfo.js'); -var III_psy_xmin = require('./III_psy_xmin.js'); -var Encoder = require('./Encoder.js'); -var L3Side = require('./L3Side.js'); - - -LameInternalFlags.MFSIZE = (3 * 1152 + Encoder.ENCDELAY - Encoder.MDCTDELAY); -LameInternalFlags.MAX_HEADER_BUF = 256; -LameInternalFlags.MAX_BITS_PER_CHANNEL = 4095; -LameInternalFlags.MAX_BITS_PER_GRANULE = 7680; -LameInternalFlags.BPC = 320; - -function LameInternalFlags() { - var MAX_HEADER_LEN = 40; - - - /******************************************************************** - * internal variables NOT set by calling program, and should not be * - * modified by the calling program * - ********************************************************************/ - - /** - * Some remarks to the Class_ID field: The Class ID is an Identifier for a - * pointer to this struct. It is very unlikely that a pointer to - * lame_global_flags has the same 32 bits in it's structure (large and other - * special properties, for instance prime). - * - * To test that the structure is right and initialized, use: if ( gfc . - * Class_ID == LAME_ID ) ... Other remark: If you set a flag to 0 for uninit - * data and 1 for init data, the right test should be "if (flag == 1)" and - * NOT "if (flag)". Unintended modification of this element will be - * otherwise misinterpreted as an init. - */ - this.Class_ID = 0; - - this.lame_encode_frame_init = 0; - this.iteration_init_init = 0; - this.fill_buffer_resample_init = 0; - - //public float mfbuf[][] = new float[2][MFSIZE]; - this.mfbuf = new_float_n([2, LameInternalFlags.MFSIZE]); - - /** - * granules per frame - */ - this.mode_gr = 0; - /** - * number of channels in the input data stream (PCM or decoded PCM) - */ - this.channels_in = 0; - /** - * number of channels in the output data stream (not used for decoding) - */ - this.channels_out = 0; - /** - * input_samp_rate/output_samp_rate - */ - //public double resample_ratio; - this.resample_ratio = 0.; - - this.mf_samples_to_encode = 0; - this.mf_size = 0; - /** - * min bitrate index - */ - this.VBR_min_bitrate = 0; - /** - * max bitrate index - */ - this.VBR_max_bitrate = 0; - this.bitrate_index = 0; - this.samplerate_index = 0; - this.mode_ext = 0; - - /* lowpass and highpass filter control */ - /** - * normalized frequency bounds of passband - */ - this.lowpass1 = 0.; - this.lowpass2 = 0.; - /** - * normalized frequency bounds of passband - */ - this.highpass1 = 0.; - this.highpass2 = 0.; - - /** - * 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1 - */ - this.noise_shaping = 0; - - /** - * 0 = ISO model: amplify all distorted bands
- * 1 = amplify within 50% of max (on db scale)
- * 2 = amplify only most distorted band
- * 3 = method 1 and refine with method 2
- */ - this.noise_shaping_amp = 0; - /** - * 0 = no substep
- * 1 = use substep shaping at last step(VBR only)
- * (not implemented yet)
- * 2 = use substep inside loop
- * 3 = use substep inside loop and last step
- */ - this.substep_shaping = 0; - - /** - * 1 = gpsycho. 0 = none - */ - this.psymodel = 0; - /** - * 0 = stop at over=0, all scalefacs amplified or
- * a scalefac has reached max value
- * 1 = stop when all scalefacs amplified or a scalefac has reached max value
- * 2 = stop when all scalefacs amplified - */ - this.noise_shaping_stop = 0; - - /** - * 0 = no, 1 = yes - */ - this.subblock_gain = 0; - /** - * 0 = no. 1=outside loop 2=inside loop(slow) - */ - this.use_best_huffman = 0; - - /** - * 0 = stop early after 0 distortion found. 1 = full search - */ - this.full_outer_loop = 0; - - //public IIISideInfo l3_side = new IIISideInfo(); - this.l3_side = new IIISideInfo(); - this.ms_ratio = new_float(2); - - /* used for padding */ - /** - * padding for the current frame? - */ - this.padding = 0; - this.frac_SpF = 0; - this.slot_lag = 0; - - /** - * optional ID3 tags - */ - //public ID3TagSpec tag_spec; - this.tag_spec = null; - this.nMusicCRC = 0; - - /* variables used by Quantize */ - //public int OldValue[] = new int[2]; - this.OldValue = new_int(2); - //public int CurrentStep[] = new int[2]; - this.CurrentStep = new_int(2); - - this.masking_lower = 0.; - //public int bv_scf[] = new int[576]; - this.bv_scf = new_int(576); - //public int pseudohalf[] = new int[L3Side.SFBMAX]; - this.pseudohalf = new_int(L3Side.SFBMAX); - - /** - * will be set in lame_init_params - */ - this.sfb21_extra = false; - - /* BPC = maximum number of filter convolution windows to precompute */ - //public float[][] inbuf_old = new float[2][]; - this.inbuf_old = new Array(2); - //public float[][] blackfilt = new float[2 * BPC + 1][]; - this.blackfilt = new Array(2 * LameInternalFlags.BPC + 1); - //public double itime[] = new double[2]; - this.itime = new_double(2); - this.sideinfo_len = 0; - - /* variables for newmdct.c */ - //public float sb_sample[][][][] = new float[2][2][18][Encoder.SBLIMIT]; - this.sb_sample = new_float_n([2, 2, 18, Encoder.SBLIMIT]); - this.amp_filter = new_float(32); - - /* variables for BitStream */ - - /** - *

-     * mpeg1: buffer=511 bytes  smallest frame: 96-38(sideinfo)=58
-     * max number of frames in reservoir:  8
-     * mpeg2: buffer=255 bytes.  smallest frame: 24-23bytes=1
-     * with VBR, if you are encoding all silence, it is possible to
-     * have 8kbs/24khz frames with 1byte of data each, which means we need
-     * to buffer up to 255 headers!
-     * 
- */ - /** - * also, max_header_buf has to be a power of two - */ - /** - * max size of header is 38 - */ - - function Header() { - this.write_timing = 0; - this.ptr = 0; - //public byte buf[] = new byte[MAX_HEADER_LEN]; - this.buf = new_byte(MAX_HEADER_LEN); - } - - this.header = new Array(LameInternalFlags.MAX_HEADER_BUF); - - this.h_ptr = 0; - this.w_ptr = 0; - this.ancillary_flag = 0; - - /* variables for Reservoir */ - /** - * in bits - */ - this.ResvSize = 0; - /** - * in bits - */ - this.ResvMax = 0; - - //public ScaleFac scalefac_band = new ScaleFac(); - this.scalefac_band = new ScaleFac(); - - /* daa from PsyModel */ - /* The static variables "r", "phi_sav", "new", "old" and "oldest" have */ - /* to be remembered for the unpredictability measure. For "r" and */ - /* "phi_sav", the first index from the left is the channel select and */ - /* the second index is the "age" of the data. */ - this.minval_l = new_float(Encoder.CBANDS); - this.minval_s = new_float(Encoder.CBANDS); - this.nb_1 = new_float_n([4, Encoder.CBANDS]); - this.nb_2 = new_float_n([4, Encoder.CBANDS]); - this.nb_s1 = new_float_n([4, Encoder.CBANDS]); - this.nb_s2 = new_float_n([4, Encoder.CBANDS]); - this.s3_ss = null; - this.s3_ll = null; - this.decay = 0.; - - //public III_psy_xmin[] thm = new III_psy_xmin[4]; - //public III_psy_xmin[] en = new III_psy_xmin[4]; - this.thm = new Array(4); - this.en = new Array(4); - - /** - * fft and energy calculation - */ - this.tot_ener = new_float(4); - - /* loudness calculation (for adaptive threshold of hearing) */ - /** - * loudness^2 approx. per granule and channel - */ - this.loudness_sq = new_float_n([2, 2]); - /** - * account for granule delay of L3psycho_anal - */ - this.loudness_sq_save = new_float(2); - - /** - * Scale Factor Bands - */ - this.mld_l = new_float(Encoder.SBMAX_l); - this.mld_s = new_float(Encoder.SBMAX_s); - this.bm_l = new_int(Encoder.SBMAX_l); - this.bo_l = new_int(Encoder.SBMAX_l); - this.bm_s = new_int(Encoder.SBMAX_s); - this.bo_s = new_int(Encoder.SBMAX_s); - this.npart_l = 0; - this.npart_s = 0; - - this.s3ind = new_int_n([Encoder.CBANDS, 2]); - this.s3ind_s = new_int_n([Encoder.CBANDS, 2]); - - this.numlines_s = new_int(Encoder.CBANDS); - this.numlines_l = new_int(Encoder.CBANDS); - this.rnumlines_l = new_float(Encoder.CBANDS); - this.mld_cb_l = new_float(Encoder.CBANDS); - this.mld_cb_s = new_float(Encoder.CBANDS); - this.numlines_s_num1 = 0; - this.numlines_l_num1 = 0; - - /* ratios */ - this.pe = new_float(4); - this.ms_ratio_s_old = 0.; - this.ms_ratio_l_old = 0.; - this.ms_ener_ratio_old = 0.; - - /** - * block type - */ - this.blocktype_old = new_int(2); - - /** - * variables used for --nspsytune - */ - this.nsPsy = new NsPsy(); - - /** - * used for Xing VBR header - */ - this.VBR_seek_table = new VBRSeekInfo(); - - /** - * all ATH related stuff - */ - //public ATH ATH; - this.ATH = null; - - this.PSY = null; - - this.nogap_total = 0; - this.nogap_current = 0; - - /* ReplayGain */ - this.decode_on_the_fly = true; - this.findReplayGain = true; - this.findPeakSample = true; - this.PeakSample = 0.; - this.RadioGain = 0; - this.AudiophileGain = 0; - //public ReplayGain rgdata; - this.rgdata = null; - - /** - * gain change required for preventing clipping - */ - this.noclipGainChange = 0; - /** - * user-specified scale factor required for preventing clipping - */ - this.noclipScale = 0.; - - /* simple statistics */ - this.bitrate_stereoMode_Hist = new_int_n([16, 4 + 1]); - /** - * norm/start/short/stop/mixed(short)/sum - */ - this.bitrate_blockType_Hist = new_int_n([16, 4 + 1 + 1]); - - //public PlottingData pinfo; - //public MPGLib.mpstr_tag hip; - this.pinfo = null; - this.hip = null; - - this.in_buffer_nsamples = 0; - //public float[] in_buffer_0; - //public float[] in_buffer_1; - this.in_buffer_0 = null; - this.in_buffer_1 = null; - - //public IIterationLoop iteration_loop; - this.iteration_loop = null; - - for (var i = 0; i < this.en.length; i++) { - this.en[i] = new III_psy_xmin(); - } - for (var i = 0; i < this.thm.length; i++) { - this.thm[i] = new III_psy_xmin(); - } - for (var i = 0; i < this.header.length; i++) { - this.header[i] = new Header(); - } - -} - -module.exports = LameInternalFlags; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MPEGMode.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MPEGMode.js deleted file mode 100644 index c46163771..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MPEGMode.js +++ /dev/null @@ -1,17 +0,0 @@ -//package mp3; - -/* MPEG modes */ -function MPEGMode(ordinal) { - var _ordinal = ordinal; - this.ordinal = function () { - return _ordinal; - } -} - -MPEGMode.STEREO = new MPEGMode(0); -MPEGMode.JOINT_STEREO = new MPEGMode(1); -MPEGMode.DUAL_CHANNEL = new MPEGMode(2); -MPEGMode.MONO = new MPEGMode(3); -MPEGMode.NOT_SET = new MPEGMode(4); - -module.exports = MPEGMode; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MeanBits.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MeanBits.js deleted file mode 100644 index 1294fd74e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/MeanBits.js +++ /dev/null @@ -1,5 +0,0 @@ -function MeanBits(meanBits) { - this.bits = meanBits; -} - -module.exports = MeanBits; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NewMDCT.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NewMDCT.js deleted file mode 100644 index c8223706c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NewMDCT.js +++ /dev/null @@ -1,1164 +0,0 @@ -/* - * MP3 window subband -> subband filtering -> mdct routine - * - * Copyright (c) 1999-2000 Takehiro Tominaga - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Special Thanks to Patrick De Smet for your advices. - */ - -/* $Id: NewMDCT.java,v 1.11 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -//import java.util.Arrays; -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); - - -function NewMDCT() { - - var enwindow = [ - -4.77e-07 * 0.740951125354959 / 2.384e-06, - 1.03951e-04 * 0.740951125354959 / 2.384e-06, - 9.53674e-04 * 0.740951125354959 / 2.384e-06, - 2.841473e-03 * 0.740951125354959 / 2.384e-06, - 3.5758972e-02 * 0.740951125354959 / 2.384e-06, - 3.401756e-03 * 0.740951125354959 / 2.384e-06, - 9.83715e-04 * 0.740951125354959 / 2.384e-06, - 9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */ - 1.2398e-05 * 0.740951125354959 / 2.384e-06, - 1.91212e-04 * 0.740951125354959 / 2.384e-06, - 2.283096e-03 * 0.740951125354959 / 2.384e-06, - 1.6994476e-02 * 0.740951125354959 / 2.384e-06, - -1.8756866e-02 * 0.740951125354959 / 2.384e-06, - -2.630711e-03 * 0.740951125354959 / 2.384e-06, - -2.47478e-04 * 0.740951125354959 / 2.384e-06, - -1.4782e-05 * 0.740951125354959 / 2.384e-06, - 9.063471690191471e-01, 1.960342806591213e-01, - - -4.77e-07 * 0.773010453362737 / 2.384e-06, - 1.05858e-04 * 0.773010453362737 / 2.384e-06, - 9.30786e-04 * 0.773010453362737 / 2.384e-06, - 2.521515e-03 * 0.773010453362737 / 2.384e-06, - 3.5694122e-02 * 0.773010453362737 / 2.384e-06, - 3.643036e-03 * 0.773010453362737 / 2.384e-06, - 9.91821e-04 * 0.773010453362737 / 2.384e-06, - 9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */ - 1.1444e-05 * 0.773010453362737 / 2.384e-06, - 1.65462e-04 * 0.773010453362737 / 2.384e-06, - 2.110004e-03 * 0.773010453362737 / 2.384e-06, - 1.6112804e-02 * 0.773010453362737 / 2.384e-06, - -1.9634247e-02 * 0.773010453362737 / 2.384e-06, - -2.803326e-03 * 0.773010453362737 / 2.384e-06, - -2.77042e-04 * 0.773010453362737 / 2.384e-06, - -1.6689e-05 * 0.773010453362737 / 2.384e-06, - 8.206787908286602e-01, 3.901806440322567e-01, - - -4.77e-07 * 0.803207531480645 / 2.384e-06, - 1.07288e-04 * 0.803207531480645 / 2.384e-06, - 9.02653e-04 * 0.803207531480645 / 2.384e-06, - 2.174854e-03 * 0.803207531480645 / 2.384e-06, - 3.5586357e-02 * 0.803207531480645 / 2.384e-06, - 3.858566e-03 * 0.803207531480645 / 2.384e-06, - 9.95159e-04 * 0.803207531480645 / 2.384e-06, - 9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */ - 1.0014e-05 * 0.803207531480645 / 2.384e-06, - 1.40190e-04 * 0.803207531480645 / 2.384e-06, - 1.937389e-03 * 0.803207531480645 / 2.384e-06, - 1.5233517e-02 * 0.803207531480645 / 2.384e-06, - -2.0506859e-02 * 0.803207531480645 / 2.384e-06, - -2.974033e-03 * 0.803207531480645 / 2.384e-06, - -3.07560e-04 * 0.803207531480645 / 2.384e-06, - -1.8120e-05 * 0.803207531480645 / 2.384e-06, - 7.416505462720353e-01, 5.805693545089249e-01, - - -4.77e-07 * 0.831469612302545 / 2.384e-06, - 1.08242e-04 * 0.831469612302545 / 2.384e-06, - 8.68797e-04 * 0.831469612302545 / 2.384e-06, - 1.800537e-03 * 0.831469612302545 / 2.384e-06, - 3.5435200e-02 * 0.831469612302545 / 2.384e-06, - 4.049301e-03 * 0.831469612302545 / 2.384e-06, - 9.94205e-04 * 0.831469612302545 / 2.384e-06, - 9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */ - 9.060e-06 * 0.831469612302545 / 2.384e-06, - 1.16348e-04 * 0.831469612302545 / 2.384e-06, - 1.766682e-03 * 0.831469612302545 / 2.384e-06, - 1.4358521e-02 * 0.831469612302545 / 2.384e-06, - -2.1372318e-02 * 0.831469612302545 / 2.384e-06, - -3.14188e-03 * 0.831469612302545 / 2.384e-06, - -3.39031e-04 * 0.831469612302545 / 2.384e-06, - -1.9550e-05 * 0.831469612302545 / 2.384e-06, - 6.681786379192989e-01, 7.653668647301797e-01, - - -4.77e-07 * 0.857728610000272 / 2.384e-06, - 1.08719e-04 * 0.857728610000272 / 2.384e-06, - 8.29220e-04 * 0.857728610000272 / 2.384e-06, - 1.399517e-03 * 0.857728610000272 / 2.384e-06, - 3.5242081e-02 * 0.857728610000272 / 2.384e-06, - 4.215240e-03 * 0.857728610000272 / 2.384e-06, - 9.89437e-04 * 0.857728610000272 / 2.384e-06, - 8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */ - 8.106e-06 * 0.857728610000272 / 2.384e-06, - 9.3937e-05 * 0.857728610000272 / 2.384e-06, - 1.597881e-03 * 0.857728610000272 / 2.384e-06, - 1.3489246e-02 * 0.857728610000272 / 2.384e-06, - -2.2228718e-02 * 0.857728610000272 / 2.384e-06, - -3.306866e-03 * 0.857728610000272 / 2.384e-06, - -3.71456e-04 * 0.857728610000272 / 2.384e-06, - -2.1458e-05 * 0.857728610000272 / 2.384e-06, - 5.993769336819237e-01, 9.427934736519954e-01, - - -4.77e-07 * 0.881921264348355 / 2.384e-06, - 1.08719e-04 * 0.881921264348355 / 2.384e-06, - 7.8392e-04 * 0.881921264348355 / 2.384e-06, - 9.71317e-04 * 0.881921264348355 / 2.384e-06, - 3.5007000e-02 * 0.881921264348355 / 2.384e-06, - 4.357815e-03 * 0.881921264348355 / 2.384e-06, - 9.80854e-04 * 0.881921264348355 / 2.384e-06, - 8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */ - 7.629e-06 * 0.881921264348355 / 2.384e-06, - 7.2956e-05 * 0.881921264348355 / 2.384e-06, - 1.432419e-03 * 0.881921264348355 / 2.384e-06, - 1.2627602e-02 * 0.881921264348355 / 2.384e-06, - -2.3074150e-02 * 0.881921264348355 / 2.384e-06, - -3.467083e-03 * 0.881921264348355 / 2.384e-06, - -4.04358e-04 * 0.881921264348355 / 2.384e-06, - -2.3365e-05 * 0.881921264348355 / 2.384e-06, - 5.345111359507916e-01, 1.111140466039205e+00, - - -9.54e-07 * 0.903989293123443 / 2.384e-06, - 1.08242e-04 * 0.903989293123443 / 2.384e-06, - 7.31945e-04 * 0.903989293123443 / 2.384e-06, - 5.15938e-04 * 0.903989293123443 / 2.384e-06, - 3.4730434e-02 * 0.903989293123443 / 2.384e-06, - 4.477024e-03 * 0.903989293123443 / 2.384e-06, - 9.68933e-04 * 0.903989293123443 / 2.384e-06, - 8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */ - 6.676e-06 * 0.903989293123443 / 2.384e-06, - 5.2929e-05 * 0.903989293123443 / 2.384e-06, - 1.269817e-03 * 0.903989293123443 / 2.384e-06, - 1.1775017e-02 * 0.903989293123443 / 2.384e-06, - -2.3907185e-02 * 0.903989293123443 / 2.384e-06, - -3.622532e-03 * 0.903989293123443 / 2.384e-06, - -4.38213e-04 * 0.903989293123443 / 2.384e-06, - -2.5272e-05 * 0.903989293123443 / 2.384e-06, - 4.729647758913199e-01, 1.268786568327291e+00, - - -9.54e-07 * 0.92387953251128675613 / 2.384e-06, - 1.06812e-04 * 0.92387953251128675613 / 2.384e-06, - 6.74248e-04 * 0.92387953251128675613 / 2.384e-06, - 3.3379e-05 * 0.92387953251128675613 / 2.384e-06, - 3.4412861e-02 * 0.92387953251128675613 / 2.384e-06, - 4.573822e-03 * 0.92387953251128675613 / 2.384e-06, - 9.54151e-04 * 0.92387953251128675613 / 2.384e-06, - 7.6771e-05 * 0.92387953251128675613 / 2.384e-06, - 6.199e-06 * 0.92387953251128675613 / 2.384e-06, - 3.4332e-05 * 0.92387953251128675613 / 2.384e-06, - 1.111031e-03 * 0.92387953251128675613 / 2.384e-06, - 1.0933399e-02 * 0.92387953251128675613 / 2.384e-06, - -2.4725437e-02 * 0.92387953251128675613 / 2.384e-06, - -3.771782e-03 * 0.92387953251128675613 / 2.384e-06, - -4.72546e-04 * 0.92387953251128675613 / 2.384e-06, - -2.7657e-05 * 0.92387953251128675613 / 2.384e-06, - 4.1421356237309504879e-01, /* tan(PI/8) */ - 1.414213562373095e+00, - - -9.54e-07 * 0.941544065183021 / 2.384e-06, - 1.05381e-04 * 0.941544065183021 / 2.384e-06, - 6.10352e-04 * 0.941544065183021 / 2.384e-06, - -4.75883e-04 * 0.941544065183021 / 2.384e-06, - 3.4055710e-02 * 0.941544065183021 / 2.384e-06, - 4.649162e-03 * 0.941544065183021 / 2.384e-06, - 9.35555e-04 * 0.941544065183021 / 2.384e-06, - 7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */ - 5.245e-06 * 0.941544065183021 / 2.384e-06, - 1.7166e-05 * 0.941544065183021 / 2.384e-06, - 9.56535e-04 * 0.941544065183021 / 2.384e-06, - 1.0103703e-02 * 0.941544065183021 / 2.384e-06, - -2.5527000e-02 * 0.941544065183021 / 2.384e-06, - -3.914356e-03 * 0.941544065183021 / 2.384e-06, - -5.07355e-04 * 0.941544065183021 / 2.384e-06, - -3.0041e-05 * 0.941544065183021 / 2.384e-06, - 3.578057213145241e-01, 1.546020906725474e+00, - - -9.54e-07 * 0.956940335732209 / 2.384e-06, - 1.02520e-04 * 0.956940335732209 / 2.384e-06, - 5.39303e-04 * 0.956940335732209 / 2.384e-06, - -1.011848e-03 * 0.956940335732209 / 2.384e-06, - 3.3659935e-02 * 0.956940335732209 / 2.384e-06, - 4.703045e-03 * 0.956940335732209 / 2.384e-06, - 9.15051e-04 * 0.956940335732209 / 2.384e-06, - 7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */ - 4.768e-06 * 0.956940335732209 / 2.384e-06, - 9.54e-07 * 0.956940335732209 / 2.384e-06, - 8.06808e-04 * 0.956940335732209 / 2.384e-06, - 9.287834e-03 * 0.956940335732209 / 2.384e-06, - -2.6310921e-02 * 0.956940335732209 / 2.384e-06, - -4.048824e-03 * 0.956940335732209 / 2.384e-06, - -5.42164e-04 * 0.956940335732209 / 2.384e-06, - -3.2425e-05 * 0.956940335732209 / 2.384e-06, - 3.033466836073424e-01, 1.662939224605090e+00, - - -1.431e-06 * 0.970031253194544 / 2.384e-06, - 9.9182e-05 * 0.970031253194544 / 2.384e-06, - 4.62532e-04 * 0.970031253194544 / 2.384e-06, - -1.573563e-03 * 0.970031253194544 / 2.384e-06, - 3.3225536e-02 * 0.970031253194544 / 2.384e-06, - 4.737377e-03 * 0.970031253194544 / 2.384e-06, - 8.91685e-04 * 0.970031253194544 / 2.384e-06, - 6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */ - 4.292e-06 * 0.970031253194544 / 2.384e-06, - -1.3828e-05 * 0.970031253194544 / 2.384e-06, - 6.61850e-04 * 0.970031253194544 / 2.384e-06, - 8.487225e-03 * 0.970031253194544 / 2.384e-06, - -2.7073860e-02 * 0.970031253194544 / 2.384e-06, - -4.174709e-03 * 0.970031253194544 / 2.384e-06, - -5.76973e-04 * 0.970031253194544 / 2.384e-06, - -3.4809e-05 * 0.970031253194544 / 2.384e-06, - 2.504869601913055e-01, 1.763842528696710e+00, - - -1.431e-06 * 0.98078528040323 / 2.384e-06, - 9.5367e-05 * 0.98078528040323 / 2.384e-06, - 3.78609e-04 * 0.98078528040323 / 2.384e-06, - -2.161503e-03 * 0.98078528040323 / 2.384e-06, - 3.2754898e-02 * 0.98078528040323 / 2.384e-06, - 4.752159e-03 * 0.98078528040323 / 2.384e-06, - 8.66413e-04 * 0.98078528040323 / 2.384e-06, - 6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */ - 3.815e-06 * 0.98078528040323 / 2.384e-06, - -2.718e-05 * 0.98078528040323 / 2.384e-06, - 5.22137e-04 * 0.98078528040323 / 2.384e-06, - 7.703304e-03 * 0.98078528040323 / 2.384e-06, - -2.7815342e-02 * 0.98078528040323 / 2.384e-06, - -4.290581e-03 * 0.98078528040323 / 2.384e-06, - -6.11782e-04 * 0.98078528040323 / 2.384e-06, - -3.7670e-05 * 0.98078528040323 / 2.384e-06, - 1.989123673796580e-01, 1.847759065022573e+00, - - -1.907e-06 * 0.989176509964781 / 2.384e-06, - 9.0122e-05 * 0.989176509964781 / 2.384e-06, - 2.88486e-04 * 0.989176509964781 / 2.384e-06, - -2.774239e-03 * 0.989176509964781 / 2.384e-06, - 3.2248020e-02 * 0.989176509964781 / 2.384e-06, - 4.748821e-03 * 0.989176509964781 / 2.384e-06, - 8.38757e-04 * 0.989176509964781 / 2.384e-06, - 5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */ - 3.338e-06 * 0.989176509964781 / 2.384e-06, - -3.9577e-05 * 0.989176509964781 / 2.384e-06, - 3.88145e-04 * 0.989176509964781 / 2.384e-06, - 6.937027e-03 * 0.989176509964781 / 2.384e-06, - -2.8532982e-02 * 0.989176509964781 / 2.384e-06, - -4.395962e-03 * 0.989176509964781 / 2.384e-06, - -6.46591e-04 * 0.989176509964781 / 2.384e-06, - -4.0531e-05 * 0.989176509964781 / 2.384e-06, - 1.483359875383474e-01, 1.913880671464418e+00, - - -1.907e-06 * 0.995184726672197 / 2.384e-06, - 8.4400e-05 * 0.995184726672197 / 2.384e-06, - 1.91689e-04 * 0.995184726672197 / 2.384e-06, - -3.411293e-03 * 0.995184726672197 / 2.384e-06, - 3.1706810e-02 * 0.995184726672197 / 2.384e-06, - 4.728317e-03 * 0.995184726672197 / 2.384e-06, - 8.09669e-04 * 0.995184726672197 / 2.384e-06, - 5.579e-05 * 0.995184726672197 / 2.384e-06, - 3.338e-06 * 0.995184726672197 / 2.384e-06, - -5.0545e-05 * 0.995184726672197 / 2.384e-06, - 2.59876e-04 * 0.995184726672197 / 2.384e-06, - 6.189346e-03 * 0.995184726672197 / 2.384e-06, - -2.9224873e-02 * 0.995184726672197 / 2.384e-06, - -4.489899e-03 * 0.995184726672197 / 2.384e-06, - -6.80923e-04 * 0.995184726672197 / 2.384e-06, - -4.3392e-05 * 0.995184726672197 / 2.384e-06, - 9.849140335716425e-02, 1.961570560806461e+00, - - -2.384e-06 * 0.998795456205172 / 2.384e-06, - 7.7724e-05 * 0.998795456205172 / 2.384e-06, - 8.8215e-05 * 0.998795456205172 / 2.384e-06, - -4.072189e-03 * 0.998795456205172 / 2.384e-06, - 3.1132698e-02 * 0.998795456205172 / 2.384e-06, - 4.691124e-03 * 0.998795456205172 / 2.384e-06, - 7.79152e-04 * 0.998795456205172 / 2.384e-06, - 5.2929e-05 * 0.998795456205172 / 2.384e-06, - 2.861e-06 * 0.998795456205172 / 2.384e-06, - -6.0558e-05 * 0.998795456205172 / 2.384e-06, - 1.37329e-04 * 0.998795456205172 / 2.384e-06, - 5.462170e-03 * 0.998795456205172 / 2.384e-06, - -2.9890060e-02 * 0.998795456205172 / 2.384e-06, - -4.570484e-03 * 0.998795456205172 / 2.384e-06, - -7.14302e-04 * 0.998795456205172 / 2.384e-06, - -4.6253e-05 * 0.998795456205172 / 2.384e-06, - 4.912684976946725e-02, 1.990369453344394e+00, - - 3.5780907e-02 * Util.SQRT2 * 0.5 / 2.384e-06, - 1.7876148e-02 * Util.SQRT2 * 0.5 / 2.384e-06, - 3.134727e-03 * Util.SQRT2 * 0.5 / 2.384e-06, - 2.457142e-03 * Util.SQRT2 * 0.5 / 2.384e-06, - 9.71317e-04 * Util.SQRT2 * 0.5 / 2.384e-06, - 2.18868e-04 * Util.SQRT2 * 0.5 / 2.384e-06, - 1.01566e-04 * Util.SQRT2 * 0.5 / 2.384e-06, - 1.3828e-05 * Util.SQRT2 * 0.5 / 2.384e-06, - - 3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06, - 7.47204e-04 / 2.384e-06, 4.9591e-05 / 2.384e-06, - 4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06, - -6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */ - ]; - - var NS = 12; - var NL = 36; - - var win = [ - [ - 2.382191739347913e-13, - 6.423305872147834e-13, - 9.400849094049688e-13, - 1.122435026096556e-12, - 1.183840321267481e-12, - 1.122435026096556e-12, - 9.400849094049690e-13, - 6.423305872147839e-13, - 2.382191739347918e-13, - - 5.456116108943412e-12, - 4.878985199565852e-12, - 4.240448995017367e-12, - 3.559909094758252e-12, - 2.858043359288075e-12, - 2.156177623817898e-12, - 1.475637723558783e-12, - 8.371015190102974e-13, - 2.599706096327376e-13, - - -5.456116108943412e-12, - -4.878985199565852e-12, - -4.240448995017367e-12, - -3.559909094758252e-12, - -2.858043359288076e-12, - -2.156177623817898e-12, - -1.475637723558783e-12, - -8.371015190102975e-13, - -2.599706096327376e-13, - - -2.382191739347923e-13, - -6.423305872147843e-13, - -9.400849094049696e-13, - -1.122435026096556e-12, - -1.183840321267481e-12, - -1.122435026096556e-12, - -9.400849094049694e-13, - -6.423305872147840e-13, - -2.382191739347918e-13, - ], - [ - 2.382191739347913e-13, - 6.423305872147834e-13, - 9.400849094049688e-13, - 1.122435026096556e-12, - 1.183840321267481e-12, - 1.122435026096556e-12, - 9.400849094049688e-13, - 6.423305872147841e-13, - 2.382191739347918e-13, - - 5.456116108943413e-12, - 4.878985199565852e-12, - 4.240448995017367e-12, - 3.559909094758253e-12, - 2.858043359288075e-12, - 2.156177623817898e-12, - 1.475637723558782e-12, - 8.371015190102975e-13, - 2.599706096327376e-13, - - -5.461314069809755e-12, - -4.921085770524055e-12, - -4.343405037091838e-12, - -3.732668368707687e-12, - -3.093523840190885e-12, - -2.430835727329465e-12, - -1.734679010007751e-12, - -9.748253656609281e-13, - -2.797435120168326e-13, - - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - -2.283748241799531e-13, - -4.037858874020686e-13, - -2.146547464825323e-13, - ], - [ - 1.316524975873958e-01, /* win[SHORT_TYPE] */ - 4.142135623730950e-01, - 7.673269879789602e-01, - - 1.091308501069271e+00, /* tantab_l */ - 1.303225372841206e+00, - 1.569685577117490e+00, - 1.920982126971166e+00, - 2.414213562373094e+00, - 3.171594802363212e+00, - 4.510708503662055e+00, - 7.595754112725146e+00, - 2.290376554843115e+01, - - 0.98480775301220802032, /* cx */ - 0.64278760968653936292, - 0.34202014332566882393, - 0.93969262078590842791, - -0.17364817766693030343, - -0.76604444311897790243, - 0.86602540378443870761, - 0.500000000000000e+00, - - -5.144957554275265e-01, /* ca */ - -4.717319685649723e-01, - -3.133774542039019e-01, - -1.819131996109812e-01, - -9.457419252642064e-02, - -4.096558288530405e-02, - -1.419856857247115e-02, - -3.699974673760037e-03, - - 8.574929257125442e-01, /* cs */ - 8.817419973177052e-01, - 9.496286491027329e-01, - 9.833145924917901e-01, - 9.955178160675857e-01, - 9.991605581781475e-01, - 9.998991952444470e-01, - 9.999931550702802e-01, - ], - [ - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 0.000000000000000e+00, - 2.283748241799531e-13, - 4.037858874020686e-13, - 2.146547464825323e-13, - - 5.461314069809755e-12, - 4.921085770524055e-12, - 4.343405037091838e-12, - 3.732668368707687e-12, - 3.093523840190885e-12, - 2.430835727329466e-12, - 1.734679010007751e-12, - 9.748253656609281e-13, - 2.797435120168326e-13, - - -5.456116108943413e-12, - -4.878985199565852e-12, - -4.240448995017367e-12, - -3.559909094758253e-12, - -2.858043359288075e-12, - -2.156177623817898e-12, - -1.475637723558782e-12, - -8.371015190102975e-13, - -2.599706096327376e-13, - - -2.382191739347913e-13, - -6.423305872147834e-13, - -9.400849094049688e-13, - -1.122435026096556e-12, - -1.183840321267481e-12, - -1.122435026096556e-12, - -9.400849094049688e-13, - -6.423305872147841e-13, - -2.382191739347918e-13, - ] - ]; - - var tantab_l = win[Encoder.SHORT_TYPE]; - var cx = win[Encoder.SHORT_TYPE]; - var ca = win[Encoder.SHORT_TYPE]; - var cs = win[Encoder.SHORT_TYPE]; - - /** - * new IDCT routine written by Takehiro TOMINAGA - * - * PURPOSE: Overlapping window on PCM samples
- * - * SEMANTICS:
- * 32 16-bit pcm samples are scaled to fractional 2's complement and - * concatenated to the end of the window buffer #x#. The updated window - * buffer #x# is then windowed by the analysis window #c# to produce the - * windowed sample #z# - */ - var order = [ - 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29, - 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31 - ]; - - /** - * returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 - */ - function window_subband(x1, x1Pos, a) { - var wp = 10; - - var x2 = x1Pos + 238 - 14 - 286; - - for (var i = -15; i < 0; i++) { - var w, s, t; - - w = enwindow[wp + -10]; - s = x1[x2 + -224] * w; - t = x1[x1Pos + 224] * w; - w = enwindow[wp + -9]; - s += x1[x2 + -160] * w; - t += x1[x1Pos + 160] * w; - w = enwindow[wp + -8]; - s += x1[x2 + -96] * w; - t += x1[x1Pos + 96] * w; - w = enwindow[wp + -7]; - s += x1[x2 + -32] * w; - t += x1[x1Pos + 32] * w; - w = enwindow[wp + -6]; - s += x1[x2 + 32] * w; - t += x1[x1Pos + -32] * w; - w = enwindow[wp + -5]; - s += x1[x2 + 96] * w; - t += x1[x1Pos + -96] * w; - w = enwindow[wp + -4]; - s += x1[x2 + 160] * w; - t += x1[x1Pos + -160] * w; - w = enwindow[wp + -3]; - s += x1[x2 + 224] * w; - t += x1[x1Pos + -224] * w; - - w = enwindow[wp + -2]; - s += x1[x1Pos + -256] * w; - t -= x1[x2 + 256] * w; - w = enwindow[wp + -1]; - s += x1[x1Pos + -192] * w; - t -= x1[x2 + 192] * w; - w = enwindow[wp + 0]; - s += x1[x1Pos + -128] * w; - t -= x1[x2 + 128] * w; - w = enwindow[wp + 1]; - s += x1[x1Pos + -64] * w; - t -= x1[x2 + 64] * w; - w = enwindow[wp + 2]; - s += x1[x1Pos + 0] * w; - t -= x1[x2 + 0] * w; - w = enwindow[wp + 3]; - s += x1[x1Pos + 64] * w; - t -= x1[x2 + -64] * w; - w = enwindow[wp + 4]; - s += x1[x1Pos + 128] * w; - t -= x1[x2 + -128] * w; - w = enwindow[wp + 5]; - s += x1[x1Pos + 192] * w; - t -= x1[x2 + -192] * w; - - /* - * this multiplyer could be removed, but it needs more 256 FLOAT - * data. thinking about the data cache performance, I think we - * should not use such a huge table. tt 2000/Oct/25 - */ - s *= enwindow[wp + 6]; - w = t - s; - a[30 + i * 2] = t + s; - a[31 + i * 2] = enwindow[wp + 7] * w; - wp += 18; - x1Pos--; - x2++; - } - { - var s, t, u, v; - t = x1[x1Pos + -16] * enwindow[wp + -10]; - s = x1[x1Pos + -32] * enwindow[wp + -2]; - t += (x1[x1Pos + -48] - x1[x1Pos + 16]) * enwindow[wp + -9]; - s += x1[x1Pos + -96] * enwindow[wp + -1]; - t += (x1[x1Pos + -80] + x1[x1Pos + 48]) * enwindow[wp + -8]; - s += x1[x1Pos + -160] * enwindow[wp + 0]; - t += (x1[x1Pos + -112] - x1[x1Pos + 80]) * enwindow[wp + -7]; - s += x1[x1Pos + -224] * enwindow[wp + 1]; - t += (x1[x1Pos + -144] + x1[x1Pos + 112]) * enwindow[wp + -6]; - s -= x1[x1Pos + 32] * enwindow[wp + 2]; - t += (x1[x1Pos + -176] - x1[x1Pos + 144]) * enwindow[wp + -5]; - s -= x1[x1Pos + 96] * enwindow[wp + 3]; - t += (x1[x1Pos + -208] + x1[x1Pos + 176]) * enwindow[wp + -4]; - s -= x1[x1Pos + 160] * enwindow[wp + 4]; - t += (x1[x1Pos + -240] - x1[x1Pos + 208]) * enwindow[wp + -3]; - s -= x1[x1Pos + 224]; - - u = s - t; - v = s + t; - - t = a[14]; - s = a[15] - t; - - a[31] = v + t; /* A0 */ - a[30] = u + s; /* A1 */ - a[15] = u - s; /* A2 */ - a[14] = v - t; /* A3 */ - } - { - var xr; - xr = a[28] - a[0]; - a[0] += a[28]; - a[28] = xr * enwindow[wp + -2 * 18 + 7]; - xr = a[29] - a[1]; - a[1] += a[29]; - a[29] = xr * enwindow[wp + -2 * 18 + 7]; - - xr = a[26] - a[2]; - a[2] += a[26]; - a[26] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[27] - a[3]; - a[3] += a[27]; - a[27] = xr * enwindow[wp + -4 * 18 + 7]; - - xr = a[24] - a[4]; - a[4] += a[24]; - a[24] = xr * enwindow[wp + -6 * 18 + 7]; - xr = a[25] - a[5]; - a[5] += a[25]; - a[25] = xr * enwindow[wp + -6 * 18 + 7]; - - xr = a[22] - a[6]; - a[6] += a[22]; - a[22] = xr * Util.SQRT2; - xr = a[23] - a[7]; - a[7] += a[23]; - a[23] = xr * Util.SQRT2 - a[7]; - a[7] -= a[6]; - a[22] -= a[7]; - a[23] -= a[22]; - - xr = a[6]; - a[6] = a[31] - xr; - a[31] = a[31] + xr; - xr = a[7]; - a[7] = a[30] - xr; - a[30] = a[30] + xr; - xr = a[22]; - a[22] = a[15] - xr; - a[15] = a[15] + xr; - xr = a[23]; - a[23] = a[14] - xr; - a[14] = a[14] + xr; - - xr = a[20] - a[8]; - a[8] += a[20]; - a[20] = xr * enwindow[wp + -10 * 18 + 7]; - xr = a[21] - a[9]; - a[9] += a[21]; - a[21] = xr * enwindow[wp + -10 * 18 + 7]; - - xr = a[18] - a[10]; - a[10] += a[18]; - a[18] = xr * enwindow[wp + -12 * 18 + 7]; - xr = a[19] - a[11]; - a[11] += a[19]; - a[19] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[16] - a[12]; - a[12] += a[16]; - a[16] = xr * enwindow[wp + -14 * 18 + 7]; - xr = a[17] - a[13]; - a[13] += a[17]; - a[17] = xr * enwindow[wp + -14 * 18 + 7]; - - xr = -a[20] + a[24]; - a[20] += a[24]; - a[24] = xr * enwindow[wp + -12 * 18 + 7]; - xr = -a[21] + a[25]; - a[21] += a[25]; - a[25] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[4] - a[8]; - a[4] += a[8]; - a[8] = xr * enwindow[wp + -12 * 18 + 7]; - xr = a[5] - a[9]; - a[5] += a[9]; - a[9] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[0] - a[12]; - a[0] += a[12]; - a[12] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[1] - a[13]; - a[1] += a[13]; - a[13] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[16] - a[28]; - a[16] += a[28]; - a[28] = xr * enwindow[wp + -4 * 18 + 7]; - xr = -a[17] + a[29]; - a[17] += a[29]; - a[29] = xr * enwindow[wp + -4 * 18 + 7]; - - xr = Util.SQRT2 * (a[2] - a[10]); - a[2] += a[10]; - a[10] = xr; - xr = Util.SQRT2 * (a[3] - a[11]); - a[3] += a[11]; - a[11] = xr; - xr = Util.SQRT2 * (-a[18] + a[26]); - a[18] += a[26]; - a[26] = xr - a[18]; - xr = Util.SQRT2 * (-a[19] + a[27]); - a[19] += a[27]; - a[27] = xr - a[19]; - - xr = a[2]; - a[19] -= a[3]; - a[3] -= xr; - a[2] = a[31] - xr; - a[31] += xr; - xr = a[3]; - a[11] -= a[19]; - a[18] -= xr; - a[3] = a[30] - xr; - a[30] += xr; - xr = a[18]; - a[27] -= a[11]; - a[19] -= xr; - a[18] = a[15] - xr; - a[15] += xr; - - xr = a[19]; - a[10] -= xr; - a[19] = a[14] - xr; - a[14] += xr; - xr = a[10]; - a[11] -= xr; - a[10] = a[23] - xr; - a[23] += xr; - xr = a[11]; - a[26] -= xr; - a[11] = a[22] - xr; - a[22] += xr; - xr = a[26]; - a[27] -= xr; - a[26] = a[7] - xr; - a[7] += xr; - - xr = a[27]; - a[27] = a[6] - xr; - a[6] += xr; - - xr = Util.SQRT2 * (a[0] - a[4]); - a[0] += a[4]; - a[4] = xr; - xr = Util.SQRT2 * (a[1] - a[5]); - a[1] += a[5]; - a[5] = xr; - xr = Util.SQRT2 * (a[16] - a[20]); - a[16] += a[20]; - a[20] = xr; - xr = Util.SQRT2 * (a[17] - a[21]); - a[17] += a[21]; - a[21] = xr; - - xr = -Util.SQRT2 * (a[8] - a[12]); - a[8] += a[12]; - a[12] = xr - a[8]; - xr = -Util.SQRT2 * (a[9] - a[13]); - a[9] += a[13]; - a[13] = xr - a[9]; - xr = -Util.SQRT2 * (a[25] - a[29]); - a[25] += a[29]; - a[29] = xr - a[25]; - xr = -Util.SQRT2 * (a[24] + a[28]); - a[24] -= a[28]; - a[28] = xr - a[24]; - - xr = a[24] - a[16]; - a[24] = xr; - xr = a[20] - xr; - a[20] = xr; - xr = a[28] - xr; - a[28] = xr; - - xr = a[25] - a[17]; - a[25] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[17] - a[1]; - a[17] = xr; - xr = a[9] - xr; - a[9] = xr; - xr = a[25] - xr; - a[25] = xr; - xr = a[5] - xr; - a[5] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[13] - xr; - a[13] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[1] - a[0]; - a[1] = xr; - xr = a[16] - xr; - a[16] = xr; - xr = a[17] - xr; - a[17] = xr; - xr = a[8] - xr; - a[8] = xr; - xr = a[9] - xr; - a[9] = xr; - xr = a[24] - xr; - a[24] = xr; - xr = a[25] - xr; - a[25] = xr; - xr = a[4] - xr; - a[4] = xr; - xr = a[5] - xr; - a[5] = xr; - xr = a[20] - xr; - a[20] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[12] - xr; - a[12] = xr; - xr = a[13] - xr; - a[13] = xr; - xr = a[28] - xr; - a[28] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[0]; - a[0] += a[31]; - a[31] -= xr; - xr = a[1]; - a[1] += a[30]; - a[30] -= xr; - xr = a[16]; - a[16] += a[15]; - a[15] -= xr; - xr = a[17]; - a[17] += a[14]; - a[14] -= xr; - xr = a[8]; - a[8] += a[23]; - a[23] -= xr; - xr = a[9]; - a[9] += a[22]; - a[22] -= xr; - xr = a[24]; - a[24] += a[7]; - a[7] -= xr; - xr = a[25]; - a[25] += a[6]; - a[6] -= xr; - xr = a[4]; - a[4] += a[27]; - a[27] -= xr; - xr = a[5]; - a[5] += a[26]; - a[26] -= xr; - xr = a[20]; - a[20] += a[11]; - a[11] -= xr; - xr = a[21]; - a[21] += a[10]; - a[10] -= xr; - xr = a[12]; - a[12] += a[19]; - a[19] -= xr; - xr = a[13]; - a[13] += a[18]; - a[18] -= xr; - xr = a[28]; - a[28] += a[3]; - a[3] -= xr; - xr = a[29]; - a[29] += a[2]; - a[2] -= xr; - } - } - - /** - * Function: Calculation of the MDCT In the case of long blocks (type 0,1,3) - * there are 36 coefficents in the time domain and 18 in the frequency - * domain.
- * In the case of short blocks (type 2) there are 3 transformations with - * short length. This leads to 12 coefficents in the time and 6 in the - * frequency domain. In this case the results are stored side by side in the - * vector out[]. - * - * New layer3 - */ - function mdct_short(inout, inoutPos) { - for (var l = 0; l < 3; l++) { - var tc0, tc1, tc2, ts0, ts1, ts2; - - ts0 = inout[inoutPos + 2 * 3] * win[Encoder.SHORT_TYPE][0] - - inout[inoutPos + 5 * 3]; - tc0 = inout[inoutPos + 0 * 3] * win[Encoder.SHORT_TYPE][2] - - inout[inoutPos + 3 * 3]; - tc1 = ts0 + tc0; - tc2 = ts0 - tc0; - - ts0 = inout[inoutPos + 5 * 3] * win[Encoder.SHORT_TYPE][0] - + inout[inoutPos + 2 * 3]; - tc0 = inout[inoutPos + 3 * 3] * win[Encoder.SHORT_TYPE][2] - + inout[inoutPos + 0 * 3]; - ts1 = ts0 + tc0; - ts2 = -ts0 + tc0; - - tc0 = (inout[inoutPos + 1 * 3] * win[Encoder.SHORT_TYPE][1] - inout[inoutPos + 4 * 3]) * 2.069978111953089e-11; - /* - * tritab_s [ 1 ] - */ - ts0 = (inout[inoutPos + 4 * 3] * win[Encoder.SHORT_TYPE][1] + inout[inoutPos + 1 * 3]) * 2.069978111953089e-11; - /* - * tritab_s [ 1 ] - */ - inout[inoutPos + 3 * 0] = tc1 * 1.907525191737280e-11 + tc0; - /* - * tritab_s[ 2 ] - */ - inout[inoutPos + 3 * 5] = -ts1 * 1.907525191737280e-11 + ts0; - /* - * tritab_s[0 ] - */ - tc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11; - /* - * tritab_s[ 2] - */ - ts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0; - inout[inoutPos + 3 * 1] = tc2 - ts1; - inout[inoutPos + 3 * 2] = tc2 + ts1; - - tc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0; - ts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11; - /* - * tritab_s[ 0] - */ - inout[inoutPos + 3 * 3] = tc1 + ts2; - inout[inoutPos + 3 * 4] = tc1 - ts2; - - inoutPos++; - } - } - - function mdct_long(out, outPos, _in) { - var ct, st; - { - var tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8; - /* 1,2, 5,6, 9,10, 13,14, 17 */ - tc1 = _in[17] - _in[9]; - tc3 = _in[15] - _in[11]; - tc4 = _in[14] - _in[12]; - ts5 = _in[0] + _in[8]; - ts6 = _in[1] + _in[7]; - ts7 = _in[2] + _in[6]; - ts8 = _in[3] + _in[5]; - - out[outPos + 17] = (ts5 + ts7 - ts8) - (ts6 - _in[4]); - st = (ts5 + ts7 - ts8) * cx[12 + 7] + (ts6 - _in[4]); - ct = (tc1 - tc3 - tc4) * cx[12 + 6]; - out[outPos + 5] = ct + st; - out[outPos + 6] = ct - st; - - tc2 = (_in[16] - _in[10]) * cx[12 + 6]; - ts6 = ts6 * cx[12 + 7] + _in[4]; - ct = tc1 * cx[12 + 0] + tc2 + tc3 * cx[12 + 1] + tc4 * cx[12 + 2]; - st = -ts5 * cx[12 + 4] + ts6 - ts7 * cx[12 + 5] + ts8 * cx[12 + 3]; - out[outPos + 1] = ct + st; - out[outPos + 2] = ct - st; - - ct = tc1 * cx[12 + 1] - tc2 - tc3 * cx[12 + 2] + tc4 * cx[12 + 0]; - st = -ts5 * cx[12 + 5] + ts6 - ts7 * cx[12 + 3] + ts8 * cx[12 + 4]; - out[outPos + 9] = ct + st; - out[outPos + 10] = ct - st; - - ct = tc1 * cx[12 + 2] - tc2 + tc3 * cx[12 + 0] - tc4 * cx[12 + 1]; - st = ts5 * cx[12 + 3] - ts6 + ts7 * cx[12 + 4] - ts8 * cx[12 + 5]; - out[outPos + 13] = ct + st; - out[outPos + 14] = ct - st; - } - { - var ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8; - - ts1 = _in[8] - _in[0]; - ts3 = _in[6] - _in[2]; - ts4 = _in[5] - _in[3]; - tc5 = _in[17] + _in[9]; - tc6 = _in[16] + _in[10]; - tc7 = _in[15] + _in[11]; - tc8 = _in[14] + _in[12]; - - out[outPos + 0] = (tc5 + tc7 + tc8) + (tc6 + _in[13]); - ct = (tc5 + tc7 + tc8) * cx[12 + 7] - (tc6 + _in[13]); - st = (ts1 - ts3 + ts4) * cx[12 + 6]; - out[outPos + 11] = ct + st; - out[outPos + 12] = ct - st; - - ts2 = (_in[7] - _in[1]) * cx[12 + 6]; - tc6 = _in[13] - tc6 * cx[12 + 7]; - ct = tc5 * cx[12 + 3] - tc6 + tc7 * cx[12 + 4] + tc8 * cx[12 + 5]; - st = ts1 * cx[12 + 2] + ts2 + ts3 * cx[12 + 0] + ts4 * cx[12 + 1]; - out[outPos + 3] = ct + st; - out[outPos + 4] = ct - st; - - ct = -tc5 * cx[12 + 5] + tc6 - tc7 * cx[12 + 3] - tc8 * cx[12 + 4]; - st = ts1 * cx[12 + 1] + ts2 - ts3 * cx[12 + 2] - ts4 * cx[12 + 0]; - out[outPos + 7] = ct + st; - out[outPos + 8] = ct - st; - - ct = -tc5 * cx[12 + 4] + tc6 - tc7 * cx[12 + 5] - tc8 * cx[12 + 3]; - st = ts1 * cx[12 + 0] - ts2 + ts3 * cx[12 + 1] - ts4 * cx[12 + 2]; - out[outPos + 15] = ct + st; - out[outPos + 16] = ct - st; - } - } - - this.mdct_sub48 = function(gfc, w0, w1) { - var wk = w0; - var wkPos = 286; - /* thinking cache performance, ch->gr loop is better than gr->ch loop */ - for (var ch = 0; ch < gfc.channels_out; ch++) { - for (var gr = 0; gr < gfc.mode_gr; gr++) { - var band; - var gi = (gfc.l3_side.tt[gr][ch]); - var mdct_enc = gi.xr; - var mdct_encPos = 0; - var samp = gfc.sb_sample[ch][1 - gr]; - var sampPos = 0; - - for (var k = 0; k < 18 / 2; k++) { - window_subband(wk, wkPos, samp[sampPos]); - window_subband(wk, wkPos + 32, samp[sampPos + 1]); - sampPos += 2; - wkPos += 64; - /* - * Compensate for inversion in the analysis filter - */ - for (band = 1; band < 32; band += 2) { - samp[sampPos - 1][band] *= -1; - } - } - - /* - * Perform imdct of 18 previous subband samples + 18 current - * subband samples - */ - for (band = 0; band < 32; band++, mdct_encPos += 18) { - var type = gi.block_type; - var band0 = gfc.sb_sample[ch][gr]; - var band1 = gfc.sb_sample[ch][1 - gr]; - if (gi.mixed_block_flag != 0 && band < 2) - type = 0; - if (gfc.amp_filter[band] < 1e-12) { - Arrays.fill(mdct_enc, mdct_encPos + 0, - mdct_encPos + 18, 0); - } else { - if (gfc.amp_filter[band] < 1.0) { - for (var k = 0; k < 18; k++) - band1[k][order[band]] *= gfc.amp_filter[band]; - } - if (type == Encoder.SHORT_TYPE) { - for (var k = -NS / 4; k < 0; k++) { - var w = win[Encoder.SHORT_TYPE][k + 3]; - mdct_enc[mdct_encPos + k * 3 + 9] = band0[9 + k][order[band]] - * w - band0[8 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 18] = band0[14 - k][order[band]] - * w + band0[15 + k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 10] = band0[15 + k][order[band]] - * w - band0[14 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 19] = band1[2 - k][order[band]] - * w + band1[3 + k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 11] = band1[3 + k][order[band]] - * w - band1[2 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 20] = band1[8 - k][order[band]] - * w + band1[9 + k][order[band]]; - } - mdct_short(mdct_enc, mdct_encPos); - } else { - var work = new_float(18); - for (var k = -NL / 4; k < 0; k++) { - var a, b; - a = win[type][k + 27] - * band1[k + 9][order[band]] - + win[type][k + 36] - * band1[8 - k][order[band]]; - b = win[type][k + 9] - * band0[k + 9][order[band]] - - win[type][k + 18] - * band0[8 - k][order[band]]; - work[k + 9] = a - b * tantab_l[3 + k + 9]; - work[k + 18] = a * tantab_l[3 + k + 9] + b; - } - - mdct_long(mdct_enc, mdct_encPos, work); - } - } - /* - * Perform aliasing reduction butterfly - */ - if (type != Encoder.SHORT_TYPE && band != 0) { - for (var k = 7; k >= 0; --k) { - var bu, bd; - bu = mdct_enc[mdct_encPos + k] * ca[20 + k] - + mdct_enc[mdct_encPos + -1 - k] - * cs[28 + k]; - bd = mdct_enc[mdct_encPos + k] * cs[28 + k] - - mdct_enc[mdct_encPos + -1 - k] - * ca[20 + k]; - - mdct_enc[mdct_encPos + -1 - k] = bu; - mdct_enc[mdct_encPos + k] = bd; - } - } - } - } - wk = w1; - wkPos = 286; - if (gfc.mode_gr == 1) { - for (var i = 0; i < 18; i++) { - System.arraycopy(gfc.sb_sample[ch][1][i], 0, - gfc.sb_sample[ch][0][i], 0, 32); - } - } - } - } -} - -module.exports = NewMDCT; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NsPsy.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NsPsy.js deleted file mode 100644 index b36d74295..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/NsPsy.js +++ /dev/null @@ -1,41 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); - -//package mp3; - -/** - * Variables used for --nspsytune - * - * @author Ken - * - */ -function NsPsy() { - this.last_en_subshort = new_float_n([4, 9]); - this.lastAttacks = new_int(4); - this.pefirbuf = new_float(19); - this.longfact = new_float(Encoder.SBMAX_l); - this.shortfact = new_float(Encoder.SBMAX_s); - - /** - * short block tuning - */ - this.attackthre = 0.; - this.attackthre_s = 0.; -} - -module.exports = NsPsy; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Presets.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Presets.js deleted file mode 100644 index dd329a68b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Presets.js +++ /dev/null @@ -1,488 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -function Presets() { - var Lame = require('./Lame.js'); - function VBRPresets(qual, comp, compS, - y, shThreshold, shThresholdS, - adj, adjShort, lower, - curve, sens, inter, - joint, mod, fix) { - this.vbr_q = qual; - this.quant_comp = comp; - this.quant_comp_s = compS; - this.expY = y; - this.st_lrm = shThreshold; - this.st_s = shThresholdS; - this.masking_adj = adj; - this.masking_adj_short = adjShort; - this.ath_lower = lower; - this.ath_curve = curve; - this.ath_sensitivity = sens; - this.interch = inter; - this.safejoint = joint; - this.sfb21mod = mod; - this.msfix = fix; - } - - function ABRPresets(kbps, comp, compS, - joint, fix, shThreshold, - shThresholdS, bass, sc, - mask, lower, curve, - interCh, sfScale) { - this.quant_comp = comp; - this.quant_comp_s = compS; - this.safejoint = joint; - this.nsmsfix = fix; - this.st_lrm = shThreshold; - this.st_s = shThresholdS; - this.nsbass = bass; - this.scale = sc; - this.masking_adj = mask; - this.ath_lower = lower; - this.ath_curve = curve; - this.interch = interCh; - this.sfscale = sfScale; - } - - var lame; - - this.setModules = function (_lame) { - lame = _lame; - }; - - /** - *
-     * Switch mappings for VBR mode VBR_RH
-     *             vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix
-     * 
- */ - var vbr_old_switch_map = [ - new VBRPresets(0, 9, 9, 0, 5.20, 125.0, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97), - new VBRPresets(1, 9, 9, 0, 5.30, 125.0, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35), - new VBRPresets(2, 9, 9, 0, 5.60, 125.0, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49), - new VBRPresets(3, 9, 9, 1, 5.80, 130.0, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64), - new VBRPresets(4, 9, 9, 1, 6.00, 135.0, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79), - new VBRPresets(5, 9, 9, 1, 6.40, 140.0, 0.5, 0.4, -7.5, 4, -12, 0.0002, 0, 0, 1.95), - new VBRPresets(6, 9, 9, 1, 6.60, 145.0, 0.67, 0.65, -14.7, 6.5, -19, 0.0004, 0, 0, 2.30), - new VBRPresets(7, 9, 9, 1, 6.60, 145.0, 0.8, 0.75, -19.7, 8, -22, 0.0006, 0, 0, 2.70), - new VBRPresets(8, 9, 9, 1, 6.60, 145.0, 1.2, 1.15, -27.5, 10, -23, 0.0007, 0, 0, 0), - new VBRPresets(9, 9, 9, 1, 6.60, 145.0, 1.6, 1.6, -36, 11, -25, 0.0008, 0, 0, 0), - new VBRPresets(10, 9, 9, 1, 6.60, 145.0, 2.0, 2.0, -36, 12, -25, 0.0008, 0, 0, 0) - ]; - - /** - *
-     *                 vbr_q  qcomp_l  qcomp_s  expY  st_lrm   st_s  mask adj_l  adj_s  ath_lower  ath_curve  ath_sens  interChR  safejoint sfb21mod  msfix
-     * 
- */ - var vbr_psy_switch_map = [ - new VBRPresets(0, 9, 9, 0, 4.20, 25.0, -7.0, -4.0, 7.5, 1, 0, 0, 2, 26, 0.97), - new VBRPresets(1, 9, 9, 0, 4.20, 25.0, -5.6, -3.6, 4.5, 1.5, 0, 0, 2, 21, 1.35), - new VBRPresets(2, 9, 9, 0, 4.20, 25.0, -4.4, -1.8, 2, 2, 0, 0, 2, 18, 1.49), - new VBRPresets(3, 9, 9, 1, 4.20, 25.0, -3.4, -1.25, 1.1, 3, -4, 0, 2, 15, 1.64), - new VBRPresets(4, 9, 9, 1, 4.20, 25.0, -2.2, 0.1, 0, 3.5, -8, 0, 2, 0, 1.79), - new VBRPresets(5, 9, 9, 1, 4.20, 25.0, -1.0, 1.65, -7.7, 4, -12, 0.0002, 0, 0, 1.95), - new VBRPresets(6, 9, 9, 1, 4.20, 25.0, -0.0, 2.47, -7.7, 6.5, -19, 0.0004, 0, 0, 2), - new VBRPresets(7, 9, 9, 1, 4.20, 25.0, 0.5, 2.0, -14.5, 8, -22, 0.0006, 0, 0, 2), - new VBRPresets(8, 9, 9, 1, 4.20, 25.0, 1.0, 2.4, -22.0, 10, -23, 0.0007, 0, 0, 2), - new VBRPresets(9, 9, 9, 1, 4.20, 25.0, 1.5, 2.95, -30.0, 11, -25, 0.0008, 0, 0, 2), - new VBRPresets(10, 9, 9, 1, 4.20, 25.0, 2.0, 2.95, -36.0, 12, -30, 0.0008, 0, 0, 2) - ]; - - function apply_vbr_preset(gfp, a, enforce) { - var vbr_preset = gfp.VBR == VbrMode.vbr_rh ? vbr_old_switch_map - : vbr_psy_switch_map; - - var x = gfp.VBR_q_frac; - var p = vbr_preset[a]; - var q = vbr_preset[a + 1]; - var set = p; - - // NOOP(vbr_q); - // NOOP(quant_comp); - // NOOP(quant_comp_s); - // NOOP(expY); - p.st_lrm = p.st_lrm + x * (q.st_lrm - p.st_lrm); - // LERP(st_lrm); - p.st_s = p.st_s + x * (q.st_s - p.st_s); - // LERP(st_s); - p.masking_adj = p.masking_adj + x * (q.masking_adj - p.masking_adj); - // LERP(masking_adj); - p.masking_adj_short = p.masking_adj_short + x - * (q.masking_adj_short - p.masking_adj_short); - // LERP(masking_adj_short); - p.ath_lower = p.ath_lower + x * (q.ath_lower - p.ath_lower); - // LERP(ath_lower); - p.ath_curve = p.ath_curve + x * (q.ath_curve - p.ath_curve); - // LERP(ath_curve); - p.ath_sensitivity = p.ath_sensitivity + x - * (q.ath_sensitivity - p.ath_sensitivity); - // LERP(ath_sensitivity); - p.interch = p.interch + x * (q.interch - p.interch); - // LERP(interch); - // NOOP(safejoint); - // NOOP(sfb21mod); - p.msfix = p.msfix + x * (q.msfix - p.msfix); - // LERP(msfix); - - lame_set_VBR_q(gfp, set.vbr_q); - - if (enforce != 0) - gfp.quant_comp = set.quant_comp; - else if (!(Math.abs(gfp.quant_comp - -1) > 0)) - gfp.quant_comp = set.quant_comp; - // SET_OPTION(quant_comp, set.quant_comp, -1); - if (enforce != 0) - gfp.quant_comp_short = set.quant_comp_s; - else if (!(Math.abs(gfp.quant_comp_short - -1) > 0)) - gfp.quant_comp_short = set.quant_comp_s; - // SET_OPTION(quant_comp_short, set.quant_comp_s, -1); - if (set.expY != 0) { - gfp.experimentalY = set.expY != 0; - } - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre = set.st_lrm; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre = set.st_lrm; - // SET_OPTION(short_threshold_lrm, set.st_lrm, -1); - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre_s = set.st_s; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre_s = set.st_s; - // SET_OPTION(short_threshold_s, set.st_s, -1); - if (enforce != 0) - gfp.maskingadjust = set.masking_adj; - else if (!(Math.abs(gfp.maskingadjust - 0) > 0)) - gfp.maskingadjust = set.masking_adj; - // SET_OPTION(maskingadjust, set.masking_adj, 0); - if (enforce != 0) - gfp.maskingadjust_short = set.masking_adj_short; - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = set.masking_adj_short; - // SET_OPTION(maskingadjust_short, set.masking_adj_short, 0); - if (enforce != 0) - gfp.ATHlower = -set.ath_lower / 10.0; - else if (!(Math.abs((-gfp.ATHlower * 10.0) - 0) > 0)) - gfp.ATHlower = -set.ath_lower / 10.0; - // SET_OPTION(ATHlower, set.ath_lower, 0); - if (enforce != 0) - gfp.ATHcurve = set.ath_curve; - else if (!(Math.abs(gfp.ATHcurve - -1) > 0)) - gfp.ATHcurve = set.ath_curve; - // SET_OPTION(ATHcurve, set.ath_curve, -1); - if (enforce != 0) - gfp.athaa_sensitivity = set.ath_sensitivity; - else if (!(Math.abs(gfp.athaa_sensitivity - -1) > 0)) - gfp.athaa_sensitivity = set.ath_sensitivity; - // SET_OPTION(athaa_sensitivity, set.ath_sensitivity, 0); - if (set.interch > 0) { - if (enforce != 0) - gfp.interChRatio = set.interch; - else if (!(Math.abs(gfp.interChRatio - -1) > 0)) - gfp.interChRatio = set.interch; - // SET_OPTION(interChRatio, set.interch, -1); - } - - /* parameters for which there is no proper set/get interface */ - if (set.safejoint > 0) { - gfp.exp_nspsytune = gfp.exp_nspsytune | set.safejoint; - } - if (set.sfb21mod > 0) { - gfp.exp_nspsytune = gfp.exp_nspsytune | (set.sfb21mod << 20); - } - if (enforce != 0) - gfp.msfix = set.msfix; - else if (!(Math.abs(gfp.msfix - -1) > 0)) - gfp.msfix = set.msfix; - // SET_OPTION(msfix, set.msfix, -1); - - if (enforce == 0) { - gfp.VBR_q = a; - gfp.VBR_q_frac = x; - } - } - - /** - *
-     *  Switch mappings for ABR mode
-     *
-     *              kbps  quant q_s safejoint nsmsfix st_lrm  st_s  ns-bass scale   msk ath_lwr ath_curve  interch , sfscale
-     * 
- */ - var abr_switch_map = [ - new ABRPresets(8, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -30.0, 11, 0.0012, 1), /* 8, impossible to use in stereo */ - new ABRPresets(16, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -25.0, 11, 0.0010, 1), /* 16 */ - new ABRPresets(24, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -20.0, 11, 0.0010, 1), /* 24 */ - new ABRPresets(32, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -15.0, 11, 0.0010, 1), /* 32 */ - new ABRPresets(40, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 40 */ - new ABRPresets(48, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -10.0, 11, 0.0009, 1), /* 48 */ - new ABRPresets(56, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -6.0, 11, 0.0008, 1), /* 56 */ - new ABRPresets(64, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, -2.0, 11, 0.0008, 1), /* 64 */ - new ABRPresets(80, 9, 9, 0, 0, 6.60, 145, 0, 0.95, 0, .0, 8, 0.0007, 1), /* 80 */ - new ABRPresets(96, 9, 9, 0, 2.50, 6.60, 145, 0, 0.95, 0, 1.0, 5.5, 0.0006, 1), /* 96 */ - new ABRPresets(112, 9, 9, 0, 2.25, 6.60, 145, 0, 0.95, 0, 2.0, 4.5, 0.0005, 1), /* 112 */ - new ABRPresets(128, 9, 9, 0, 1.95, 6.40, 140, 0, 0.95, 0, 3.0, 4, 0.0002, 1), /* 128 */ - new ABRPresets(160, 9, 9, 1, 1.79, 6.00, 135, 0, 0.95, -2, 5.0, 3.5, 0, 1), /* 160 */ - new ABRPresets(192, 9, 9, 1, 1.49, 5.60, 125, 0, 0.97, -4, 7.0, 3, 0, 0), /* 192 */ - new ABRPresets(224, 9, 9, 1, 1.25, 5.20, 125, 0, 0.98, -6, 9.0, 2, 0, 0), /* 224 */ - new ABRPresets(256, 9, 9, 1, 0.97, 5.20, 125, 0, 1.00, -8, 10.0, 1, 0, 0), /* 256 */ - new ABRPresets(320, 9, 9, 1, 0.90, 5.20, 125, 0, 1.00, -10, 12.0, 0, 0, 0) /* 320 */ - ]; - - function apply_abr_preset(gfp, preset, enforce) { - /* Variables for the ABR stuff */ - var actual_bitrate = preset; - - var r = lame.nearestBitrateFullIndex(preset); - - gfp.VBR = VbrMode.vbr_abr; - gfp.VBR_mean_bitrate_kbps = actual_bitrate; - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, 320); - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, 8); - gfp.brate = gfp.VBR_mean_bitrate_kbps; - if (gfp.VBR_mean_bitrate_kbps > 320) { - gfp.disable_reservoir = true; - } - - /* parameters for which there is no proper set/get interface */ - if (abr_switch_map[r].safejoint > 0) - gfp.exp_nspsytune = gfp.exp_nspsytune | 2; - /* safejoint */ - - if (abr_switch_map[r].sfscale > 0) { - gfp.internal_flags.noise_shaping = 2; - } - /* ns-bass tweaks */ - if (Math.abs(abr_switch_map[r].nsbass) > 0) { - var k = (int)(abr_switch_map[r].nsbass * 4); - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2); - } - - if (enforce != 0) - gfp.quant_comp = abr_switch_map[r].quant_comp; - else if (!(Math.abs(gfp.quant_comp - -1) > 0)) - gfp.quant_comp = abr_switch_map[r].quant_comp; - // SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1); - if (enforce != 0) - gfp.quant_comp_short = abr_switch_map[r].quant_comp_s; - else if (!(Math.abs(gfp.quant_comp_short - -1) > 0)) - gfp.quant_comp_short = abr_switch_map[r].quant_comp_s; - // SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1); - - if (enforce != 0) - gfp.msfix = abr_switch_map[r].nsmsfix; - else if (!(Math.abs(gfp.msfix - -1) > 0)) - gfp.msfix = abr_switch_map[r].nsmsfix; - // SET_OPTION(msfix, abr_switch_map[r].nsmsfix, -1); - - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm; - // SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1); - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s; - // SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1); - - /* - * ABR seems to have big problems with clipping, especially at low - * bitrates - */ - /* - * so we compensate for that here by using a scale value depending on - * bitrate - */ - if (enforce != 0) - gfp.scale = abr_switch_map[r].scale; - else if (!(Math.abs(gfp.scale - -1) > 0)) - gfp.scale = abr_switch_map[r].scale; - // SET_OPTION(scale, abr_switch_map[r].scale, -1); - - if (enforce != 0) - gfp.maskingadjust = abr_switch_map[r].masking_adj; - else if (!(Math.abs(gfp.maskingadjust - 0) > 0)) - gfp.maskingadjust = abr_switch_map[r].masking_adj; - // SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0); - if (abr_switch_map[r].masking_adj > 0) { - if (enforce != 0) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9); - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * .9); - // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * - // .9, 0); - } else { - if (enforce != 0) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1); - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = (abr_switch_map[r].masking_adj * 1.1); - // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * - // 1.1, 0); - } - - if (enforce != 0) - gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.; - else if (!(Math.abs((-gfp.ATHlower * 10.) - 0) > 0)) - gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.; - // SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0); - if (enforce != 0) - gfp.ATHcurve = abr_switch_map[r].ath_curve; - else if (!(Math.abs(gfp.ATHcurve - -1) > 0)) - gfp.ATHcurve = abr_switch_map[r].ath_curve; - // SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1); - - if (enforce != 0) - gfp.interChRatio = abr_switch_map[r].interch; - else if (!(Math.abs(gfp.interChRatio - -1) > 0)) - gfp.interChRatio = abr_switch_map[r].interch; - // SET_OPTION(interChRatio, abr_switch_map[r].interch, -1); - - return preset; - } - - this.apply_preset = function(gfp, preset, enforce) { - /* translate legacy presets */ - switch (preset) { - case Lame.R3MIX: - { - preset = Lame.V3; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.MEDIUM: - { - preset = Lame.V4; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.MEDIUM_FAST: - { - preset = Lame.V4; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.STANDARD: - { - preset = Lame.V2; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.STANDARD_FAST: - { - preset = Lame.V2; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.EXTREME: - { - preset = Lame.V0; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.EXTREME_FAST: - { - preset = Lame.V0; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.INSANE: - { - preset = 320; - gfp.preset = preset; - apply_abr_preset(gfp, preset, enforce); - gfp.VBR = VbrMode.vbr_off; - return preset; - } - } - - gfp.preset = preset; - { - switch (preset) { - case Lame.V9: - apply_vbr_preset(gfp, 9, enforce); - return preset; - case Lame.V8: - apply_vbr_preset(gfp, 8, enforce); - return preset; - case Lame.V7: - apply_vbr_preset(gfp, 7, enforce); - return preset; - case Lame.V6: - apply_vbr_preset(gfp, 6, enforce); - return preset; - case Lame.V5: - apply_vbr_preset(gfp, 5, enforce); - return preset; - case Lame.V4: - apply_vbr_preset(gfp, 4, enforce); - return preset; - case Lame.V3: - apply_vbr_preset(gfp, 3, enforce); - return preset; - case Lame.V2: - apply_vbr_preset(gfp, 2, enforce); - return preset; - case Lame.V1: - apply_vbr_preset(gfp, 1, enforce); - return preset; - case Lame.V0: - apply_vbr_preset(gfp, 0, enforce); - return preset; - default: - break; - } - } - if (8 <= preset && preset <= 320) { - return apply_abr_preset(gfp, preset, enforce); - } - - /* no corresponding preset found */ - gfp.preset = 0; - return preset; - } - - // Rest from getset.c: - - /** - * VBR quality level.
- * 0 = highest
- * 9 = lowest - */ - function lame_set_VBR_q(gfp, VBR_q) { - var ret = 0; - - if (0 > VBR_q) { - /* Unknown VBR quality level! */ - ret = -1; - VBR_q = 0; - } - if (9 < VBR_q) { - ret = -1; - VBR_q = 9; - } - - gfp.VBR_q = VBR_q; - gfp.VBR_q_frac = 0; - return ret; - } - -} - -module.exports = Presets; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/PsyModel.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/PsyModel.js deleted file mode 100644 index 533ca4d18..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/PsyModel.js +++ /dev/null @@ -1,2898 +0,0 @@ -/* - * psymodel.c - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 2001-2002 Naoki Shibata - * Copyright (c) 2000-2003 Takehiro Tominaga - * Copyright (c) 2000-2008 Robert Hegemann - * Copyright (c) 2000-2005 Gabriel Bouvigne - * Copyright (c) 2000-2005 Alexander Leidinger - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: PsyModel.java,v 1.27 2011/05/24 20:48:06 kenchis Exp $ */ - - -/* - PSYCHO ACOUSTICS - - - This routine computes the psycho acoustics, delayed by one granule. - - Input: buffer of PCM data (1024 samples). - - This window should be centered over the 576 sample granule window. - The routine will compute the psycho acoustics for - this granule, but return the psycho acoustics computed - for the *previous* granule. This is because the block - type of the previous granule can only be determined - after we have computed the psycho acoustics for the following - granule. - - Output: maskings and energies for each scalefactor band. - block type, PE, and some correlation measures. - The PE is used by CBR modes to determine if extra bits - from the bit reservoir should be used. The correlation - measures are used to determine mid/side or regular stereo. - */ -/* - Notation: - - barks: a non-linear frequency scale. Mapping from frequency to - barks is given by freq2bark() - - scalefactor bands: The spectrum (frequencies) are broken into - SBMAX "scalefactor bands". Thes bands - are determined by the MPEG ISO spec. In - the noise shaping/quantization code, we allocate - bits among the partition bands to achieve the - best possible quality - - partition bands: The spectrum is also broken into about - 64 "partition bands". Each partition - band is about .34 barks wide. There are about 2-5 - partition bands for each scalefactor band. - - LAME computes all psycho acoustic information for each partition - band. Then at the end of the computations, this information - is mapped to scalefactor bands. The energy in each scalefactor - band is taken as the sum of the energy in all partition bands - which overlap the scalefactor band. The maskings can be computed - in the same way (and thus represent the average masking in that band) - or by taking the minmum value multiplied by the number of - partition bands used (which represents a minimum masking in that band). - */ -/* - The general outline is as follows: - - 1. compute the energy in each partition band - 2. compute the tonality in each partition band - 3. compute the strength of each partion band "masker" - 4. compute the masking (via the spreading function applied to each masker) - 5. Modifications for mid/side masking. - - Each partition band is considiered a "masker". The strength - of the i'th masker in band j is given by: - - s3(bark(i)-bark(j))*strength(i) - - The strength of the masker is a function of the energy and tonality. - The more tonal, the less masking. LAME uses a simple linear formula - (controlled by NMT and TMN) which says the strength is given by the - energy divided by a linear function of the tonality. - */ -/* - s3() is the "spreading function". It is given by a formula - determined via listening tests. - - The total masking in the j'th partition band is the sum over - all maskings i. It is thus given by the convolution of - the strength with s3(), the "spreading function." - - masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength - - where "o" = convolution operator. s3 is given by a formula determined - via listening tests. It is normalized so that s3 o 1 = 1. - - Note: instead of a simple convolution, LAME also has the - option of using "additive masking" - - The most critical part is step 2, computing the tonality of each - partition band. LAME has two tonality estimators. The first - is based on the ISO spec, and measures how predictiable the - signal is over time. The more predictable, the more tonal. - The second measure is based on looking at the spectrum of - a single granule. The more peaky the spectrum, the more - tonal. By most indications, the latter approach is better. - - Finally, in step 5, the maskings for the mid and side - channel are possibly increased. Under certain circumstances, - noise in the mid & side channels is assumed to also - be masked by strong maskers in the L or R channels. - - - Other data computed by the psy-model: - - ms_ratio side-channel / mid-channel masking ratio (for previous granule) - ms_ratio_next side-channel / mid-channel masking ratio for this granule - - percep_entropy[2] L and R values (prev granule) of PE - A measure of how - much pre-echo is in the previous granule - percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy - energy[4] L,R,M,S energy in each channel, prev granule - blocktype_d[2] block type to use for previous granule - */ -//package mp3; - -//import java.util.Arrays; -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var FFT = require("./FFT.js"); -var Encoder = require("./Encoder.js"); - -function PsyModel() { - var MPEGMode = require('./MPEGMode.js'); - var fft = new FFT(); - - var LOG10 = 2.30258509299404568402; - - var rpelev = 2; - var rpelev2 = 16; - var rpelev_s = 2; - var rpelev2_s = 16; - - /* size of each partition band, in barks: */ - var DELBARK = .34; - - /* tuned for output level (sensitive to energy scale) */ - var VO_SCALE = (1. / (14752 * 14752) / (Encoder.BLKSIZE / 2)); - - var temporalmask_sustain_sec = 0.01; - - var NS_PREECHO_ATT0 = 0.8; - var NS_PREECHO_ATT1 = 0.6; - var NS_PREECHO_ATT2 = 0.3; - - var NS_MSFIX = 3.5; - - var NSATTACKTHRE = 4.4; - var NSATTACKTHRE_S = 25; - - var NSFIRLEN = 21; - - /* size of each partition band, in barks: */ - var LN_TO_LOG10 = 0.2302585093; - - function NON_LINEAR_SCALE_ENERGY(x) { - return x; - } - - /** - *
-     *       L3psycho_anal.  Compute psycho acoustics.
-     *
-     *       Data returned to the calling program must be delayed by one
-     *       granule.
-     *
-     *       This is done in two places.
-     *       If we do not need to know the blocktype, the copying
-     *       can be done here at the top of the program: we copy the data for
-     *       the last granule (computed during the last call) before it is
-     *       overwritten with the new data.  It looks like this:
-     *
-     *       0. static psymodel_data
-     *       1. calling_program_data = psymodel_data
-     *       2. compute psymodel_data
-     *
-     *       For data which needs to know the blocktype, the copying must be
-     *       done at the end of this loop, and the old values must be saved:
-     *
-     *       0. static psymodel_data_old
-     *       1. compute psymodel_data
-     *       2. compute possible block type of this granule
-     *       3. compute final block type of previous granule based on #2.
-     *       4. calling_program_data = psymodel_data_old
-     *       5. psymodel_data_old = psymodel_data
-     *     psycho_loudness_approx
-     *       jd - 2001 mar 12
-     *    in:  energy   - BLKSIZE/2 elements of frequency magnitudes ^ 2
-     *         gfp      - uses out_samplerate, ATHtype (also needed for ATHformula)
-     *    returns: loudness^2 approximation, a positive value roughly tuned for a value
-     *             of 1.0 for signals near clipping.
-     *    notes:   When calibrated, feeding this function binary white noise at sample
-     *             values +32767 or -32768 should return values that approach 3.
-     *             ATHformula is used to approximate an equal loudness curve.
-     *    future:  Data indicates that the shape of the equal loudness curve varies
-     *             with intensity.  This function might be improved by using an equal
-     *             loudness curve shaped for typical playback levels (instead of the
-     *             ATH, that is shaped for the threshold).  A flexible realization might
-     *             simply bend the existing ATH curve to achieve the desired shape.
-     *             However, the potential gain may not be enough to justify an effort.
-     * 
- */ - function psycho_loudness_approx(energy, gfc) { - var loudness_power = 0.0; - /* apply weights to power in freq. bands */ - for (var i = 0; i < Encoder.BLKSIZE / 2; ++i) - loudness_power += energy[i] * gfc.ATH.eql_w[i]; - loudness_power *= VO_SCALE; - - return loudness_power; - } - - function compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, wsamp_lPos, wsamp_s, wsamp_sPos, gr_out, chn, buffer, bufPos) { - var gfc = gfp.internal_flags; - if (chn < 2) { - fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos); - fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos); - } - /* FFT data for mid and side channel is derived from L & R */ - else if (chn == 2) { - for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) { - var l = wsamp_l[wsamp_lPos + 0][j]; - var r = wsamp_l[wsamp_lPos + 1][j]; - wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5; - } - for (var b = 2; b >= 0; --b) { - for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) { - var l = wsamp_s[wsamp_sPos + 0][b][j]; - var r = wsamp_s[wsamp_sPos + 1][b][j]; - wsamp_s[wsamp_sPos + 0][b][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_s[wsamp_sPos + 1][b][j] = (l - r) * Util.SQRT2 * 0.5; - } - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]); - fftenergy[0] *= fftenergy[0]; - - for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) { - var re = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 - j]; - var im = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 + j]; - fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - for (var b = 2; b >= 0; --b) { - fftenergy_s[b][0] = (wsamp_s[wsamp_sPos + 0])[b][0]; - fftenergy_s[b][0] *= fftenergy_s[b][0]; - for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) { - var re = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s - / 2 - j]; - var im = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s - / 2 + j]; - fftenergy_s[b][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - } - /* total energy */ - { - var totalenergy = 0.0; - for (var j = 11; j < Encoder.HBLKSIZE; j++) - totalenergy += fftenergy[j]; - - gfc.tot_ener[chn] = totalenergy; - } - - if (gfp.analysis) { - for (var j = 0; j < Encoder.HBLKSIZE; j++) { - gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j]; - gfc.pinfo.energy_save[chn][j] = fftenergy[j]; - } - gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn]; - } - - /********************************************************************* - * compute loudness approximation (used for ATH auto-level adjustment) - *********************************************************************/ - if (gfp.athaa_loudapprox == 2 && chn < 2) { - // no loudness for mid/side ch - gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn]; - gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc); - } - } - - /* mask_add optimization */ - /* init the limit values used to avoid computing log in mask_add when it is not necessary */ - - /** - *
-     *  For example, with i = 10*log10(m2/m1)/10*16         (= log10(m2/m1)*16)
-     *
-     * abs(i)>8 is equivalent (as i is an integer) to
-     * abs(i)>=9
-     * i>=9 || i<=-9
-     * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16
-     * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16)
-     * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16
-     * exp10 is strictly increasing thus this is equivalent to
-     * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants
-     * 
- */ - - /** - * as in if(i>8) - */ - var I1LIMIT = 8; - /** - * as in if(i>24) . changed 23 - */ - var I2LIMIT = 23; - /** - * as in if(m<15) - */ - var MLIMIT = 15; - - var ma_max_i1; - var ma_max_i2; - var ma_max_m; - - /** - * This is the masking table:
- * According to tonality, values are going from 0dB (TMN) to 9.3dB (NMT).
- * After additive masking computation, 8dB are added, so final values are - * going from 8dB to 17.3dB - * - * pow(10, -0.0..-0.6) - */ - var tab = [1.0, 0.79433, 0.63096, 0.63096, - 0.63096, 0.63096, 0.63096, 0.25119, 0.11749]; - - function init_mask_add_max_values() { - ma_max_i1 = Math.pow(10, (I1LIMIT + 1) / 16.0); - ma_max_i2 = Math.pow(10, (I2LIMIT + 1) / 16.0); - ma_max_m = Math.pow(10, (MLIMIT) / 10.0); - } - - var table1 = [3.3246 * 3.3246, - 3.23837 * 3.23837, 3.15437 * 3.15437, 3.00412 * 3.00412, - 2.86103 * 2.86103, 2.65407 * 2.65407, 2.46209 * 2.46209, - 2.284 * 2.284, 2.11879 * 2.11879, 1.96552 * 1.96552, - 1.82335 * 1.82335, 1.69146 * 1.69146, 1.56911 * 1.56911, - 1.46658 * 1.46658, 1.37074 * 1.37074, 1.31036 * 1.31036, - 1.25264 * 1.25264, 1.20648 * 1.20648, 1.16203 * 1.16203, - 1.12765 * 1.12765, 1.09428 * 1.09428, 1.0659 * 1.0659, - 1.03826 * 1.03826, 1.01895 * 1.01895, 1]; - - var table2 = [1.33352 * 1.33352, - 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497, - 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382, - 1.22321 * 1.22321, 1.14758 * 1.14758, 1]; - - var table3 = [2.35364 * 2.35364, - 2.29259 * 2.29259, 2.23313 * 2.23313, 2.12675 * 2.12675, - 2.02545 * 2.02545, 1.87894 * 1.87894, 1.74303 * 1.74303, - 1.61695 * 1.61695, 1.49999 * 1.49999, 1.39148 * 1.39148, - 1.29083 * 1.29083, 1.19746 * 1.19746, 1.11084 * 1.11084, - 1.03826 * 1.03826]; - - /** - * addition of simultaneous masking Naoki Shibata 2000/7 - */ - function mask_add(m1, m2, kk, b, gfc, shortblock) { - var ratio; - - if (m2 > m1) { - if (m2 < (m1 * ma_max_i2)) - ratio = m2 / m1; - else - return (m1 + m2); - } else { - if (m1 >= (m2 * ma_max_i2)) - return (m1 + m2); - ratio = m1 / m2; - } - - /* Should always be true, just checking */ - assert(m1 >= 0); - assert(m2 >= 0); - - m1 += m2; - //if (((long)(b + 3) & 0xffffffff) <= 3 + 3) { - if ((b + 3) <= 3 + 3) { - /* approximately, 1 bark = 3 partitions */ - /* 65% of the cases */ - /* originally 'if(i > 8)' */ - if (ratio >= ma_max_i1) { - /* 43% of the total */ - return m1; - } - - /* 22% of the total */ - var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0)); - return m1 * table2[i]; - } - - /** - *
-         * m<15 equ log10((m1+m2)/gfc.ATH.cb[k])<1.5
-         * equ (m1+m2)/gfc.ATH.cb[k]<10^1.5
-         * equ (m1+m2)<10^1.5 * gfc.ATH.cb[k]
-         * 
- */ - var i = 0 | Util.FAST_LOG10_X(ratio, 16.0); - if (shortblock != 0) { - m2 = gfc.ATH.cb_s[kk] * gfc.ATH.adjust; - } else { - m2 = gfc.ATH.cb_l[kk] * gfc.ATH.adjust; - } - assert(m2 >= 0); - if (m1 < ma_max_m * m2) { - /* 3% of the total */ - /* Originally if (m > 0) { */ - if (m1 > m2) { - var f, r; - - f = 1.0; - if (i <= 13) - f = table3[i]; - - r = Util.FAST_LOG10_X(m1 / m2, 10.0 / 15.0); - return m1 * ((table1[i] - f) * r + f); - } - - if (i > 13) - return m1; - - return m1 * table3[i]; - } - - /* 10% of total */ - return m1 * table1[i]; - } - - var table2_ = [1.33352 * 1.33352, - 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497, - 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382, - 1.22321 * 1.22321, 1.14758 * 1.14758, 1]; - - /** - * addition of simultaneous masking Naoki Shibata 2000/7 - */ - function vbrpsy_mask_add(m1, m2, b) { - var ratio; - - if (m1 < 0) { - m1 = 0; - } - if (m2 < 0) { - m2 = 0; - } - if (m1 <= 0) { - return m2; - } - if (m2 <= 0) { - return m1; - } - if (m2 > m1) { - ratio = m2 / m1; - } else { - ratio = m1 / m2; - } - if (-2 <= b && b <= 2) { - /* approximately, 1 bark = 3 partitions */ - /* originally 'if(i > 8)' */ - if (ratio >= ma_max_i1) { - return m1 + m2; - } else { - var i = 0 | (Util.FAST_LOG10_X(ratio, 16.0)); - return (m1 + m2) * table2_[i]; - } - } - if (ratio < ma_max_i2) { - return m1 + m2; - } - if (m1 < m2) { - m1 = m2; - } - return m1; - } - - /** - * compute interchannel masking effects - */ - function calc_interchannel_masking(gfp, ratio) { - var gfc = gfp.internal_flags; - if (gfc.channels_out > 1) { - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - var l = gfc.thm[0].l[sb]; - var r = gfc.thm[1].l[sb]; - gfc.thm[0].l[sb] += r * ratio; - gfc.thm[1].l[sb] += l * ratio; - } - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - var l = gfc.thm[0].s[sb][sblock]; - var r = gfc.thm[1].s[sb][sblock]; - gfc.thm[0].s[sb][sblock] += r * ratio; - gfc.thm[1].s[sb][sblock] += l * ratio; - } - } - } - } - - /** - * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper - */ - function msfix1(gfc) { - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - /* use this fix if L & R masking differs by 2db or less */ - /* if db = 10*log10(x2/x1) < 2 */ - /* if (x2 < 1.58*x1) { */ - if (gfc.thm[0].l[sb] > 1.58 * gfc.thm[1].l[sb] - || gfc.thm[1].l[sb] > 1.58 * gfc.thm[0].l[sb]) - continue; - var mld = gfc.mld_l[sb] * gfc.en[3].l[sb]; - var rmid = Math.max(gfc.thm[2].l[sb], - Math.min(gfc.thm[3].l[sb], mld)); - - mld = gfc.mld_l[sb] * gfc.en[2].l[sb]; - var rside = Math.max(gfc.thm[3].l[sb], - Math.min(gfc.thm[2].l[sb], mld)); - gfc.thm[2].l[sb] = rmid; - gfc.thm[3].l[sb] = rside; - } - - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - if (gfc.thm[0].s[sb][sblock] > 1.58 * gfc.thm[1].s[sb][sblock] - || gfc.thm[1].s[sb][sblock] > 1.58 * gfc.thm[0].s[sb][sblock]) - continue; - var mld = gfc.mld_s[sb] * gfc.en[3].s[sb][sblock]; - var rmid = Math.max(gfc.thm[2].s[sb][sblock], - Math.min(gfc.thm[3].s[sb][sblock], mld)); - - mld = gfc.mld_s[sb] * gfc.en[2].s[sb][sblock]; - var rside = Math.max(gfc.thm[3].s[sb][sblock], - Math.min(gfc.thm[2].s[sb][sblock], mld)); - - gfc.thm[2].s[sb][sblock] = rmid; - gfc.thm[3].s[sb][sblock] = rside; - } - } - } - - /** - * Adjust M/S maskings if user set "msfix" - * - * Naoki Shibata 2000 - */ - function ns_msfix(gfc, msfix, athadjust) { - var msfix2 = msfix; - var athlower = Math.pow(10, athadjust); - - msfix *= 2.0; - msfix2 *= 2.0; - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - var thmLR, thmM, thmS, ath; - ath = (gfc.ATH.cb_l[gfc.bm_l[sb]]) * athlower; - thmLR = Math.min(Math.max(gfc.thm[0].l[sb], ath), - Math.max(gfc.thm[1].l[sb], ath)); - thmM = Math.max(gfc.thm[2].l[sb], ath); - thmS = Math.max(gfc.thm[3].l[sb], ath); - if (thmLR * msfix < thmM + thmS) { - var f = thmLR * msfix2 / (thmM + thmS); - thmM *= f; - thmS *= f; - assert(thmM + thmS > 0); - } - gfc.thm[2].l[sb] = Math.min(thmM, gfc.thm[2].l[sb]); - gfc.thm[3].l[sb] = Math.min(thmS, gfc.thm[3].l[sb]); - } - - athlower *= ( Encoder.BLKSIZE_s / Encoder.BLKSIZE); - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - var thmLR, thmM, thmS, ath; - ath = (gfc.ATH.cb_s[gfc.bm_s[sb]]) * athlower; - thmLR = Math.min(Math.max(gfc.thm[0].s[sb][sblock], ath), - Math.max(gfc.thm[1].s[sb][sblock], ath)); - thmM = Math.max(gfc.thm[2].s[sb][sblock], ath); - thmS = Math.max(gfc.thm[3].s[sb][sblock], ath); - - if (thmLR * msfix < thmM + thmS) { - var f = thmLR * msfix / (thmM + thmS); - thmM *= f; - thmS *= f; - assert(thmM + thmS > 0); - } - gfc.thm[2].s[sb][sblock] = Math.min(gfc.thm[2].s[sb][sblock], - thmM); - gfc.thm[3].s[sb][sblock] = Math.min(gfc.thm[3].s[sb][sblock], - thmS); - } - } - } - - /** - * short block threshold calculation (part 2) - * - * partition band bo_s[sfb] is at the transition from scalefactor band sfb - * to the next one sfb+1; enn and thmm have to be split between them - */ - function convert_partition2scalefac_s(gfc, eb, thr, chn, sblock) { - var sb, b; - var enn = 0.0; - var thmm = 0.0; - for (sb = b = 0; sb < Encoder.SBMAX_s; ++b, ++sb) { - var bo_s_sb = gfc.bo_s[sb]; - var npart_s = gfc.npart_s; - var b_lim = bo_s_sb < npart_s ? bo_s_sb : npart_s; - while (b < b_lim) { - assert(eb[b] >= 0); - // iff failed, it may indicate some index error elsewhere - assert(thr[b] >= 0); - enn += eb[b]; - thmm += thr[b]; - b++; - } - gfc.en[chn].s[sb][sblock] = enn; - gfc.thm[chn].s[sb][sblock] = thmm; - - if (b >= npart_s) { - ++sb; - break; - } - assert(eb[b] >= 0); - // iff failed, it may indicate some index error elsewhere - assert(thr[b] >= 0); - { - /* at transition sfb . sfb+1 */ - var w_curr = gfc.PSY.bo_s_weight[sb]; - var w_next = 1.0 - w_curr; - enn = w_curr * eb[b]; - thmm = w_curr * thr[b]; - gfc.en[chn].s[sb][sblock] += enn; - gfc.thm[chn].s[sb][sblock] += thmm; - enn = w_next * eb[b]; - thmm = w_next * thr[b]; - } - } - /* zero initialize the rest */ - for (; sb < Encoder.SBMAX_s; ++sb) { - gfc.en[chn].s[sb][sblock] = 0; - gfc.thm[chn].s[sb][sblock] = 0; - } - } - - /** - * longblock threshold calculation (part 2) - */ - function convert_partition2scalefac_l(gfc, eb, thr, chn) { - var sb, b; - var enn = 0.0; - var thmm = 0.0; - for (sb = b = 0; sb < Encoder.SBMAX_l; ++b, ++sb) { - var bo_l_sb = gfc.bo_l[sb]; - var npart_l = gfc.npart_l; - var b_lim = bo_l_sb < npart_l ? bo_l_sb : npart_l; - while (b < b_lim) { - assert(eb[b] >= 0); - // iff failed, it may indicate some index error elsewhere - assert(thr[b] >= 0); - enn += eb[b]; - thmm += thr[b]; - b++; - } - gfc.en[chn].l[sb] = enn; - gfc.thm[chn].l[sb] = thmm; - - if (b >= npart_l) { - ++sb; - break; - } - assert(eb[b] >= 0); - assert(thr[b] >= 0); - { - /* at transition sfb . sfb+1 */ - var w_curr = gfc.PSY.bo_l_weight[sb]; - var w_next = 1.0 - w_curr; - enn = w_curr * eb[b]; - thmm = w_curr * thr[b]; - gfc.en[chn].l[sb] += enn; - gfc.thm[chn].l[sb] += thmm; - enn = w_next * eb[b]; - thmm = w_next * thr[b]; - } - } - /* zero initialize the rest */ - for (; sb < Encoder.SBMAX_l; ++sb) { - gfc.en[chn].l[sb] = 0; - gfc.thm[chn].l[sb] = 0; - } - } - - function compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) { - var gfc = gfp.internal_flags; - var j, b; - - for (b = j = 0; b < gfc.npart_s; ++b) { - var ebb = 0, m = 0; - var n = gfc.numlines_s[b]; - for (var i = 0; i < n; ++i, ++j) { - var el = fftenergy_s[sblock][j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - } - assert(b == gfc.npart_s); - assert(j == 129); - for (j = b = 0; b < gfc.npart_s; b++) { - var kk = gfc.s3ind_s[b][0]; - var ecb = gfc.s3_ss[j++] * eb[kk]; - ++kk; - while (kk <= gfc.s3ind_s[b][1]) { - ecb += gfc.s3_ss[j] * eb[kk]; - ++j; - ++kk; - } - - { /* limit calculated threshold by previous granule */ - var x = rpelev_s * gfc.nb_s1[chn][b]; - thr[b] = Math.min(ecb, x); - } - if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) { - /* limit calculated threshold by even older granule */ - var x = rpelev2_s * gfc.nb_s2[chn][b]; - var y = thr[b]; - thr[b] = Math.min(x, y); - } - - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = ecb; - assert(thr[b] >= 0); - } - for (; b <= Encoder.CBANDS; ++b) { - eb[b] = 0; - thr[b] = 0; - } - } - - function block_type_set(gfp, uselongblock, blocktype_d, blocktype) { - var gfc = gfp.internal_flags; - - if (gfp.short_blocks == ShortBlock.short_block_coupled - /* force both channels to use the same block type */ - /* this is necessary if the frame is to be encoded in ms_stereo. */ - /* But even without ms_stereo, FhG does this */ - && !(uselongblock[0] != 0 && uselongblock[1] != 0)) - uselongblock[0] = uselongblock[1] = 0; - - /* - * update the blocktype of the previous granule, since it depends on - * what happend in this granule - */ - for (var chn = 0; chn < gfc.channels_out; chn++) { - blocktype[chn] = Encoder.NORM_TYPE; - /* disable short blocks */ - if (gfp.short_blocks == ShortBlock.short_block_dispensed) - uselongblock[chn] = 1; - if (gfp.short_blocks == ShortBlock.short_block_forced) - uselongblock[chn] = 0; - - if (uselongblock[chn] != 0) { - /* no attack : use long blocks */ - assert(gfc.blocktype_old[chn] != Encoder.START_TYPE); - if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE) - blocktype[chn] = Encoder.STOP_TYPE; - } else { - /* attack : use short blocks */ - blocktype[chn] = Encoder.SHORT_TYPE; - if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) { - gfc.blocktype_old[chn] = Encoder.START_TYPE; - } - if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE) - gfc.blocktype_old[chn] = Encoder.SHORT_TYPE; - } - - blocktype_d[chn] = gfc.blocktype_old[chn]; - // value returned to calling program - gfc.blocktype_old[chn] = blocktype[chn]; - // save for next call to l3psy_anal - } - } - - function NS_INTERP(x, y, r) { - /* was pow((x),(r))*pow((y),1-(r)) */ - if (r >= 1.0) { - /* 99.7% of the time */ - return x; - } - if (r <= 0.0) - return y; - if (y > 0.0) { - /* rest of the time */ - return (Math.pow(x / y, r) * y); - } - /* never happens */ - return 0.0; - } - - /** - * these values are tuned only for 44.1kHz... - */ - var regcoef_s = [11.8, 13.6, 17.2, 32, 46.5, - 51.3, 57.5, 67.1, 71.5, 84.6, 97.6, 130, - /* 255.8 */ - ]; - - function pecalc_s(mr, masking_lower) { - var pe_s = 1236.28 / 4; - for (var sb = 0; sb < Encoder.SBMAX_s - 1; sb++) { - for (var sblock = 0; sblock < 3; sblock++) { - var thm = mr.thm.s[sb][sblock]; - assert(sb < regcoef_s.length); - if (thm > 0.0) { - var x = thm * masking_lower; - var en = mr.en.s[sb][sblock]; - if (en > x) { - if (en > x * 1e10) { - pe_s += regcoef_s[sb] * (10.0 * LOG10); - } else { - assert(x > 0); - pe_s += regcoef_s[sb] * Util.FAST_LOG10(en / x); - } - } - } - } - } - - return pe_s; - } - - /** - * these values are tuned only for 44.1kHz... - */ - var regcoef_l = [6.8, 5.8, 5.8, 6.4, 6.5, 9.9, - 12.1, 14.4, 15, 18.9, 21.6, 26.9, 34.2, 40.2, 46.8, 56.5, - 60.7, 73.9, 85.7, 93.4, 126.1, - /* 241.3 */ - ]; - - function pecalc_l(mr, masking_lower) { - var pe_l = 1124.23 / 4; - for (var sb = 0; sb < Encoder.SBMAX_l - 1; sb++) { - var thm = mr.thm.l[sb]; - assert(sb < regcoef_l.length); - if (thm > 0.0) { - var x = thm * masking_lower; - var en = mr.en.l[sb]; - if (en > x) { - if (en > x * 1e10) { - pe_l += regcoef_l[sb] * (10.0 * LOG10); - } else { - assert(x > 0); - pe_l += regcoef_l[sb] * Util.FAST_LOG10(en / x); - } - } - } - } - return pe_l; - } - - function calc_energy(gfc, fftenergy, eb, max, avg) { - var b, j; - - for (b = j = 0; b < gfc.npart_l; ++b) { - var ebb = 0, m = 0; - var i; - for (i = 0; i < gfc.numlines_l[b]; ++i, ++j) { - var el = fftenergy[j]; - assert(el >= 0); - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - max[b] = m; - avg[b] = ebb * gfc.rnumlines_l[b]; - assert(gfc.rnumlines_l[b] >= 0); - assert(ebb >= 0); - assert(eb[b] >= 0); - assert(max[b] >= 0); - assert(avg[b] >= 0); - } - } - - function calc_mask_index_l(gfc, max, avg, mask_idx) { - var last_tab_entry = tab.length - 1; - var b = 0; - var a = avg[b] + avg[b + 1]; - assert(a >= 0); - if (a > 0.0) { - var m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert((gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0); - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - - for (b = 1; b < gfc.npart_l - 1; b++) { - a = avg[b - 1] + avg[b] + avg[b + 1]; - assert(a >= 0); - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0); - a = 20.0 - * (m * 3.0 - a) - / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - + gfc.numlines_l[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - assert(b > 0); - assert(b == gfc.npart_l - 1); - - a = avg[b - 1] + avg[b]; - assert(a >= 0); - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - assert((gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1) > 0); - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - assert(b == (gfc.npart_l - 1)); - } - - var fircoef = [ - -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2, - -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2, - -5.52212e-17 * 2, -0.313819 * 2 - ]; - - this.L3psycho_anal_ns = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) { - /* - * to get a good cache performance, one has to think about the sequence, - * in which the variables are used. - */ - var gfc = gfp.internal_flags; - - /* fft and energy calculation */ - var wsamp_L = new_float_n([2, Encoder.BLKSIZE]); - var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]); - - /* convolution */ - var eb_l = new_float(Encoder.CBANDS + 1); - var eb_s = new_float(Encoder.CBANDS + 1); - var thr = new_float(Encoder.CBANDS + 2); - - /* block type */ - var blocktype = new_int(2), uselongblock = new_int(2); - - /* usual variables like loop indices, etc.. */ - var numchn, chn; - var b, i, j, k; - var sb, sblock; - - /* variables used for --nspsytune */ - var ns_hpfsmpl = new_float_n([2, 576]); - var pcfact; - var mask_idx_l = new_int(Encoder.CBANDS + 2), mask_idx_s = new_int(Encoder.CBANDS + 2); - - Arrays.fill(mask_idx_s, 0); - - numchn = gfc.channels_out; - /* chn=2 and 3 = Mid and Side channels */ - if (gfp.mode == MPEGMode.JOINT_STEREO) - numchn = 4; - - if (gfp.VBR == VbrMode.vbr_off) - pcfact = gfc.ResvMax == 0 ? 0 : ( gfc.ResvSize) - / gfc.ResvMax * 0.5; - else if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh - || gfp.VBR == VbrMode.vbr_mt) { - pcfact = 0.6; - } else - pcfact = 1.0; - - /********************************************************************** - * Apply HPF of fs/4 to the input signal. This is used for attack - * detection / handling. - **********************************************************************/ - /* Don't copy the input buffer into a temporary buffer */ - /* unroll the loop 2 times */ - for (chn = 0; chn < gfc.channels_out; chn++) { - /* apply high pass filter of fs/4 */ - var firbuf = buffer[chn]; - var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192; - assert(fircoef.length == ((NSFIRLEN - 1) / 2)); - for (i = 0; i < 576; i++) { - var sum1, sum2; - sum1 = firbuf[firbufPos + i + 10]; - sum2 = 0.0; - for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { - sum1 += fircoef[j] - * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i - + NSFIRLEN - j]); - sum2 += fircoef[j + 1] - * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos - + i + NSFIRLEN - j - 1]); - } - ns_hpfsmpl[chn][i] = sum1 + sum2; - } - masking_ratio[gr_out][chn].en.assign(gfc.en[chn]); - masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]); - if (numchn > 2) { - /* MS maskings */ - /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */ - masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]); - masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]); - } - } - - for (chn = 0; chn < numchn; chn++) { - var wsamp_l; - var wsamp_s; - var en_subshort = new_float(12); - var en_short = [0, 0, 0, 0]; - var attack_intensity = new_float(12); - var ns_uselongblock = 1; - var attackThreshold; - var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS); - var ns_attacks = [0, 0, 0, 0]; - var fftenergy = new_float(Encoder.HBLKSIZE); - var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]); - - /* - * rh 20040301: the following loops do access one off the limits so - * I increase the array dimensions by one and initialize the - * accessed values to zero - */ - assert(gfc.npart_s <= Encoder.CBANDS); - assert(gfc.npart_l <= Encoder.CBANDS); - - /*************************************************************** - * determine the block type (window type) - ***************************************************************/ - /* calculate energies of each sub-shortblocks */ - for (i = 0; i < 3; i++) { - en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6]; - assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0); - attack_intensity[i] = en_subshort[i] - / gfc.nsPsy.last_en_subshort[chn][i + 4]; - en_short[0] += en_subshort[i]; - } - - if (chn == 2) { - for (i = 0; i < 576; i++) { - var l, r; - l = ns_hpfsmpl[0][i]; - r = ns_hpfsmpl[1][i]; - ns_hpfsmpl[0][i] = l + r; - ns_hpfsmpl[1][i] = l - r; - } - } - { - var pf = ns_hpfsmpl[chn & 1]; - var pfPos = 0; - for (i = 0; i < 9; i++) { - var pfe = pfPos + 576 / 9; - var p = 1.; - for (; pfPos < pfe; pfPos++) - if (p < Math.abs(pf[pfPos])) - p = Math.abs(pf[pfPos]); - - gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p; - en_short[1 + i / 3] += p; - if (p > en_subshort[i + 3 - 2]) { - assert(en_subshort[i + 3 - 2] > 0); - p = p / en_subshort[i + 3 - 2]; - } else if (en_subshort[i + 3 - 2] > p * 10.0) { - assert(p > 0); - p = en_subshort[i + 3 - 2] / (p * 10.0); - } else - p = 0.0; - attack_intensity[i + 3] = p; - } - } - - if (gfp.analysis) { - var x = attack_intensity[0]; - for (i = 1; i < 12; i++) - if (x < attack_intensity[i]) - x = attack_intensity[i]; - gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn]; - gfc.pinfo.ers_save[chn] = x; - } - - /* compare energies between sub-shortblocks */ - attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s - : gfc.nsPsy.attackthre; - for (i = 0; i < 12; i++) - if (0 == ns_attacks[i / 3] - && attack_intensity[i] > attackThreshold) - ns_attacks[i / 3] = (i % 3) + 1; - - /* - * should have energy change between short blocks, in order to avoid - * periodic signals - */ - for (i = 1; i < 4; i++) { - var ratio; - if (en_short[i - 1] > en_short[i]) { - assert(en_short[i] > 0); - ratio = en_short[i - 1] / en_short[i]; - } else { - assert(en_short[i - 1] > 0); - ratio = en_short[i] / en_short[i - 1]; - } - if (ratio < 1.7) { - ns_attacks[i] = 0; - if (i == 1) - ns_attacks[0] = 0; - } - } - - if (ns_attacks[0] != 0 && gfc.nsPsy.lastAttacks[chn] != 0) - ns_attacks[0] = 0; - - if (gfc.nsPsy.lastAttacks[chn] == 3 - || (ns_attacks[0] + ns_attacks[1] + ns_attacks[2] + ns_attacks[3]) != 0) { - ns_uselongblock = 0; - - if (ns_attacks[1] != 0 && ns_attacks[0] != 0) - ns_attacks[1] = 0; - if (ns_attacks[2] != 0 && ns_attacks[1] != 0) - ns_attacks[2] = 0; - if (ns_attacks[3] != 0 && ns_attacks[2] != 0) - ns_attacks[3] = 0; - } - - if (chn < 2) { - uselongblock[chn] = ns_uselongblock; - } else { - if (ns_uselongblock == 0) { - uselongblock[0] = uselongblock[1] = 0; - } - } - - /* - * there is a one granule delay. Copy maskings computed last call - * into masking_ratio to return to calling program. - */ - energy[chn] = gfc.tot_ener[chn]; - - /********************************************************************* - * compute FFTs - *********************************************************************/ - wsamp_s = wsamp_S; - wsamp_l = wsamp_L; - compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, (chn & 1), - wsamp_s, (chn & 1), gr_out, chn, buffer, bufPos); - - /********************************************************************* - * Calculate the energy and the tonality of each partition. - *********************************************************************/ - calc_energy(gfc, fftenergy, eb_l, max, avg); - calc_mask_index_l(gfc, max, avg, mask_idx_l); - /* compute masking thresholds for short blocks */ - for (sblock = 0; sblock < 3; sblock++) { - var enn, thmm; - compute_masking_s(gfp, fftenergy_s, eb_s, thr, chn, sblock); - convert_partition2scalefac_s(gfc, eb_s, thr, chn, sblock); - /**** short block pre-echo control ****/ - for (sb = 0; sb < Encoder.SBMAX_s; sb++) { - thmm = gfc.thm[chn].s[sb][sblock]; - - thmm *= NS_PREECHO_ATT0; - if (ns_attacks[sblock] >= 2 || ns_attacks[sblock + 1] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT1 * pcfact); - thmm = Math.min(thmm, p); - } - - if (ns_attacks[sblock] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } else if ((sblock != 0 && ns_attacks[sblock - 1] == 3) - || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) { - var idx = (sblock != 2) ? sblock + 1 : 0; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } - - /* pulse like signal detection for fatboy.wav and so on */ - enn = en_subshort[sblock * 3 + 3] - + en_subshort[sblock * 3 + 4] - + en_subshort[sblock * 3 + 5]; - if (en_subshort[sblock * 3 + 5] * 6 < enn) { - thmm *= 0.5; - if (en_subshort[sblock * 3 + 4] * 6 < enn) - thmm *= 0.5; - } - - gfc.thm[chn].s[sb][sblock] = thmm; - } - } - gfc.nsPsy.lastAttacks[chn] = ns_attacks[2]; - - /********************************************************************* - * convolve the partitioned energy and unpredictability with the - * spreading function, s3_l[b][k] - ********************************************************************/ - k = 0; - { - for (b = 0; b < gfc.npart_l; b++) { - /* - * convolve the partitioned energy with the spreading - * function - */ - var kk = gfc.s3ind[b][0]; - var eb2 = eb_l[kk] * tab[mask_idx_l[kk]]; - var ecb = gfc.s3_ll[k++] * eb2; - while (++kk <= gfc.s3ind[b][1]) { - eb2 = eb_l[kk] * tab[mask_idx_l[kk]]; - ecb = mask_add(ecb, gfc.s3_ll[k++] * eb2, kk, kk - b, - gfc, 0); - } - ecb *= 0.158489319246111; - /* pow(10,-0.8) */ - - /**** long block pre-echo control ****/ - /** - *
-                     * dont use long block pre-echo control if previous granule was
-                     * a short block.  This is to avoid the situation:
-                     * frame0:  quiet (very low masking)
-                     * frame1:  surge  (triggers short blocks)
-                     * frame2:  regular frame.  looks like pre-echo when compared to
-                     *          frame0, but all pre-echo was in frame1.
-                     * 
- */ - /* - * chn=0,1 L and R channels - * - * chn=2,3 S and M channels. - */ - - if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) - thr[b] = ecb; - else - thr[b] = NS_INTERP( - Math.min(ecb, Math.min(rpelev - * gfc.nb_1[chn][b], rpelev2 - * gfc.nb_2[chn][b])), ecb, pcfact); - - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = ecb; - } - } - for (; b <= Encoder.CBANDS; ++b) { - eb_l[b] = 0; - thr[b] = 0; - } - /* compute masking thresholds for long blocks */ - convert_partition2scalefac_l(gfc, eb_l, thr, chn); - } - /* end loop over chn */ - - if (gfp.mode == MPEGMode.STEREO || gfp.mode == MPEGMode.JOINT_STEREO) { - if (gfp.interChRatio > 0.0) { - calc_interchannel_masking(gfp, gfp.interChRatio); - } - } - - if (gfp.mode == MPEGMode.JOINT_STEREO) { - var msfix; - msfix1(gfc); - msfix = gfp.msfix; - if (Math.abs(msfix) > 0.0) - ns_msfix(gfc, msfix, gfp.ATHlower * gfc.ATH.adjust); - } - - /*************************************************************** - * determine final block type - ***************************************************************/ - block_type_set(gfp, uselongblock, blocktype_d, blocktype); - - /********************************************************************* - * compute the value of PE to return ... no delay and advance - *********************************************************************/ - for (chn = 0; chn < numchn; chn++) { - var ppe; - var ppePos = 0; - var type; - var mr; - - if (chn > 1) { - ppe = percep_MS_entropy; - ppePos = -2; - type = Encoder.NORM_TYPE; - if (blocktype_d[0] == Encoder.SHORT_TYPE - || blocktype_d[1] == Encoder.SHORT_TYPE) - type = Encoder.SHORT_TYPE; - mr = masking_MS_ratio[gr_out][chn - 2]; - } else { - ppe = percep_entropy; - ppePos = 0; - type = blocktype_d[chn]; - mr = masking_ratio[gr_out][chn]; - } - - if (type == Encoder.SHORT_TYPE) - ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower); - else - ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower); - - if (gfp.analysis) - gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn]; - - } - return 0; - } - - function vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, fftenergy, wsamp_l, wsamp_lPos) { - var gfc = gfp.internal_flags; - if (chn < 2) { - fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos); - } else if (chn == 2) { - /* FFT data for mid and side channel is derived from L & R */ - for (var j = Encoder.BLKSIZE - 1; j >= 0; --j) { - var l = wsamp_l[wsamp_lPos + 0][j]; - var r = wsamp_l[wsamp_lPos + 1][j]; - wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5; - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]); - fftenergy[0] *= fftenergy[0]; - - for (var j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) { - var re = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 - j]; - var im = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 + j]; - fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - /* total energy */ - { - var totalenergy = 0.0; - for (var j = 11; j < Encoder.HBLKSIZE; j++) - totalenergy += fftenergy[j]; - - gfc.tot_ener[chn] = totalenergy; - } - - if (gfp.analysis) { - for (var j = 0; j < Encoder.HBLKSIZE; j++) { - gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j]; - gfc.pinfo.energy_save[chn][j] = fftenergy[j]; - } - gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn]; - } - } - - function vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, fftenergy_s, wsamp_s, wsamp_sPos) { - var gfc = gfp.internal_flags; - - if (sblock == 0 && chn < 2) { - fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos); - } - if (chn == 2) { - /* FFT data for mid and side channel is derived from L & R */ - for (var j = Encoder.BLKSIZE_s - 1; j >= 0; --j) { - var l = wsamp_s[wsamp_sPos + 0][sblock][j]; - var r = wsamp_s[wsamp_sPos + 1][sblock][j]; - wsamp_s[wsamp_sPos + 0][sblock][j] = (l + r) * Util.SQRT2 * 0.5; - wsamp_s[wsamp_sPos + 1][sblock][j] = (l - r) * Util.SQRT2 * 0.5; - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy_s[sblock][0] = wsamp_s[wsamp_sPos + 0][sblock][0]; - fftenergy_s[sblock][0] *= fftenergy_s[sblock][0]; - for (var j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) { - var re = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 - j]; - var im = wsamp_s[wsamp_sPos + 0][sblock][Encoder.BLKSIZE_s / 2 + j]; - fftenergy_s[sblock][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5); - } - } - - /** - * compute loudness approximation (used for ATH auto-level adjustment) - */ - function vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, fftenergy) { - var gfc = gfp.internal_flags; - if (gfp.athaa_loudapprox == 2 && chn < 2) { - // no loudness for mid/side ch - gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn]; - gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc); - } - } - - var fircoef_ = [-8.65163e-18 * 2, - -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2, - -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, - 0.0931738 * 2, -5.52212e-17 * 2, -0.313819 * 2]; - - /** - * Apply HPF of fs/4 to the input signal. This is used for attack detection - * / handling. - */ - function vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, energy, sub_short_factor, ns_attacks, uselongblock) { - var ns_hpfsmpl = new_float_n([2, 576]); - var gfc = gfp.internal_flags; - var n_chn_out = gfc.channels_out; - /* chn=2 and 3 = Mid and Side channels */ - var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 : n_chn_out; - /* Don't copy the input buffer into a temporary buffer */ - /* unroll the loop 2 times */ - for (var chn = 0; chn < n_chn_out; chn++) { - /* apply high pass filter of fs/4 */ - firbuf = buffer[chn]; - var firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192; - assert(fircoef_.length == ((NSFIRLEN - 1) / 2)); - for (var i = 0; i < 576; i++) { - var sum1, sum2; - sum1 = firbuf[firbufPos + i + 10]; - sum2 = 0.0; - for (var j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { - sum1 += fircoef_[j] - * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i - + NSFIRLEN - j]); - sum2 += fircoef_[j + 1] - * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos - + i + NSFIRLEN - j - 1]); - } - ns_hpfsmpl[chn][i] = sum1 + sum2; - } - masking_ratio[gr_out][chn].en.assign(gfc.en[chn]); - masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]); - if (n_chn_psy > 2) { - /* MS maskings */ - /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */ - masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]); - masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]); - } - } - for (var chn = 0; chn < n_chn_psy; chn++) { - var attack_intensity = new_float(12); - var en_subshort = new_float(12); - var en_short = [0, 0, 0, 0]; - var pf = ns_hpfsmpl[chn & 1]; - var pfPos = 0; - var attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s - : gfc.nsPsy.attackthre; - var ns_uselongblock = 1; - - if (chn == 2) { - for (var i = 0, j = 576; j > 0; ++i, --j) { - var l = ns_hpfsmpl[0][i]; - var r = ns_hpfsmpl[1][i]; - ns_hpfsmpl[0][i] = l + r; - ns_hpfsmpl[1][i] = l - r; - } - } - /*************************************************************** - * determine the block type (window type) - ***************************************************************/ - /* calculate energies of each sub-shortblocks */ - for (var i = 0; i < 3; i++) { - en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6]; - assert(gfc.nsPsy.last_en_subshort[chn][i + 4] > 0); - attack_intensity[i] = en_subshort[i] - / gfc.nsPsy.last_en_subshort[chn][i + 4]; - en_short[0] += en_subshort[i]; - } - - for (var i = 0; i < 9; i++) { - var pfe = pfPos + 576 / 9; - var p = 1.; - for (; pfPos < pfe; pfPos++) - if (p < Math.abs(pf[pfPos])) - p = Math.abs(pf[pfPos]); - - gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p; - en_short[1 + i / 3] += p; - if (p > en_subshort[i + 3 - 2]) { - assert(en_subshort[i + 3 - 2] > 0); - p = p / en_subshort[i + 3 - 2]; - } else if (en_subshort[i + 3 - 2] > p * 10.0) { - assert(p > 0); - p = en_subshort[i + 3 - 2] / (p * 10.0); - } else { - p = 0.0; - } - attack_intensity[i + 3] = p; - } - /* pulse like signal detection for fatboy.wav and so on */ - for (var i = 0; i < 3; ++i) { - var enn = en_subshort[i * 3 + 3] - + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5]; - var factor = 1.; - if (en_subshort[i * 3 + 5] * 6 < enn) { - factor *= 0.5; - if (en_subshort[i * 3 + 4] * 6 < enn) { - factor *= 0.5; - } - } - sub_short_factor[chn][i] = factor; - } - - if (gfp.analysis) { - var x = attack_intensity[0]; - for (var i = 1; i < 12; i++) { - if (x < attack_intensity[i]) { - x = attack_intensity[i]; - } - } - gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn]; - gfc.pinfo.ers_save[chn] = x; - } - - /* compare energies between sub-shortblocks */ - for (var i = 0; i < 12; i++) { - if (0 == ns_attacks[chn][i / 3] - && attack_intensity[i] > attackThreshold) { - ns_attacks[chn][i / 3] = (i % 3) + 1; - } - } - - /* - * should have energy change between short blocks, in order to avoid - * periodic signals - */ - /* Good samples to show the effect are Trumpet test songs */ - /* - * GB: tuned (1) to avoid too many short blocks for test sample - * TRUMPET - */ - /* - * RH: tuned (2) to let enough short blocks through for test sample - * FSOL and SNAPS - */ - for (var i = 1; i < 4; i++) { - var u = en_short[i - 1]; - var v = en_short[i]; - var m = Math.max(u, v); - if (m < 40000) { /* (2) */ - if (u < 1.7 * v && v < 1.7 * u) { /* (1) */ - if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) { - ns_attacks[chn][0] = 0; - } - ns_attacks[chn][i] = 0; - } - } - } - - if (ns_attacks[chn][0] <= gfc.nsPsy.lastAttacks[chn]) { - ns_attacks[chn][0] = 0; - } - - if (gfc.nsPsy.lastAttacks[chn] == 3 - || (ns_attacks[chn][0] + ns_attacks[chn][1] - + ns_attacks[chn][2] + ns_attacks[chn][3]) != 0) { - ns_uselongblock = 0; - - if (ns_attacks[chn][1] != 0 && ns_attacks[chn][0] != 0) { - ns_attacks[chn][1] = 0; - } - if (ns_attacks[chn][2] != 0 && ns_attacks[chn][1] != 0) { - ns_attacks[chn][2] = 0; - } - if (ns_attacks[chn][3] != 0 && ns_attacks[chn][2] != 0) { - ns_attacks[chn][3] = 0; - } - } - if (chn < 2) { - uselongblock[chn] = ns_uselongblock; - } else { - if (ns_uselongblock == 0) { - uselongblock[0] = uselongblock[1] = 0; - } - } - - /* - * there is a one granule delay. Copy maskings computed last call - * into masking_ratio to return to calling program. - */ - energy[chn] = gfc.tot_ener[chn]; - } - } - - function vbrpsy_skip_masking_s(gfc, chn, sblock) { - if (sblock == 0) { - for (var b = 0; b < gfc.npart_s; b++) { - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = 0; - } - } - } - - function vbrpsy_skip_masking_l(gfc, chn) { - for (var b = 0; b < gfc.npart_l; b++) { - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = 0; - } - } - - function psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx) { - var last_tab_entry = tab.length - 1; - var b = 0; - var a = avg[b] + avg[b + 1]; - assert(a >= 0); - if (a > 0.0) { - var m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert((gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0); - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - - for (b = 1; b < gfc.npart_s - 1; b++) { - a = avg[b - 1] + avg[b] + avg[b + 1]; - assert(b + 1 < gfc.npart_s); - assert(a >= 0); - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0); - a = 20.0 - * (m * 3.0 - a) - / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - + gfc.numlines_s[b + 1] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - assert(b > 0); - assert(b == gfc.npart_s - 1); - - a = avg[b - 1] + avg[b]; - assert(a >= 0); - if (a > 0.0) { - var m = max[b - 1]; - if (m < max[b]) - m = max[b]; - assert((gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1) > 0); - a = 20.0 * (m * 2.0 - a) - / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1)); - var k = 0 | a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - assert(b == (gfc.npart_s - 1)); - } - - function vbrpsy_compute_masking_s(gfp, fftenergy_s, eb, thr, chn, sblock) { - var gfc = gfp.internal_flags; - var max = new float[Encoder.CBANDS], avg = new_float(Encoder.CBANDS); - var i, j, b; - var mask_idx_s = new int[Encoder.CBANDS]; - - for (b = j = 0; b < gfc.npart_s; ++b) { - var ebb = 0, m = 0; - var n = gfc.numlines_s[b]; - for (i = 0; i < n; ++i, ++j) { - var el = fftenergy_s[sblock][j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - assert(ebb >= 0); - max[b] = m; - assert(n > 0); - avg[b] = ebb / n; - assert(avg[b] >= 0); - } - assert(b == gfc.npart_s); - assert(j == 129); - for (; b < Encoder.CBANDS; ++b) { - max[b] = 0; - avg[b] = 0; - } - psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx_s); - for (j = b = 0; b < gfc.npart_s; b++) { - var kk = gfc.s3ind_s[b][0]; - var last = gfc.s3ind_s[b][1]; - var dd, dd_n; - var x, ecb, avg_mask; - dd = mask_idx_s[kk]; - dd_n = 1; - ecb = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]]; - ++j; - ++kk; - while (kk <= last) { - dd += mask_idx_s[kk]; - dd_n += 1; - x = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]]; - ecb = vbrpsy_mask_add(ecb, x, kk - b); - ++j; - ++kk; - } - dd = (1 + 2 * dd) / (2 * dd_n); - avg_mask = tab[dd] * 0.5; - ecb *= avg_mask; - thr[b] = ecb; - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = ecb; - { - /* - * if THR exceeds EB, the quantization routines will take the - * difference from other bands. in case of strong tonal samples - * (tonaltest.wav) this leads to heavy distortions. that's why - * we limit THR here. - */ - x = max[b]; - x *= gfc.minval_s[b]; - x *= avg_mask; - if (thr[b] > x) { - thr[b] = x; - } - } - if (gfc.masking_lower > 1) { - thr[b] *= gfc.masking_lower; - } - if (thr[b] > eb[b]) { - thr[b] = eb[b]; - } - if (gfc.masking_lower < 1) { - thr[b] *= gfc.masking_lower; - } - - assert(thr[b] >= 0); - } - for (; b < Encoder.CBANDS; ++b) { - eb[b] = 0; - thr[b] = 0; - } - } - - function vbrpsy_compute_masking_l(gfc, fftenergy, eb_l, thr, chn) { - var max = new_float(Encoder.CBANDS), avg = new_float(Encoder.CBANDS); - var mask_idx_l = new_int(Encoder.CBANDS + 2); - var b; - - /********************************************************************* - * Calculate the energy and the tonality of each partition. - *********************************************************************/ - calc_energy(gfc, fftenergy, eb_l, max, avg); - calc_mask_index_l(gfc, max, avg, mask_idx_l); - - /********************************************************************* - * convolve the partitioned energy and unpredictability with the - * spreading function, s3_l[b][k] - ********************************************************************/ - var k = 0; - for (b = 0; b < gfc.npart_l; b++) { - var x, ecb, avg_mask, t; - /* convolve the partitioned energy with the spreading function */ - var kk = gfc.s3ind[b][0]; - var last = gfc.s3ind[b][1]; - var dd = 0, dd_n = 0; - dd = mask_idx_l[kk]; - dd_n += 1; - ecb = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]]; - ++k; - ++kk; - while (kk <= last) { - dd += mask_idx_l[kk]; - dd_n += 1; - x = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]]; - t = vbrpsy_mask_add(ecb, x, kk - b); - ecb = t; - ++k; - ++kk; - } - dd = (1 + 2 * dd) / (2 * dd_n); - avg_mask = tab[dd] * 0.5; - ecb *= avg_mask; - - /**** long block pre-echo control ****/ - /** - *
-             * dont use long block pre-echo control if previous granule was
-             * a short block.  This is to avoid the situation:
-             * frame0:  quiet (very low masking)
-             * frame1:  surge  (triggers short blocks)
-             * frame2:  regular frame.  looks like pre-echo when compared to
-             *          frame0, but all pre-echo was in frame1.
-             * 
- */ - /* - * chn=0,1 L and R channels chn=2,3 S and M channels. - */ - if (gfc.blocktype_old[chn & 0x01] == Encoder.SHORT_TYPE) { - var ecb_limit = rpelev * gfc.nb_1[chn][b]; - if (ecb_limit > 0) { - thr[b] = Math.min(ecb, ecb_limit); - } else { - /** - *
-                     * Robert 071209:
-                     * Because we don't calculate long block psy when we know a granule
-                     * should be of short blocks, we don't have any clue how the granule
-                     * before would have looked like as a long block. So we have to guess
-                     * a little bit for this END_TYPE block.
-                     * Most of the time we get away with this sloppyness. (fingers crossed :)
-                     * The speed increase is worth it.
-                     * 
- */ - thr[b] = Math.min(ecb, eb_l[b] * NS_PREECHO_ATT2); - } - } else { - var ecb_limit_2 = rpelev2 * gfc.nb_2[chn][b]; - var ecb_limit_1 = rpelev * gfc.nb_1[chn][b]; - var ecb_limit; - if (ecb_limit_2 <= 0) { - ecb_limit_2 = ecb; - } - if (ecb_limit_1 <= 0) { - ecb_limit_1 = ecb; - } - if (gfc.blocktype_old[chn & 0x01] == Encoder.NORM_TYPE) { - ecb_limit = Math.min(ecb_limit_1, ecb_limit_2); - } else { - ecb_limit = ecb_limit_1; - } - thr[b] = Math.min(ecb, ecb_limit); - } - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = ecb; - { - /* - * if THR exceeds EB, the quantization routines will take the - * difference from other bands. in case of strong tonal samples - * (tonaltest.wav) this leads to heavy distortions. that's why - * we limit THR here. - */ - x = max[b]; - x *= gfc.minval_l[b]; - x *= avg_mask; - if (thr[b] > x) { - thr[b] = x; - } - } - if (gfc.masking_lower > 1) { - thr[b] *= gfc.masking_lower; - } - if (thr[b] > eb_l[b]) { - thr[b] = eb_l[b]; - } - if (gfc.masking_lower < 1) { - thr[b] *= gfc.masking_lower; - } - assert(thr[b] >= 0); - } - for (; b < Encoder.CBANDS; ++b) { - eb_l[b] = 0; - thr[b] = 0; - } - } - - function vbrpsy_compute_block_type(gfp, uselongblock) { - var gfc = gfp.internal_flags; - - if (gfp.short_blocks == ShortBlock.short_block_coupled - /* force both channels to use the same block type */ - /* this is necessary if the frame is to be encoded in ms_stereo. */ - /* But even without ms_stereo, FhG does this */ - && !(uselongblock[0] != 0 && uselongblock[1] != 0)) - uselongblock[0] = uselongblock[1] = 0; - - for (var chn = 0; chn < gfc.channels_out; chn++) { - /* disable short blocks */ - if (gfp.short_blocks == ShortBlock.short_block_dispensed) { - uselongblock[chn] = 1; - } - if (gfp.short_blocks == ShortBlock.short_block_forced) { - uselongblock[chn] = 0; - } - } - } - - function vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d) { - var gfc = gfp.internal_flags; - - /* - * update the blocktype of the previous granule, since it depends on - * what happend in this granule - */ - for (var chn = 0; chn < gfc.channels_out; chn++) { - var blocktype = Encoder.NORM_TYPE; - /* disable short blocks */ - - if (uselongblock[chn] != 0) { - /* no attack : use long blocks */ - assert(gfc.blocktype_old[chn] != Encoder.START_TYPE); - if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE) - blocktype = Encoder.STOP_TYPE; - } else { - /* attack : use short blocks */ - blocktype = Encoder.SHORT_TYPE; - if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) { - gfc.blocktype_old[chn] = Encoder.START_TYPE; - } - if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE) - gfc.blocktype_old[chn] = Encoder.SHORT_TYPE; - } - - blocktype_d[chn] = gfc.blocktype_old[chn]; - // value returned to calling program - gfc.blocktype_old[chn] = blocktype; - // save for next call to l3psy_anal - } - } - - /** - * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper - */ - function vbrpsy_compute_MS_thresholds(eb, thr, cb_mld, ath_cb, athadjust, msfix, n) { - var msfix2 = msfix * 2; - var athlower = msfix > 0 ? Math.pow(10, athadjust) : 1; - var rside, rmid; - for (var b = 0; b < n; ++b) { - var ebM = eb[2][b]; - var ebS = eb[3][b]; - var thmL = thr[0][b]; - var thmR = thr[1][b]; - var thmM = thr[2][b]; - var thmS = thr[3][b]; - - /* use this fix if L & R masking differs by 2db or less */ - if (thmL <= 1.58 * thmR && thmR <= 1.58 * thmL) { - var mld_m = cb_mld[b] * ebS; - var mld_s = cb_mld[b] * ebM; - rmid = Math.max(thmM, Math.min(thmS, mld_m)); - rside = Math.max(thmS, Math.min(thmM, mld_s)); - } else { - rmid = thmM; - rside = thmS; - } - if (msfix > 0) { - /***************************************************************/ - /* Adjust M/S maskings if user set "msfix" */ - /***************************************************************/ - /* Naoki Shibata 2000 */ - var thmLR, thmMS; - var ath = ath_cb[b] * athlower; - thmLR = Math.min(Math.max(thmL, ath), Math.max(thmR, ath)); - thmM = Math.max(rmid, ath); - thmS = Math.max(rside, ath); - thmMS = thmM + thmS; - if (thmMS > 0 && (thmLR * msfix2) < thmMS) { - var f = thmLR * msfix2 / thmMS; - thmM *= f; - thmS *= f; - assert(thmMS > 0); - } - rmid = Math.min(thmM, rmid); - rside = Math.min(thmS, rside); - } - if (rmid > ebM) { - rmid = ebM; - } - if (rside > ebS) { - rside = ebS; - } - thr[2][b] = rmid; - thr[3][b] = rside; - } - } - - this.L3psycho_anal_vbr = function (gfp, buffer, bufPos, gr_out, masking_ratio, masking_MS_ratio, percep_entropy, percep_MS_entropy, energy, blocktype_d) { - var gfc = gfp.internal_flags; - - /* fft and energy calculation */ - var wsamp_l; - var wsamp_s; - var fftenergy = new_float(Encoder.HBLKSIZE); - var fftenergy_s = new_float_n([3, Encoder.HBLKSIZE_s]); - var wsamp_L = new_float_n([2, Encoder.BLKSIZE]); - var wsamp_S = new_float_n([2, 3, Encoder.BLKSIZE_s]); - var eb = new_float_n([4, Encoder.CBANDS]), thr = new_float_n([4, Encoder.CBANDS]); - var sub_short_factor = new_float_n([4, 3]); - var pcfact = 0.6; - - /* block type */ - var ns_attacks = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], - [0, 0, 0, 0]]; - var uselongblock = new_int(2); - - /* usual variables like loop indices, etc.. */ - - /* chn=2 and 3 = Mid and Side channels */ - var n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 - : gfc.channels_out; - - vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, - masking_MS_ratio, energy, sub_short_factor, ns_attacks, - uselongblock); - - vbrpsy_compute_block_type(gfp, uselongblock); - - /* LONG BLOCK CASE */ - { - for (var chn = 0; chn < n_chn_psy; chn++) { - var ch01 = chn & 0x01; - wsamp_l = wsamp_L; - vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, - fftenergy, wsamp_l, ch01); - - vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, - fftenergy); - - if (uselongblock[ch01] != 0) { - vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn], - chn); - } else { - vbrpsy_skip_masking_l(gfc, chn); - } - } - if ((uselongblock[0] + uselongblock[1]) == 2) { - /* M/S channel */ - if (gfp.mode == MPEGMode.JOINT_STEREO) { - vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_l, - gfc.ATH.cb_l, gfp.ATHlower * gfc.ATH.adjust, - gfp.msfix, gfc.npart_l); - } - } - /* TODO: apply adaptive ATH masking here ?? */ - for (var chn = 0; chn < n_chn_psy; chn++) { - var ch01 = chn & 0x01; - if (uselongblock[ch01] != 0) { - convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn); - } - } - } - - /* SHORT BLOCKS CASE */ - { - for (var sblock = 0; sblock < 3; sblock++) { - for (var chn = 0; chn < n_chn_psy; ++chn) { - var ch01 = chn & 0x01; - - if (uselongblock[ch01] != 0) { - vbrpsy_skip_masking_s(gfc, chn, sblock); - } else { - /* compute masking thresholds for short blocks */ - wsamp_s = wsamp_S; - vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, - fftenergy_s, wsamp_s, ch01); - vbrpsy_compute_masking_s(gfp, fftenergy_s, eb[chn], - thr[chn], chn, sblock); - } - } - if ((uselongblock[0] + uselongblock[1]) == 0) { - /* M/S channel */ - if (gfp.mode == MPEGMode.JOINT_STEREO) { - vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_s, - gfc.ATH.cb_s, gfp.ATHlower * gfc.ATH.adjust, - gfp.msfix, gfc.npart_s); - } - /* L/R channel */ - } - /* TODO: apply adaptive ATH masking here ?? */ - for (var chn = 0; chn < n_chn_psy; ++chn) { - var ch01 = chn & 0x01; - if (0 == uselongblock[ch01]) { - convert_partition2scalefac_s(gfc, eb[chn], thr[chn], - chn, sblock); - } - } - } - - /**** short block pre-echo control ****/ - for (var chn = 0; chn < n_chn_psy; chn++) { - var ch01 = chn & 0x01; - - if (uselongblock[ch01] != 0) { - continue; - } - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - var new_thmm = new_float(3); - for (var sblock = 0; sblock < 3; sblock++) { - var thmm = gfc.thm[chn].s[sb][sblock]; - thmm *= NS_PREECHO_ATT0; - - if (ns_attacks[chn][sblock] >= 2 - || ns_attacks[chn][sblock + 1] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT1 * pcfact); - thmm = Math.min(thmm, p); - } else if (ns_attacks[chn][sblock] == 1) { - var idx = (sblock != 0) ? sblock - 1 : 2; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } else if ((sblock != 0 && ns_attacks[chn][sblock - 1] == 3) - || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) { - var idx = (sblock != 2) ? sblock + 1 : 0; - var p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = Math.min(thmm, p); - } - - /* pulse like signal detection for fatboy.wav and so on */ - thmm *= sub_short_factor[chn][sblock]; - - new_thmm[sblock] = thmm; - } - for (var sblock = 0; sblock < 3; sblock++) { - gfc.thm[chn].s[sb][sblock] = new_thmm[sblock]; - } - } - } - } - for (var chn = 0; chn < n_chn_psy; chn++) { - gfc.nsPsy.lastAttacks[chn] = ns_attacks[chn][2]; - } - - /*************************************************************** - * determine final block type - ***************************************************************/ - vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d); - - /********************************************************************* - * compute the value of PE to return ... no delay and advance - *********************************************************************/ - for (var chn = 0; chn < n_chn_psy; chn++) { - var ppe; - var ppePos; - var type; - var mr; - - if (chn > 1) { - ppe = percep_MS_entropy; - ppePos = -2; - type = Encoder.NORM_TYPE; - if (blocktype_d[0] == Encoder.SHORT_TYPE - || blocktype_d[1] == Encoder.SHORT_TYPE) - type = Encoder.SHORT_TYPE; - mr = masking_MS_ratio[gr_out][chn - 2]; - } else { - ppe = percep_entropy; - ppePos = 0; - type = blocktype_d[chn]; - mr = masking_ratio[gr_out][chn]; - } - - if (type == Encoder.SHORT_TYPE) { - ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower); - } else { - ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower); - } - - if (gfp.analysis) { - gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn]; - } - } - return 0; - } - - function s3_func_x(bark, hf_slope) { - var tempx = bark, tempy; - - if (tempx >= 0) { - tempy = -tempx * 27; - } else { - tempy = tempx * hf_slope; - } - if (tempy <= -72.0) { - return 0; - } - return Math.exp(tempy * LN_TO_LOG10); - } - - function norm_s3_func_x(hf_slope) { - var lim_a = 0, lim_b = 0; - { - var x = 0, l, h; - for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x -= 1) - ; - l = x; - h = 0; - while (Math.abs(h - l) > 1e-12) { - x = (h + l) / 2; - if (s3_func_x(x, hf_slope) > 0) { - h = x; - } else { - l = x; - } - } - lim_a = l; - } - { - var x = 0, l, h; - for (x = 0; s3_func_x(x, hf_slope) > 1e-20; x += 1) - ; - l = 0; - h = x; - while (Math.abs(h - l) > 1e-12) { - x = (h + l) / 2; - if (s3_func_x(x, hf_slope) > 0) { - l = x; - } else { - h = x; - } - } - lim_b = h; - } - { - var sum = 0; - var m = 1000; - var i; - for (i = 0; i <= m; ++i) { - var x = lim_a + i * (lim_b - lim_a) / m; - var y = s3_func_x(x, hf_slope); - sum += y; - } - { - var norm = (m + 1) / (sum * (lim_b - lim_a)); - /* printf( "norm = %lf\n",norm); */ - return norm; - } - } - } - - /** - * The spreading function. Values returned in units of energy - */ - function s3_func(bark) { - var tempx, x, tempy, temp; - tempx = bark; - if (tempx >= 0) - tempx *= 3; - else - tempx *= 1.5; - - if (tempx >= 0.5 && tempx <= 2.5) { - temp = tempx - 0.5; - x = 8.0 * (temp * temp - 2.0 * temp); - } else - x = 0.0; - tempx += 0.474; - tempy = 15.811389 + 7.5 * tempx - 17.5 - * Math.sqrt(1.0 + tempx * tempx); - - if (tempy <= -60.0) - return 0.0; - - tempx = Math.exp((x + tempy) * LN_TO_LOG10); - - /** - *
-         * Normalization.  The spreading function should be normalized so that:
-         * +inf
-         * /
-         * |  s3 [ bark ]  d(bark)   =  1
-         * /
-         * -inf
-         * 
- */ - tempx /= .6609193; - return tempx; - } - - /** - * see for example "Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7 - */ - function freq2bark(freq) { - /* input: freq in hz output: barks */ - if (freq < 0) - freq = 0; - freq = freq * 0.001; - return 13.0 * Math.atan(.76 * freq) + 3.5 - * Math.atan(freq * freq / (7.5 * 7.5)); - } - - function init_numline(numlines, bo, bm, bval, bval_width, mld, bo_w, sfreq, blksize, scalepos, deltafreq, sbmax) { - var b_frq = new_float(Encoder.CBANDS + 1); - var sample_freq_frac = sfreq / (sbmax > 15 ? 2 * 576 : 2 * 192); - var partition = new_int(Encoder.HBLKSIZE); - var i; - sfreq /= blksize; - var j = 0; - var ni = 0; - /* compute numlines, the number of spectral lines in each partition band */ - /* each partition band should be about DELBARK wide. */ - for (i = 0; i < Encoder.CBANDS; i++) { - var bark1; - var j2; - bark1 = freq2bark(sfreq * j); - - b_frq[i] = sfreq * j; - - for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK - && j2 <= blksize / 2; j2++) - ; - - numlines[i] = j2 - j; - ni = i + 1; - - while (j < j2) { - assert(j < Encoder.HBLKSIZE); - partition[j++] = i; - } - if (j > blksize / 2) { - j = blksize / 2; - ++i; - break; - } - } - assert(i < Encoder.CBANDS); - b_frq[i] = sfreq * j; - - for (var sfb = 0; sfb < sbmax; sfb++) { - var i1, i2, start, end; - var arg; - start = scalepos[sfb]; - end = scalepos[sfb + 1]; - - i1 = 0 | Math.floor(.5 + deltafreq * (start - .5)); - if (i1 < 0) - i1 = 0; - i2 = 0 | Math.floor(.5 + deltafreq * (end - .5)); - - if (i2 > blksize / 2) - i2 = blksize / 2; - - bm[sfb] = (partition[i1] + partition[i2]) / 2; - bo[sfb] = partition[i2]; - var f_tmp = sample_freq_frac * end; - /* - * calculate how much of this band belongs to current scalefactor - * band - */ - bo_w[sfb] = (f_tmp - b_frq[bo[sfb]]) - / (b_frq[bo[sfb] + 1] - b_frq[bo[sfb]]); - if (bo_w[sfb] < 0) { - bo_w[sfb] = 0; - } else { - if (bo_w[sfb] > 1) { - bo_w[sfb] = 1; - } - } - /* setup stereo demasking thresholds */ - /* formula reverse enginerred from plot in paper */ - arg = freq2bark(sfreq * scalepos[sfb] * deltafreq); - arg = ( Math.min(arg, 15.5) / 15.5); - - mld[sfb] = Math.pow(10.0, - 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5); - } - - /* compute bark values of each critical band */ - j = 0; - for (var k = 0; k < ni; k++) { - var w = numlines[k]; - var bark1, bark2; - - bark1 = freq2bark(sfreq * (j)); - bark2 = freq2bark(sfreq * (j + w - 1)); - bval[k] = .5 * (bark1 + bark2); - - bark1 = freq2bark(sfreq * (j - .5)); - bark2 = freq2bark(sfreq * (j + w - .5)); - bval_width[k] = bark2 - bark1; - j += w; - } - - return ni; - } - - function init_s3_values(s3ind, npart, bval, bval_width, norm, use_old_s3) { - var s3 = new_float_n([Encoder.CBANDS, Encoder.CBANDS]); - /* - * The s3 array is not linear in the bark scale. - * - * bval[x] should be used to get the bark value. - */ - var j; - var numberOfNoneZero = 0; - - /** - *
-         * s[i][j], the value of the spreading function,
-         * centered at band j (masker), for band i (maskee)
-         *
-         * i.e.: sum over j to spread into signal barkval=i
-         * NOTE: i and j are used opposite as in the ISO docs
-         * 
- */ - if (use_old_s3) { - for (var i = 0; i < npart; i++) { - for (j = 0; j < npart; j++) { - var v = s3_func(bval[i] - bval[j]) * bval_width[j]; - s3[i][j] = v * norm[i]; - } - } - } else { - for (j = 0; j < npart; j++) { - var hf_slope = 15 + Math.min(21 / bval[j], 12); - var s3_x_norm = norm_s3_func_x(hf_slope); - for (var i = 0; i < npart; i++) { - var v = s3_x_norm - * s3_func_x(bval[i] - bval[j], hf_slope) - * bval_width[j]; - s3[i][j] = v * norm[i]; - } - } - } - for (var i = 0; i < npart; i++) { - for (j = 0; j < npart; j++) { - if (s3[i][j] > 0.0) - break; - } - s3ind[i][0] = j; - - for (j = npart - 1; j > 0; j--) { - if (s3[i][j] > 0.0) - break; - } - s3ind[i][1] = j; - numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1); - } - - var p = new_float(numberOfNoneZero); - var k = 0; - for (var i = 0; i < npart; i++) - for (j = s3ind[i][0]; j <= s3ind[i][1]; j++) - p[k++] = s3[i][j]; - - return p; - } - - function stereo_demask(f) { - /* setup stereo demasking thresholds */ - /* formula reverse enginerred from plot in paper */ - var arg = freq2bark(f); - arg = (Math.min(arg, 15.5) / 15.5); - - return Math.pow(10.0, - 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5); - } - - /** - * NOTE: the bitrate reduction from the inter-channel masking effect is low - * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr - * does not use this feature. (Robert 071216) - */ - this.psymodel_init = function (gfp) { - var gfc = gfp.internal_flags; - var i; - var useOldS3 = true; - var bvl_a = 13, bvl_b = 24; - var snr_l_a = 0, snr_l_b = 0; - var snr_s_a = -8.25, snr_s_b = -4.5; - var bval = new_float(Encoder.CBANDS); - var bval_width = new_float(Encoder.CBANDS); - var norm = new_float(Encoder.CBANDS); - var sfreq = gfp.out_samplerate; - - switch (gfp.experimentalZ) { - default: - case 0: - useOldS3 = true; - break; - case 1: - useOldS3 = (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) ? false - : true; - break; - case 2: - useOldS3 = false; - break; - case 3: - bvl_a = 8; - snr_l_a = -1.75; - snr_l_b = -0.0125; - snr_s_a = -8.25; - snr_s_b = -2.25; - break; - } - gfc.ms_ener_ratio_old = .25; - gfc.blocktype_old[0] = gfc.blocktype_old[1] = Encoder.NORM_TYPE; - // the vbr header is long blocks - - for (i = 0; i < 4; ++i) { - for (var j = 0; j < Encoder.CBANDS; ++j) { - gfc.nb_1[i][j] = 1e20; - gfc.nb_2[i][j] = 1e20; - gfc.nb_s1[i][j] = gfc.nb_s2[i][j] = 1.0; - } - for (var sb = 0; sb < Encoder.SBMAX_l; sb++) { - gfc.en[i].l[sb] = 1e20; - gfc.thm[i].l[sb] = 1e20; - } - for (var j = 0; j < 3; ++j) { - for (var sb = 0; sb < Encoder.SBMAX_s; sb++) { - gfc.en[i].s[sb][j] = 1e20; - gfc.thm[i].s[sb][j] = 1e20; - } - gfc.nsPsy.lastAttacks[i] = 0; - } - for (var j = 0; j < 9; j++) - gfc.nsPsy.last_en_subshort[i][j] = 10.; - } - - /* init. for loudness approx. -jd 2001 mar 27 */ - gfc.loudness_sq_save[0] = gfc.loudness_sq_save[1] = 0.0; - - /************************************************************************* - * now compute the psychoacoustic model specific constants - ************************************************************************/ - /* compute numlines, bo, bm, bval, bval_width, mld */ - - gfc.npart_l = init_numline(gfc.numlines_l, gfc.bo_l, gfc.bm_l, bval, - bval_width, gfc.mld_l, gfc.PSY.bo_l_weight, sfreq, - Encoder.BLKSIZE, gfc.scalefac_band.l, Encoder.BLKSIZE - / (2.0 * 576), Encoder.SBMAX_l); - assert(gfc.npart_l < Encoder.CBANDS); - /* compute the spreading function */ - for (i = 0; i < gfc.npart_l; i++) { - var snr = snr_l_a; - if (bval[i] >= bvl_a) { - snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a - * (bvl_b - bval[i]) / (bvl_b - bvl_a); - } - norm[i] = Math.pow(10.0, snr / 10.0); - if (gfc.numlines_l[i] > 0) { - gfc.rnumlines_l[i] = 1.0 / gfc.numlines_l[i]; - } else { - gfc.rnumlines_l[i] = 0; - } - } - gfc.s3_ll = init_s3_values(gfc.s3ind, gfc.npart_l, bval, bval_width, - norm, useOldS3); - - /* compute long block specific values, ATH and MINVAL */ - var j = 0; - for (i = 0; i < gfc.npart_l; i++) { - var x; - - /* ATH */ - x = Float.MAX_VALUE; - for (var k = 0; k < gfc.numlines_l[i]; k++, j++) { - var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE); - var level; - /* - * ATH below 100 Hz constant, not further climbing - */ - level = this.ATHformula(freq * 1000, gfp) - 20; - // scale to FFT units; returned value is in dB - level = Math.pow(10., 0.1 * level); - // convert from dB . energy - level *= gfc.numlines_l[i]; - if (x > level) - x = level; - } - gfc.ATH.cb_l[i] = x; - - /* - * MINVAL. For low freq, the strength of the masking is limited by - * minval this is an ISO MPEG1 thing, dont know if it is really - * needed - */ - /* - * FIXME: it does work to reduce low-freq problems in S53-Wind-Sax - * and lead-voice samples, but introduces some 3 kbps bit bloat too. - * TODO: Further refinement of the shape of this hack. - */ - x = -20 + bval[i] * 20 / 10; - if (x > 6) { - x = 100; - } - if (x < -15) { - x = -15; - } - x -= 8.; - gfc.minval_l[i] = (Math.pow(10.0, x / 10.) * gfc.numlines_l[i]); - } - - /************************************************************************ - * do the same things for short blocks - ************************************************************************/ - gfc.npart_s = init_numline(gfc.numlines_s, gfc.bo_s, gfc.bm_s, bval, - bval_width, gfc.mld_s, gfc.PSY.bo_s_weight, sfreq, - Encoder.BLKSIZE_s, gfc.scalefac_band.s, Encoder.BLKSIZE_s - / (2.0 * 192), Encoder.SBMAX_s); - assert(gfc.npart_s < Encoder.CBANDS); - - /* SNR formula. short block is normalized by SNR. is it still right ? */ - j = 0; - for (i = 0; i < gfc.npart_s; i++) { - var x; - var snr = snr_s_a; - if (bval[i] >= bvl_a) { - snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a - * (bvl_b - bval[i]) / (bvl_b - bvl_a); - } - norm[i] = Math.pow(10.0, snr / 10.0); - - /* ATH */ - x = Float.MAX_VALUE; - for (var k = 0; k < gfc.numlines_s[i]; k++, j++) { - var freq = sfreq * j / (1000.0 * Encoder.BLKSIZE_s); - var level; - /* freq = Min(.1,freq); */ - /* - * ATH below 100 Hz constant, not - * further climbing - */ - level = this.ATHformula(freq * 1000, gfp) - 20; - // scale to FFT units; returned value is in dB - level = Math.pow(10., 0.1 * level); - // convert from dB . energy - level *= gfc.numlines_s[i]; - if (x > level) - x = level; - } - gfc.ATH.cb_s[i] = x; - - /* - * MINVAL. For low freq, the strength of the masking is limited by - * minval this is an ISO MPEG1 thing, dont know if it is really - * needed - */ - x = (-7.0 + bval[i] * 7.0 / 12.0); - if (bval[i] > 12) { - x *= 1 + Math.log(1 + x) * 3.1; - } - if (bval[i] < 12) { - x *= 1 + Math.log(1 - x) * 2.3; - } - if (x < -15) { - x = -15; - } - x -= 8; - gfc.minval_s[i] = Math.pow(10.0, x / 10) - * gfc.numlines_s[i]; - } - - gfc.s3_ss = init_s3_values(gfc.s3ind_s, gfc.npart_s, bval, bval_width, - norm, useOldS3); - - init_mask_add_max_values(); - fft.init_fft(gfc); - - /* setup temporal masking */ - gfc.decay = Math.exp(-1.0 * LOG10 - / (temporalmask_sustain_sec * sfreq / 192.0)); - - { - var msfix; - msfix = NS_MSFIX; - if ((gfp.exp_nspsytune & 2) != 0) - msfix = 1.0; - if (Math.abs(gfp.msfix) > 0.0) - msfix = gfp.msfix; - gfp.msfix = msfix; - - /* - * spread only from npart_l bands. Normally, we use the spreading - * function to convolve from npart_l down to npart_l bands - */ - for (var b = 0; b < gfc.npart_l; b++) - if (gfc.s3ind[b][1] > gfc.npart_l - 1) - gfc.s3ind[b][1] = gfc.npart_l - 1; - } - - /* - * prepare for ATH auto adjustment: we want to decrease the ATH by 12 dB - * per second - */ - var frame_duration = (576. * gfc.mode_gr / sfreq); - gfc.ATH.decay = Math.pow(10., -12. / 10. * frame_duration); - gfc.ATH.adjust = 0.01; - /* minimum, for leading low loudness */ - gfc.ATH.adjustLimit = 1.0; - /* on lead, allow adjust up to maximum */ - - assert(gfc.bo_l[Encoder.SBMAX_l - 1] <= gfc.npart_l); - assert(gfc.bo_s[Encoder.SBMAX_s - 1] <= gfc.npart_s); - - if (gfp.ATHtype != -1) { - /* compute equal loudness weights (eql_w) */ - var freq; - var freq_inc = gfp.out_samplerate - / (Encoder.BLKSIZE); - var eql_balance = 0.0; - freq = 0.0; - for (i = 0; i < Encoder.BLKSIZE / 2; ++i) { - /* convert ATH dB to relative power (not dB) */ - /* to determine eql_w */ - freq += freq_inc; - gfc.ATH.eql_w[i] = 1. / Math.pow(10, this.ATHformula(freq, gfp) / 10); - eql_balance += gfc.ATH.eql_w[i]; - } - eql_balance = 1.0 / eql_balance; - for (i = Encoder.BLKSIZE / 2; --i >= 0;) { /* scale weights */ - gfc.ATH.eql_w[i] *= eql_balance; - } - } - { - for (var b = j = 0; b < gfc.npart_s; ++b) { - for (i = 0; i < gfc.numlines_s[b]; ++i) { - ++j; - } - } - assert(j == 129); - for (var b = j = 0; b < gfc.npart_l; ++b) { - for (i = 0; i < gfc.numlines_l[b]; ++i) { - ++j; - } - } - assert(j == 513); - } - j = 0; - for (i = 0; i < gfc.npart_l; i++) { - var freq = sfreq * (j + gfc.numlines_l[i] / 2) / (1.0 * Encoder.BLKSIZE); - gfc.mld_cb_l[i] = stereo_demask(freq); - j += gfc.numlines_l[i]; - } - for (; i < Encoder.CBANDS; ++i) { - gfc.mld_cb_l[i] = 1; - } - j = 0; - for (i = 0; i < gfc.npart_s; i++) { - var freq = sfreq * (j + gfc.numlines_s[i] / 2) / (1.0 * Encoder.BLKSIZE_s); - gfc.mld_cb_s[i] = stereo_demask(freq); - j += gfc.numlines_s[i]; - } - for (; i < Encoder.CBANDS; ++i) { - gfc.mld_cb_s[i] = 1; - } - return 0; - } - - /** - * Those ATH formulas are returning their minimum value for input = -1 - */ - function ATHformula_GB(f, value) { - /** - *
-         *  from Painter & Spanias
-         *           modified by Gabriel Bouvigne to better fit the reality
-         *           ath =    3.640 * pow(f,-0.8)
-         *           - 6.800 * exp(-0.6*pow(f-3.4,2.0))
-         *           + 6.000 * exp(-0.15*pow(f-8.7,2.0))
-         *           + 0.6* 0.001 * pow(f,4.0);
-         *
-         *
-         *           In the past LAME was using the Painter &Spanias formula.
-         *           But we had some recurrent problems with HF content.
-         *           We measured real ATH values, and found the older formula
-         *           to be inaccurate in the higher part. So we made this new
-         *           formula and this solved most of HF problematic test cases.
-         *           The tradeoff is that in VBR mode it increases a lot the
-         *           bitrate.
-         * 
- */ - - /* - * This curve can be adjusted according to the VBR scale: it adjusts - * from something close to Painter & Spanias on V9 up to Bouvigne's - * formula for V0. This way the VBR bitrate is more balanced according - * to the -V value. - */ - - // the following Hack allows to ask for the lowest value - if (f < -.3) - f = 3410; - - // convert to khz - f /= 1000; - f = Math.max(0.1, f); - var ath = 3.640 * Math.pow(f, -0.8) - 6.800 - * Math.exp(-0.6 * Math.pow(f - 3.4, 2.0)) + 6.000 - * Math.exp(-0.15 * Math.pow(f - 8.7, 2.0)) - + (0.6 + 0.04 * value) * 0.001 * Math.pow(f, 4.0); - return ath; - } - - this.ATHformula = function (f, gfp) { - var ath; - switch (gfp.ATHtype) { - case 0: - ath = ATHformula_GB(f, 9); - break; - case 1: - // over sensitive, should probably be removed - ath = ATHformula_GB(f, -1); - break; - case 2: - ath = ATHformula_GB(f, 0); - break; - case 3: - // modification of GB formula by Roel - ath = ATHformula_GB(f, 1) + 6; - break; - case 4: - ath = ATHformula_GB(f, gfp.ATHcurve); - break; - default: - ath = ATHformula_GB(f, 0); - break; - } - return ath; - } - -} - -module.exports = PsyModel; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Quantize.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Quantize.js deleted file mode 100644 index f7b0519a4..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Quantize.js +++ /dev/null @@ -1,1498 +0,0 @@ -/* - * MP3 quantization - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 1999-2003 Takehiro Tominaga - * Copyright (c) 2000-2007 Robert Hegemann - * Copyright (c) 2001-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Quantize.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -//import java.util.Arrays; -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var VBRQuantize = require('./VBRQuantize.js'); -var CalcNoiseResult = require('./CalcNoiseResult.js'); -var CalcNoiseData = require('./CalcNoiseData.js'); -var Encoder = require('./Encoder.js'); -var GrInfo = require('./GrInfo.js'); -var L3Side = require('./L3Side.js'); - -function Quantize() { - var bs; - this.rv = null; - var rv; - this.qupvt = null; - var qupvt; - - var vbr = new VBRQuantize(); - var tk; - - this.setModules = function (_bs, _rv, _qupvt, _tk) { - bs = _bs; - rv = _rv; - this.rv = _rv; - qupvt = _qupvt; - this.qupvt = _qupvt; - tk = _tk; - vbr.setModules(qupvt, tk); - } - - /** - * convert from L/R <. Mid/Side - */ - this.ms_convert = function (l3_side, gr) { - for (var i = 0; i < 576; ++i) { - var l = l3_side.tt[gr][0].xr[i]; - var r = l3_side.tt[gr][1].xr[i]; - l3_side.tt[gr][0].xr[i] = (l + r) * (Util.SQRT2 * 0.5); - l3_side.tt[gr][1].xr[i] = (l - r) * (Util.SQRT2 * 0.5); - } - }; - - /** - * mt 6/99 - * - * initializes cod_info, scalefac and xrpow - * - * returns 0 if all energies in xr are zero, else 1 - */ - function init_xrpow_core(cod_info, xrpow, upper, sum) { - sum = 0; - for (var i = 0; i <= upper; ++i) { - var tmp = Math.abs(cod_info.xr[i]); - sum += tmp; - xrpow[i] = Math.sqrt(tmp * Math.sqrt(tmp)); - - if (xrpow[i] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[i]; - } - return sum; - } - - this.init_xrpow = function (gfc, cod_info, xrpow) { - var sum = 0; - var upper = 0 | cod_info.max_nonzero_coeff; - - assert(xrpow != null); - cod_info.xrpow_max = 0; - - /* - * check if there is some energy we have to quantize and calculate xrpow - * matching our fresh scalefactors - */ - assert(0 <= upper && upper <= 575); - - Arrays.fill(xrpow, upper, 576, 0); - - sum = init_xrpow_core(cod_info, xrpow, upper, sum); - - /* - * return 1 if we have something to quantize, else 0 - */ - if (sum > 1E-20) { - var j = 0; - if ((gfc.substep_shaping & 2) != 0) - j = 1; - - for (var i = 0; i < cod_info.psymax; i++) - gfc.pseudohalf[i] = j; - - return true; - } - - Arrays.fill(cod_info.l3_enc, 0, 576, 0); - return false; - } - - /** - * Gabriel Bouvigne feb/apr 2003
- * Analog silence detection in partitionned sfb21 or sfb12 for short blocks - * - * From top to bottom of sfb, changes to 0 coeffs which are below ath. It - * stops on the first coeff higher than ath. - */ - function psfb21_analogsilence(gfc, cod_info) { - var ath = gfc.ATH; - var xr = cod_info.xr; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - /* NORM, START or STOP type, but not SHORT blocks */ - var stop = false; - for (var gsfb = Encoder.PSFB21 - 1; gsfb >= 0 && !stop; gsfb--) { - var start = gfc.scalefac_band.psfb21[gsfb]; - var end = gfc.scalefac_band.psfb21[gsfb + 1]; - var ath21 = qupvt.athAdjust(ath.adjust, ath.psfb21[gsfb], - ath.floor); - - if (gfc.nsPsy.longfact[21] > 1e-12) - ath21 *= gfc.nsPsy.longfact[21]; - - for (var j = end - 1; j >= start; j--) { - if (Math.abs(xr[j]) < ath21) - xr[j] = 0; - else { - stop = true; - break; - } - } - } - } else { - /* note: short blocks coeffs are reordered */ - for (var block = 0; block < 3; block++) { - var stop = false; - for (var gsfb = Encoder.PSFB12 - 1; gsfb >= 0 && !stop; gsfb--) { - var start = gfc.scalefac_band.s[12] - * 3 - + (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]) - * block - + (gfc.scalefac_band.psfb12[gsfb] - gfc.scalefac_band.psfb12[0]); - var end = start - + (gfc.scalefac_band.psfb12[gsfb + 1] - gfc.scalefac_band.psfb12[gsfb]); - var ath12 = qupvt.athAdjust(ath.adjust, ath.psfb12[gsfb], - ath.floor); - - if (gfc.nsPsy.shortfact[12] > 1e-12) - ath12 *= gfc.nsPsy.shortfact[12]; - - for (var j = end - 1; j >= start; j--) { - if (Math.abs(xr[j]) < ath12) - xr[j] = 0; - else { - stop = true; - break; - } - } - } - } - } - - } - - this.init_outer_loop = function (gfc, cod_info) { - /* - * initialize fresh cod_info - */ - cod_info.part2_3_length = 0; - cod_info.big_values = 0; - cod_info.count1 = 0; - cod_info.global_gain = 210; - cod_info.scalefac_compress = 0; - /* mixed_block_flag, block_type was set in psymodel.c */ - cod_info.table_select[0] = 0; - cod_info.table_select[1] = 0; - cod_info.table_select[2] = 0; - cod_info.subblock_gain[0] = 0; - cod_info.subblock_gain[1] = 0; - cod_info.subblock_gain[2] = 0; - cod_info.subblock_gain[3] = 0; - /* this one is always 0 */ - cod_info.region0_count = 0; - cod_info.region1_count = 0; - cod_info.preflag = 0; - cod_info.scalefac_scale = 0; - cod_info.count1table_select = 0; - cod_info.part2_length = 0; - cod_info.sfb_lmax = Encoder.SBPSY_l; - cod_info.sfb_smin = Encoder.SBPSY_s; - cod_info.psy_lmax = gfc.sfb21_extra ? Encoder.SBMAX_l : Encoder.SBPSY_l; - cod_info.psymax = cod_info.psy_lmax; - cod_info.sfbmax = cod_info.sfb_lmax; - cod_info.sfbdivide = 11; - for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - cod_info.width[sfb] = gfc.scalefac_band.l[sfb + 1] - - gfc.scalefac_band.l[sfb]; - /* which is always 0. */ - cod_info.window[sfb] = 3; - } - if (cod_info.block_type == Encoder.SHORT_TYPE) { - var ixwork = new_float(576); - - cod_info.sfb_smin = 0; - cod_info.sfb_lmax = 0; - if (cod_info.mixed_block_flag != 0) { - /* - * MPEG-1: sfbs 0-7 long block, 3-12 short blocks MPEG-2(.5): - * sfbs 0-5 long block, 3-12 short blocks - */ - cod_info.sfb_smin = 3; - cod_info.sfb_lmax = gfc.mode_gr * 2 + 4; - } - cod_info.psymax = cod_info.sfb_lmax - + 3 - * ((gfc.sfb21_extra ? Encoder.SBMAX_s : Encoder.SBPSY_s) - cod_info.sfb_smin); - cod_info.sfbmax = cod_info.sfb_lmax + 3 - * (Encoder.SBPSY_s - cod_info.sfb_smin); - cod_info.sfbdivide = cod_info.sfbmax - 18; - cod_info.psy_lmax = cod_info.sfb_lmax; - /* re-order the short blocks, for more efficient encoding below */ - /* By Takehiro TOMINAGA */ - /* - * Within each scalefactor band, data is given for successive time - * windows, beginning with window 0 and ending with window 2. Within - * each window, the quantized values are then arranged in order of - * increasing frequency... - */ - var ix = gfc.scalefac_band.l[cod_info.sfb_lmax]; - System.arraycopy(cod_info.xr, 0, ixwork, 0, 576); - for (var sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - var start = gfc.scalefac_band.s[sfb]; - var end = gfc.scalefac_band.s[sfb + 1]; - for (var window = 0; window < 3; window++) { - for (var l = start; l < end; l++) { - cod_info.xr[ix++] = ixwork[3 * l + window]; - } - } - } - - var j = cod_info.sfb_lmax; - for (var sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - cod_info.width[j] = cod_info.width[j + 1] = cod_info.width[j + 2] = gfc.scalefac_band.s[sfb + 1] - - gfc.scalefac_band.s[sfb]; - cod_info.window[j] = 0; - cod_info.window[j + 1] = 1; - cod_info.window[j + 2] = 2; - j += 3; - } - } - - cod_info.count1bits = 0; - cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[0][0]; - cod_info.slen[0] = 0; - cod_info.slen[1] = 0; - cod_info.slen[2] = 0; - cod_info.slen[3] = 0; - - cod_info.max_nonzero_coeff = 575; - - /* - * fresh scalefactors are all zero - */ - Arrays.fill(cod_info.scalefac, 0); - - psfb21_analogsilence(gfc, cod_info); - }; - - function BinSearchDirection(ordinal) { - this.ordinal = ordinal; - } - - BinSearchDirection.BINSEARCH_NONE = new BinSearchDirection(0); - BinSearchDirection.BINSEARCH_UP = new BinSearchDirection(1); - BinSearchDirection.BINSEARCH_DOWN = new BinSearchDirection(2); - - /** - * author/date?? - * - * binary step size search used by outer_loop to get a quantizer step size - * to start with - */ - function bin_search_StepSize(gfc, cod_info, desired_rate, ch, xrpow) { - var nBits; - var CurrentStep = gfc.CurrentStep[ch]; - var flagGoneOver = false; - var start = gfc.OldValue[ch]; - var Direction = BinSearchDirection.BINSEARCH_NONE; - cod_info.global_gain = start; - desired_rate -= cod_info.part2_length; - - assert(CurrentStep != 0); - for (; ;) { - var step; - nBits = tk.count_bits(gfc, xrpow, cod_info, null); - - if (CurrentStep == 1 || nBits == desired_rate) - break; - /* nothing to adjust anymore */ - - if (nBits > desired_rate) { - /* increase Quantize_StepSize */ - if (Direction == BinSearchDirection.BINSEARCH_DOWN) - flagGoneOver = true; - - if (flagGoneOver) - CurrentStep /= 2; - Direction = BinSearchDirection.BINSEARCH_UP; - step = CurrentStep; - } else { - /* decrease Quantize_StepSize */ - if (Direction == BinSearchDirection.BINSEARCH_UP) - flagGoneOver = true; - - if (flagGoneOver) - CurrentStep /= 2; - Direction = BinSearchDirection.BINSEARCH_DOWN; - step = -CurrentStep; - } - cod_info.global_gain += step; - if (cod_info.global_gain < 0) { - cod_info.global_gain = 0; - flagGoneOver = true; - } - if (cod_info.global_gain > 255) { - cod_info.global_gain = 255; - flagGoneOver = true; - } - } - - assert(cod_info.global_gain >= 0); - assert(cod_info.global_gain < 256); - - while (nBits > desired_rate && cod_info.global_gain < 255) { - cod_info.global_gain++; - nBits = tk.count_bits(gfc, xrpow, cod_info, null); - } - gfc.CurrentStep[ch] = (start - cod_info.global_gain >= 4) ? 4 : 2; - gfc.OldValue[ch] = cod_info.global_gain; - cod_info.part2_3_length = nBits; - return nBits; - } - - this.trancate_smallspectrums = function (gfc, gi, l3_xmin, work) { - var distort = new_float(L3Side.SFBMAX); - - if ((0 == (gfc.substep_shaping & 4) && gi.block_type == Encoder.SHORT_TYPE) - || (gfc.substep_shaping & 0x80) != 0) - return; - qupvt.calc_noise(gi, l3_xmin, distort, new CalcNoiseResult(), null); - for (var j = 0; j < 576; j++) { - var xr = 0.0; - if (gi.l3_enc[j] != 0) - xr = Math.abs(gi.xr[j]); - work[j] = xr; - } - - var j = 0; - var sfb = 8; - if (gi.block_type == Encoder.SHORT_TYPE) - sfb = 6; - do { - var allowedNoise, trancateThreshold; - var nsame, start; - - var width = gi.width[sfb]; - j += width; - if (distort[sfb] >= 1.0) - continue; - - Arrays.sort(work, j - width, width); - if (BitStream.EQ(work[j - 1], 0.0)) - continue; - /* all zero sfb */ - - allowedNoise = (1.0 - distort[sfb]) * l3_xmin[sfb]; - trancateThreshold = 0.0; - start = 0; - do { - var noise; - for (nsame = 1; start + nsame < width; nsame++) - if (BitStream.NEQ(work[start + j - width], work[start + j - + nsame - width])) - break; - - noise = work[start + j - width] * work[start + j - width] - * nsame; - if (allowedNoise < noise) { - if (start != 0) - trancateThreshold = work[start + j - width - 1]; - break; - } - allowedNoise -= noise; - start += nsame; - } while (start < width); - if (BitStream.EQ(trancateThreshold, 0.0)) - continue; - - do { - if (Math.abs(gi.xr[j - width]) <= trancateThreshold) - gi.l3_enc[j - width] = 0; - } while (--width > 0); - } while (++sfb < gi.psymax); - - gi.part2_3_length = tk.noquant_count_bits(gfc, gi, null); - }; - - /** - * author/date?? - * - * Function: Returns zero if there is a scalefac which has not been - * amplified. Otherwise it returns one. - */ - function loop_break(cod_info) { - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) - if (cod_info.scalefac[sfb] - + cod_info.subblock_gain[cod_info.window[sfb]] == 0) - return false; - - return true; - } - - /* mt 5/99: Function: Improved calc_noise for a single channel */ - - function penalties(noise) { - return Util.FAST_LOG10((0.368 + 0.632 * noise * noise * noise)); - } - - /** - * author/date?? - * - * several different codes to decide which quantization is better - */ - function get_klemm_noise(distort, gi) { - var klemm_noise = 1E-37; - for (var sfb = 0; sfb < gi.psymax; sfb++) - klemm_noise += penalties(distort[sfb]); - - return Math.max(1e-20, klemm_noise); - } - - function quant_compare(quant_comp, best, calc, gi, distort) { - /** - * noise is given in decibels (dB) relative to masking thesholds.
- * - * over_noise: ??? (the previous comment is fully wrong)
- * tot_noise: ??? (the previous comment is fully wrong)
- * max_noise: max quantization noise - */ - var better; - - switch (quant_comp) { - default: - case 9: - { - if (best.over_count > 0) { - /* there are distorted sfb */ - better = calc.over_SSD <= best.over_SSD; - if (calc.over_SSD == best.over_SSD) - better = calc.bits < best.bits; - } else { - /* no distorted sfb */ - better = ((calc.max_noise < 0) && ((calc.max_noise * 10 + calc.bits) <= (best.max_noise * 10 + best.bits))); - } - break; - } - - case 0: - better = calc.over_count < best.over_count - || (calc.over_count == best.over_count && calc.over_noise < best.over_noise) - || (calc.over_count == best.over_count - && BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise); - break; - - case 8: - calc.max_noise = get_klemm_noise(distort, gi); - //$FALL-THROUGH$ - case 1: - better = calc.max_noise < best.max_noise; - break; - case 2: - better = calc.tot_noise < best.tot_noise; - break; - case 3: - better = (calc.tot_noise < best.tot_noise) - && (calc.max_noise < best.max_noise); - break; - case 4: - better = (calc.max_noise <= 0.0 && best.max_noise > 0.2) - || (calc.max_noise <= 0.0 && best.max_noise < 0.0 - && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise) - || (calc.max_noise <= 0.0 && best.max_noise > 0.0 - && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise - + best.over_noise) - || (calc.max_noise > 0.0 && best.max_noise > -0.05 - && best.max_noise > calc.max_noise - 0.1 && calc.tot_noise - + calc.over_noise < best.tot_noise - + best.over_noise) - || (calc.max_noise > 0.0 && best.max_noise > -0.1 - && best.max_noise > calc.max_noise - 0.15 && calc.tot_noise - + calc.over_noise + calc.over_noise < best.tot_noise - + best.over_noise + best.over_noise); - break; - case 5: - better = calc.over_noise < best.over_noise - || (BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise); - break; - case 6: - better = calc.over_noise < best.over_noise - || (BitStream.EQ(calc.over_noise, best.over_noise) && (calc.max_noise < best.max_noise || (BitStream - .EQ(calc.max_noise, best.max_noise) && calc.tot_noise <= best.tot_noise))); - break; - case 7: - better = calc.over_count < best.over_count - || calc.over_noise < best.over_noise; - break; - } - - if (best.over_count == 0) { - /* - * If no distorted bands, only use this quantization if it is - * better, and if it uses less bits. Unfortunately, part2_3_length - * is sometimes a poor estimator of the final size at low bitrates. - */ - better = better && calc.bits < best.bits; - } - - return better; - } - - /** - * author/date?? - * - *
-     *  Amplify the scalefactor bands that violate the masking threshold.
-     *  See ISO 11172-3 Section C.1.5.4.3.5
-     *
-     *  distort[] = noise/masking
-     *  distort[] > 1   ==> noise is not masked
-     *  distort[] < 1   ==> noise is masked
-     *  max_dist = maximum value of distort[]
-     *
-     *  Three algorithms:
-     *  noise_shaping_amp
-     *        0             Amplify all bands with distort[]>1.
-     *
-     *        1             Amplify all bands with distort[] >= max_dist^(.5);
-     *                     ( 50% in the db scale)
-     *
-     *        2             Amplify first band with distort[] >= max_dist;
-     *
-     *
-     *  For algorithms 0 and 1, if max_dist < 1, then amplify all bands
-     *  with distort[] >= .95*max_dist.  This is to make sure we always
-     *  amplify at least one band.
-     * 
- */ - function amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine) { - var gfc = gfp.internal_flags; - var ifqstep34; - - if (cod_info.scalefac_scale == 0) { - ifqstep34 = 1.29683955465100964055; - /* 2**(.75*.5) */ - } else { - ifqstep34 = 1.68179283050742922612; - /* 2**(.75*1) */ - } - - /* compute maximum value of distort[] */ - var trigger = 0; - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) { - if (trigger < distort[sfb]) - trigger = distort[sfb]; - } - - var noise_shaping_amp = gfc.noise_shaping_amp; - if (noise_shaping_amp == 3) { - if (bRefine) - noise_shaping_amp = 2; - else - noise_shaping_amp = 1; - } - switch (noise_shaping_amp) { - case 2: - /* amplify exactly 1 band */ - break; - - case 1: - /* amplify bands within 50% of max (on db scale) */ - if (trigger > 1.0) - trigger = Math.pow(trigger, .5); - else - trigger *= .95; - break; - - case 0: - default: - /* ISO algorithm. amplify all bands with distort>1 */ - if (trigger > 1.0) - trigger = 1.0; - else - trigger *= .95; - break; - } - - var j = 0; - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) { - var width = cod_info.width[sfb]; - var l; - j += width; - if (distort[sfb] < trigger) - continue; - - if ((gfc.substep_shaping & 2) != 0) { - gfc.pseudohalf[sfb] = (0 == gfc.pseudohalf[sfb]) ? 1 : 0; - if (0 == gfc.pseudohalf[sfb] && gfc.noise_shaping_amp == 2) - return; - } - cod_info.scalefac[sfb]++; - for (l = -width; l < 0; l++) { - xrpow[j + l] *= ifqstep34; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - - if (gfc.noise_shaping_amp == 2) - return; - } - } - - /** - * Takehiro Tominaga 2000-xx-xx - * - * turns on scalefac scale and adjusts scalefactors - */ - function inc_scalefac_scale(cod_info, xrpow) { - var ifqstep34 = 1.29683955465100964055; - - var j = 0; - for (var sfb = 0; sfb < cod_info.sfbmax; sfb++) { - var width = cod_info.width[sfb]; - var s = cod_info.scalefac[sfb]; - if (cod_info.preflag != 0) - s += qupvt.pretab[sfb]; - j += width; - if ((s & 1) != 0) { - s++; - for (var l = -width; l < 0; l++) { - xrpow[j + l] *= ifqstep34; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - } - cod_info.scalefac[sfb] = s >> 1; - } - cod_info.preflag = 0; - cod_info.scalefac_scale = 1; - } - - /** - * Takehiro Tominaga 2000-xx-xx - * - * increases the subblock gain and adjusts scalefactors - */ - function inc_subblock_gain(gfc, cod_info, xrpow) { - var sfb; - var scalefac = cod_info.scalefac; - - /* subbloc_gain can't do anything in the long block region */ - for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) { - if (scalefac[sfb] >= 16) - return true; - } - - for (var window = 0; window < 3; window++) { - var s1 = 0; - var s2 = 0; - - for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbdivide; sfb += 3) { - if (s1 < scalefac[sfb]) - s1 = scalefac[sfb]; - } - for (; sfb < cod_info.sfbmax; sfb += 3) { - if (s2 < scalefac[sfb]) - s2 = scalefac[sfb]; - } - - if (s1 < 16 && s2 < 8) - continue; - - if (cod_info.subblock_gain[window] >= 7) - return true; - - /* - * even though there is no scalefactor for sfb12 subblock gain - * affects upper frequencies too, that's why we have to go up to - * SBMAX_s - */ - cod_info.subblock_gain[window]++; - var j = gfc.scalefac_band.l[cod_info.sfb_lmax]; - for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbmax; sfb += 3) { - var amp; - var width = cod_info.width[sfb]; - var s = scalefac[sfb]; - assert(s >= 0); - s = s - (4 >> cod_info.scalefac_scale); - if (s >= 0) { - scalefac[sfb] = s; - j += width * 3; - continue; - } - - scalefac[sfb] = 0; - { - var gain = 210 + (s << (cod_info.scalefac_scale + 1)); - amp = qupvt.IPOW20(gain); - } - j += width * (window + 1); - for (var l = -width; l < 0; l++) { - xrpow[j + l] *= amp; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - j += width * (3 - window - 1); - } - - { - var amp = qupvt.IPOW20(202); - j += cod_info.width[sfb] * (window + 1); - for (var l = -cod_info.width[sfb]; l < 0; l++) { - xrpow[j + l] *= amp; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - } - } - return false; - } - - /** - *
-     *  Takehiro Tominaga /date??
-     *  Robert Hegemann 2000-09-06: made a function of it
-     *
-     *  amplifies scalefactor bands,
-     *   - if all are already amplified returns 0
-     *   - if some bands are amplified too much:
-     *      * try to increase scalefac_scale
-     *      * if already scalefac_scale was set
-     *          try on short blocks to increase subblock gain
-     * 
- */ - function balance_noise(gfp, cod_info, distort, xrpow, bRefine) { - var gfc = gfp.internal_flags; - - amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine); - - /* - * check to make sure we have not amplified too much loop_break returns - * 0 if there is an unamplified scalefac scale_bitcount returns 0 if no - * scalefactors are too large - */ - - var status = loop_break(cod_info); - - if (status) - return false; - /* all bands amplified */ - - /* - * not all scalefactors have been amplified. so these scalefacs are - * possibly valid. encode them: - */ - if (gfc.mode_gr == 2) - status = tk.scale_bitcount(cod_info); - else - status = tk.scale_bitcount_lsf(gfc, cod_info); - - if (!status) - return true; - /* amplified some bands not exceeding limits */ - - /* - * some scalefactors are too large. lets try setting scalefac_scale=1 - */ - if (gfc.noise_shaping > 1) { - Arrays.fill(gfc.pseudohalf, 0); - if (0 == cod_info.scalefac_scale) { - inc_scalefac_scale(cod_info, xrpow); - status = false; - } else { - if (cod_info.block_type == Encoder.SHORT_TYPE - && gfc.subblock_gain > 0) { - status = (inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info)); - } - } - } - - if (!status) { - if (gfc.mode_gr == 2) - status = tk.scale_bitcount(cod_info); - else - status = tk.scale_bitcount_lsf(gfc, cod_info); - } - return !status; - } - - /** - *
-     *  Function: The outer iteration loop controls the masking conditions
-     *  of all scalefactorbands. It computes the best scalefac and
-     *  global gain. This module calls the inner iteration loop
-     *
-     *  mt 5/99 completely rewritten to allow for bit reservoir control,
-     *  mid/side channels with L/R or mid/side masking thresholds,
-     *  and chooses best quantization instead of last quantization when
-     *  no distortion free quantization can be found.
-     *
-     *  added VBR support mt 5/99
-     *
-     *  some code shuffle rh 9/00
-     * 
- * - * @param l3_xmin - * allowed distortion - * @param xrpow - * coloured magnitudes of spectral - * @param targ_bits - * maximum allowed bits - */ - this.outer_loop = function (gfp, cod_info, l3_xmin, xrpow, ch, targ_bits) { - var gfc = gfp.internal_flags; - var cod_info_w = new GrInfo(); - var save_xrpow = new_float(576); - var distort = new_float(L3Side.SFBMAX); - var best_noise_info = new CalcNoiseResult(); - var better; - var prev_noise = new CalcNoiseData(); - var best_part2_3_length = 9999999; - var bEndOfSearch = false; - var bRefine = false; - var best_ggain_pass1 = 0; - - bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow); - - if (0 == gfc.noise_shaping) - /* fast mode, no noise shaping, we are ready */ - return 100; - /* default noise_info.over_count */ - - /* compute the distortion in this quantization */ - /* coefficients and thresholds both l/r (or both mid/side) */ - qupvt.calc_noise(cod_info, l3_xmin, distort, best_noise_info, - prev_noise); - best_noise_info.bits = cod_info.part2_3_length; - - cod_info_w.assign(cod_info); - var age = 0; - System.arraycopy(xrpow, 0, save_xrpow, 0, 576); - - while (!bEndOfSearch) { - /* BEGIN MAIN LOOP */ - do { - var noise_info = new CalcNoiseResult(); - var search_limit; - var maxggain = 255; - - /* - * When quantization with no distorted bands is found, allow up - * to X new unsuccesful tries in serial. This gives us more - * possibilities for different quant_compare modes. Much more - * than 3 makes not a big difference, it is only slower. - */ - - if ((gfc.substep_shaping & 2) != 0) { - search_limit = 20; - } else { - search_limit = 3; - } - - /* - * Check if the last scalefactor band is distorted. in VBR mode - * we can't get rid of the distortion, so quit now and VBR mode - * will try again with more bits. (makes a 10% speed increase, - * the files I tested were binary identical, 2000/05/20 Robert - * Hegemann) distort[] > 1 means noise > allowed noise - */ - if (gfc.sfb21_extra) { - if (distort[cod_info_w.sfbmax] > 1.0) - break; - if (cod_info_w.block_type == Encoder.SHORT_TYPE - && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0)) - break; - } - - /* try a new scalefactor conbination on cod_info_w */ - if (!balance_noise(gfp, cod_info_w, distort, xrpow, bRefine)) - break; - if (cod_info_w.scalefac_scale != 0) - maxggain = 254; - - /* - * inner_loop starts with the initial quantization step computed - * above and slowly increases until the bits < huff_bits. Thus - * it is important not to start with too large of an inital - * quantization step. Too small is ok, but inner_loop will take - * longer - */ - var huff_bits = targ_bits - cod_info_w.part2_length; - if (huff_bits <= 0) - break; - - /* - * increase quantizer stepsize until needed bits are below - * maximum - */ - while ((cod_info_w.part2_3_length = tk.count_bits(gfc, xrpow, - cod_info_w, prev_noise)) > huff_bits - && cod_info_w.global_gain <= maxggain) - cod_info_w.global_gain++; - - if (cod_info_w.global_gain > maxggain) - break; - - if (best_noise_info.over_count == 0) { - - while ((cod_info_w.part2_3_length = tk.count_bits(gfc, - xrpow, cod_info_w, prev_noise)) > best_part2_3_length - && cod_info_w.global_gain <= maxggain) - cod_info_w.global_gain++; - - if (cod_info_w.global_gain > maxggain) - break; - } - - /* compute the distortion in this quantization */ - qupvt.calc_noise(cod_info_w, l3_xmin, distort, noise_info, - prev_noise); - noise_info.bits = cod_info_w.part2_3_length; - - /* - * check if this quantization is better than our saved - * quantization - */ - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - better = gfp.quant_comp; - } else - better = gfp.quant_comp_short; - - better = quant_compare(better, best_noise_info, noise_info, - cod_info_w, distort) ? 1 : 0; - - /* save data so we can restore this quantization later */ - if (better != 0) { - best_part2_3_length = cod_info.part2_3_length; - best_noise_info = noise_info; - cod_info.assign(cod_info_w); - age = 0; - /* save data so we can restore this quantization later */ - /* store for later reuse */ - System.arraycopy(xrpow, 0, save_xrpow, 0, 576); - } else { - /* early stop? */ - if (gfc.full_outer_loop == 0) { - if (++age > search_limit - && best_noise_info.over_count == 0) - break; - if ((gfc.noise_shaping_amp == 3) && bRefine && age > 30) - break; - if ((gfc.noise_shaping_amp == 3) - && bRefine - && (cod_info_w.global_gain - best_ggain_pass1) > 15) - break; - } - } - } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255); - - if (gfc.noise_shaping_amp == 3) { - if (!bRefine) { - /* refine search */ - cod_info_w.assign(cod_info); - System.arraycopy(save_xrpow, 0, xrpow, 0, 576); - age = 0; - best_ggain_pass1 = cod_info_w.global_gain; - - bRefine = true; - } else { - /* search already refined, stop */ - bEndOfSearch = true; - } - - } else { - bEndOfSearch = true; - } - } - - assert((cod_info.global_gain + cod_info.scalefac_scale) <= 255); - /* - * finish up - */ - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - /* restore for reuse on next try */ - System.arraycopy(save_xrpow, 0, xrpow, 0, 576); - /* - * do the 'substep shaping' - */ - else if ((gfc.substep_shaping & 1) != 0) - trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow); - - return best_noise_info.over_count; - } - - /** - * Robert Hegemann 2000-09-06 - * - * update reservoir status after FINAL quantization/bitrate - */ - this.iteration_finish_one = function (gfc, gr, ch) { - var l3_side = gfc.l3_side; - var cod_info = l3_side.tt[gr][ch]; - - /* - * try some better scalefac storage - */ - tk.best_scalefac_store(gfc, gr, ch, l3_side); - - /* - * best huffman_divide may save some bits too - */ - if (gfc.use_best_huffman == 1) - tk.best_huffman_divide(gfc, cod_info); - - /* - * update reservoir status after FINAL quantization/bitrate - */ - rv.ResvAdjust(gfc, cod_info); - }; - - /** - * - * 2000-09-04 Robert Hegemann - * - * @param l3_xmin - * allowed distortion of the scalefactor - * @param xrpow - * coloured magnitudes of spectral values - */ - this.VBR_encode_granule = function (gfp, cod_info, l3_xmin, xrpow, ch, min_bits, max_bits) { - var gfc = gfp.internal_flags; - var bst_cod_info = new GrInfo(); - var bst_xrpow = new_float(576); - var Max_bits = max_bits; - var real_bits = max_bits + 1; - var this_bits = (max_bits + min_bits) / 2; - var dbits, over, found = 0; - var sfb21_extra = gfc.sfb21_extra; - - assert(Max_bits <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - Arrays.fill(bst_cod_info.l3_enc, 0); - - /* - * search within round about 40 bits of optimal - */ - do { - assert(this_bits >= min_bits); - assert(this_bits <= max_bits); - assert(min_bits <= max_bits); - - if (this_bits > Max_bits - 42) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = sfb21_extra; - - over = outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, this_bits); - - /* - * is quantization as good as we are looking for ? in this case: is - * no scalefactor band distorted? - */ - if (over <= 0) { - found = 1; - /* - * now we know it can be done with "real_bits" and maybe we can - * skip some iterations - */ - real_bits = cod_info.part2_3_length; - - /* - * store best quantization so far - */ - bst_cod_info.assign(cod_info); - System.arraycopy(xrpow, 0, bst_xrpow, 0, 576); - - /* - * try with fewer bits - */ - max_bits = real_bits - 32; - dbits = max_bits - min_bits; - this_bits = (max_bits + min_bits) / 2; - } else { - /* - * try with more bits - */ - min_bits = this_bits + 32; - dbits = max_bits - min_bits; - this_bits = (max_bits + min_bits) / 2; - - if (found != 0) { - found = 2; - /* - * start again with best quantization so far - */ - cod_info.assign(bst_cod_info); - System.arraycopy(bst_xrpow, 0, xrpow, 0, 576); - } - } - } while (dbits > 12); - - gfc.sfb21_extra = sfb21_extra; - - /* - * found=0 => nothing found, use last one found=1 => we just found the - * best and left the loop found=2 => we restored a good one and have now - * l3_enc to restore too - */ - if (found == 2) { - System.arraycopy(bst_cod_info.l3_enc, 0, cod_info.l3_enc, 0, 576); - } - assert(cod_info.part2_3_length <= Max_bits); - } - - /** - * Robert Hegemann 2000-09-05 - * - * calculates * how many bits are available for analog silent granules * how - * many bits to use for the lowest allowed bitrate * how many bits each - * bitrate would provide - */ - this.get_framebits = function (gfp, frameBits) { - var gfc = gfp.internal_flags; - - /* - * always use at least this many bits per granule per channel unless we - * detect analog silence, see below - */ - gfc.bitrate_index = gfc.VBR_min_bitrate; - var bitsPerFrame = bs.getframebits(gfp); - - /* - * bits for analog silence - */ - gfc.bitrate_index = 1; - bitsPerFrame = bs.getframebits(gfp); - - for (var i = 1; i <= gfc.VBR_max_bitrate; i++) { - gfc.bitrate_index = i; - var mb = new MeanBits(bitsPerFrame); - frameBits[i] = rv.ResvFrameBegin(gfp, mb); - bitsPerFrame = mb.bits; - } - }; - - /* RH: this one needs to be overhauled sometime */ - - /** - *
-     *  2000-09-04 Robert Hegemann
-     *
-     *  * converts LR to MS coding when necessary
-     *  * calculates allowed/adjusted quantization noise amounts
-     *  * detects analog silent frames
-     *
-     *  some remarks:
-     *  - lower masking depending on Quality setting
-     *  - quality control together with adjusted ATH MDCT scaling
-     *    on lower quality setting allocate more noise from
-     *    ATH masking, and on higher quality setting allocate
-     *    less noise from ATH masking.
-     *  - experiments show that going more than 2dB over GPSYCHO's
-     *    limits ends up in very annoying artefacts
-     * 
- */ - this.VBR_old_prepare = function (gfp, pe, ms_ener_ratio, ratio, l3_xmin, frameBits, min_bits, - max_bits, bands) { - var gfc = gfp.internal_flags; - - var masking_lower_db, adjust = 0.0; - var analog_silence = 1; - var bits = 0; - - gfc.bitrate_index = gfc.VBR_max_bitrate; - var avg = rv.ResvFrameBegin(gfp, new MeanBits(0)) / gfc.mode_gr; - - get_framebits(gfp, frameBits); - - for (var gr = 0; gr < gfc.mode_gr; gr++) { - var mxb = qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0); - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - ms_convert(gfc.l3_side, gr); - qupvt.reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb); - } - for (var ch = 0; ch < gfc.channels_out; ++ch) { - var cod_info = gfc.l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 1.28 / (1 + Math - .exp(3.5 - pe[gr][ch] / 300.)) - 0.05; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 2.56 / (1 + Math - .exp(3.5 - pe[gr][ch] / 300.)) - 0.14; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = Math.pow(10.0, - masking_lower_db * 0.1); - - init_outer_loop(gfc, cod_info); - bands[gr][ch] = qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin[gr][ch]); - if (bands[gr][ch] != 0) - analog_silence = 0; - - min_bits[gr][ch] = 126; - - bits += max_bits[gr][ch]; - } - } - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - if (bits > frameBits[gfc.VBR_max_bitrate]) { - max_bits[gr][ch] *= frameBits[gfc.VBR_max_bitrate]; - max_bits[gr][ch] /= bits; - } - if (min_bits[gr][ch] > max_bits[gr][ch]) - min_bits[gr][ch] = max_bits[gr][ch]; - - } - /* for ch */ - } - /* for gr */ - - return analog_silence; - }; - - this.bitpressure_strategy = function (gfc, l3_xmin, min_bits, max_bits) { - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - var gi = gfc.l3_side.tt[gr][ch]; - var pxmin = l3_xmin[gr][ch]; - var pxminPos = 0; - for (var sfb = 0; sfb < gi.psy_lmax; sfb++) - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_l / Encoder.SBMAX_l; - - if (gi.block_type == Encoder.SHORT_TYPE) { - for (var sfb = gi.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - } - } - max_bits[gr][ch] = 0 | Math.max(min_bits[gr][ch], - 0.9 * max_bits[gr][ch]); - } - } - }; - - this.VBR_new_prepare = function (gfp, pe, ratio, l3_xmin, frameBits, max_bits) { - var gfc = gfp.internal_flags; - - var analog_silence = 1; - var avg = 0, bits = 0; - var maximum_framebits; - - if (!gfp.free_format) { - gfc.bitrate_index = gfc.VBR_max_bitrate; - - var mb = new MeanBits(avg); - rv.ResvFrameBegin(gfp, mb); - avg = mb.bits; - - get_framebits(gfp, frameBits); - maximum_framebits = frameBits[gfc.VBR_max_bitrate]; - } else { - gfc.bitrate_index = 0; - var mb = new MeanBits(avg); - maximum_framebits = rv.ResvFrameBegin(gfp, mb); - avg = mb.bits; - frameBits[0] = maximum_framebits; - } - - for (var gr = 0; gr < gfc.mode_gr; gr++) { - qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0); - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - ms_convert(gfc.l3_side, gr); - } - for (var ch = 0; ch < gfc.channels_out; ++ch) { - var cod_info = gfc.l3_side.tt[gr][ch]; - - gfc.masking_lower = Math.pow(10.0, - gfc.PSY.mask_adjust * 0.1); - - init_outer_loop(gfc, cod_info); - if (0 != qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin[gr][ch])) - analog_silence = 0; - - bits += max_bits[gr][ch]; - } - } - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - if (bits > maximum_framebits) { - max_bits[gr][ch] *= maximum_framebits; - max_bits[gr][ch] /= bits; - } - - } - /* for ch */ - } - /* for gr */ - - return analog_silence; - }; - - /** - * calculates target bits for ABR encoding - * - * mt 2000/05/31 - */ - this.calc_target_bits = function (gfp, pe, ms_ener_ratio, targ_bits, analog_silence_bits, max_frame_bits) { - var gfc = gfp.internal_flags; - var l3_side = gfc.l3_side; - var res_factor; - var gr, ch, totbits, mean_bits = 0; - - gfc.bitrate_index = gfc.VBR_max_bitrate; - var mb = new MeanBits(mean_bits); - max_frame_bits[0] = rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - gfc.bitrate_index = 1; - mean_bits = bs.getframebits(gfp) - gfc.sideinfo_len * 8; - analog_silence_bits[0] = mean_bits / (gfc.mode_gr * gfc.channels_out); - - mean_bits = gfp.VBR_mean_bitrate_kbps * gfp.framesize * 1000; - if ((gfc.substep_shaping & 1) != 0) - mean_bits *= 1.09; - mean_bits /= gfp.out_samplerate; - mean_bits -= gfc.sideinfo_len * 8; - mean_bits /= (gfc.mode_gr * gfc.channels_out); - - /** - *
-         *           res_factor is the percentage of the target bitrate that should
-         *           be used on average.  the remaining bits are added to the
-         *           bitreservoir and used for difficult to encode frames.
-         *
-         *           Since we are tracking the average bitrate, we should adjust
-         *           res_factor "on the fly", increasing it if the average bitrate
-         *           is greater than the requested bitrate, and decreasing it
-         *           otherwise.  Reasonable ranges are from .9 to 1.0
-         *
-         *           Until we get the above suggestion working, we use the following
-         *           tuning:
-         *           compression ratio    res_factor
-         *           5.5  (256kbps)         1.0      no need for bitreservoir
-         *           11   (128kbps)         .93      7% held for reservoir
-         *
-         *           with linear interpolation for other values.
-         * 
- */ - res_factor = .93 + .07 * (11.0 - gfp.compression_ratio) - / (11.0 - 5.5); - if (res_factor < .90) - res_factor = .90; - if (res_factor > 1.00) - res_factor = 1.00; - - for (gr = 0; gr < gfc.mode_gr; gr++) { - var sum = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - targ_bits[gr][ch] = (int)(res_factor * mean_bits); - - if (pe[gr][ch] > 700) { - var add_bits = (int)((pe[gr][ch] - 700) / 1.4); - - var cod_info = l3_side.tt[gr][ch]; - targ_bits[gr][ch] = (int)(res_factor * mean_bits); - - /* short blocks use a little extra, no matter what the pe */ - if (cod_info.block_type == Encoder.SHORT_TYPE) { - if (add_bits < mean_bits / 2) - add_bits = mean_bits / 2; - } - /* at most increase bits by 1.5*average */ - if (add_bits > mean_bits * 3 / 2) - add_bits = mean_bits * 3 / 2; - else if (add_bits < 0) - add_bits = 0; - - targ_bits[gr][ch] += add_bits; - } - if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } - sum += targ_bits[gr][ch]; - } - /* for ch */ - if (sum > LameInternalFlags.MAX_BITS_PER_GRANULE) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[gr][ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE; - targ_bits[gr][ch] /= sum; - } - } - } - /* for gr */ - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) - for (gr = 0; gr < gfc.mode_gr; gr++) { - qupvt.reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits - * gfc.channels_out, - LameInternalFlags.MAX_BITS_PER_GRANULE); - } - - /* - * sum target bits - */ - totbits = 0; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) - targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - totbits += targ_bits[gr][ch]; - } - } - - /* - * repartion target bits if needed - */ - if (totbits > max_frame_bits[0]) { - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - targ_bits[gr][ch] *= max_frame_bits[0]; - targ_bits[gr][ch] /= totbits; - } - } - } - } - -} - -module.exports = Quantize; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/QuantizePVT.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/QuantizePVT.js deleted file mode 100644 index b849a5883..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/QuantizePVT.js +++ /dev/null @@ -1,1037 +0,0 @@ -/* - * quantize_pvt source file - * - * Copyright (c) 1999-2002 Takehiro Tominaga - * Copyright (c) 2000-2002 Robert Hegemann - * Copyright (c) 2001 Naoki Shibata - * Copyright (c) 2002-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: QuantizePVT.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */ -var ScaleFac = require('./ScaleFac.js'); -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); -var MeanBits = require('./MeanBits.js'); -var LameInternalFlags = require('./LameInternalFlags.js'); - -QuantizePVT.Q_MAX = (256 + 1); -QuantizePVT.Q_MAX2 = 116; -QuantizePVT.LARGE_BITS = 100000; -QuantizePVT.IXMAX_VAL = 8206; - -function QuantizePVT() { - var BitStream = require('./BitStream.js'); - var tak = null; - var rv = null; - var psy = null; - - this.setModules = function (_tk, _rv, _psy) { - tak = _tk; - rv = _rv; - psy = _psy; - }; - - function POW20(x) { - assert(0 <= (x + QuantizePVT.Q_MAX2) && x < QuantizePVT.Q_MAX); - return pow20[x + QuantizePVT.Q_MAX2]; - } - - this.IPOW20 = function (x) { - assert(0 <= x && x < QuantizePVT.Q_MAX); - return ipow20[x]; - } - - /** - * smallest such that 1.0+DBL_EPSILON != 1.0 - */ - var DBL_EPSILON = 2.2204460492503131e-016; - - /** - * ix always <= 8191+15. see count_bits() - */ - var IXMAX_VAL = QuantizePVT.IXMAX_VAL; - - var PRECALC_SIZE = (IXMAX_VAL + 2); - - var Q_MAX = QuantizePVT.Q_MAX; - - - /** - * - * minimum possible number of - * -cod_info.global_gain + ((scalefac[] + (cod_info.preflag ? pretab[sfb] : 0)) - * << (cod_info.scalefac_scale + 1)) + cod_info.subblock_gain[cod_info.window[sfb]] * 8; - * - * for long block, 0+((15+3)<<2) = 18*4 = 72 - * for short block, 0+(15<<2)+7*8 = 15*4+56 = 116 - * - */ - var Q_MAX2 = QuantizePVT.Q_MAX2; - - var LARGE_BITS = QuantizePVT.LARGE_BITS; - - - /** - * Assuming dynamic range=96dB, this value should be 92 - */ - var NSATHSCALE = 100; - - /** - * The following table is used to implement the scalefactor partitioning for - * MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds - * to the way the tables are presented in the IS: - * - * [table_number][row_in_table][column of nr_of_sfb] - */ - this.nr_of_sfb_block = [ - [[6, 5, 5, 5], [9, 9, 9, 9], [6, 9, 9, 9]], - [[6, 5, 7, 3], [9, 9, 12, 6], [6, 9, 12, 6]], - [[11, 10, 0, 0], [18, 18, 0, 0], [15, 18, 0, 0]], - [[7, 7, 7, 0], [12, 12, 12, 0], [6, 15, 12, 0]], - [[6, 6, 6, 3], [12, 9, 9, 6], [6, 12, 9, 6]], - [[8, 8, 5, 0], [15, 12, 9, 0], [6, 18, 9, 0]]]; - - /** - * Table B.6: layer3 preemphasis - */ - var pretab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 2, 2, 3, 3, 3, 2, 0]; - this.pretab = pretab; - - /** - * Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor - * bands.
- * Index into this using a method such as:
- * idx = fr_ps.header.sampling_frequency + (fr_ps.header.version * 3) - */ - this.sfBandIndex = [ - // Table B.2.b: 22.05 kHz - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192] - , [0, 0, 0, 0, 0, 0, 0] // sfb21 pseudo sub bands - , [0, 0, 0, 0, 0, 0, 0] // sfb12 pseudo sub bands - ), - /* Table B.2.c: 24 kHz */ /* docs: 332. mpg123(broken): 330 */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 332, 394, 464, - 540, 576], - [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.2.a: 16 kHz */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.8.b: 44.1 kHz */ - new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, - 576], - [0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.8.c: 48 kHz */ - new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, - 576], - [0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* Table B.8.a: 32 kHz */ - new ScaleFac([0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, - 576], - [0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 11.025 kHz */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, - 402 / 3, 522 / 3, 576 / 3] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 12 kHz */ - new ScaleFac([0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576], - [0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, - 402 / 3, 522 / 3, 576 / 3] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 8 kHz */ - new ScaleFac([0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, - 572, 574, 576], - [0 / 3, 24 / 3, 48 / 3, 72 / 3, 108 / 3, 156 / 3, 216 / 3, 288 / 3, 372 / 3, 480 / 3, 486 / 3, - 492 / 3, 498 / 3, 576 / 3] - , [0, 0, 0, 0, 0, 0, 0] /* sfb21 pseudo sub bands */ - , [0, 0, 0, 0, 0, 0, 0] /* sfb12 pseudo sub bands */ - ) - ]; - - var pow20 = new_float(Q_MAX + Q_MAX2 + 1); - var ipow20 = new_float(Q_MAX); - var pow43 = new_float(PRECALC_SIZE); - - var adj43 = new_float(PRECALC_SIZE); - this.adj43 = adj43; - - /** - *
-     * compute the ATH for each scalefactor band cd range: 0..96db
-     *
-     * Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest =
-     * -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5
-     * -9db 0db
-     *
-     * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1
-     * sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db
-     *
-     * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1
-     * sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db
-     *
-     *
-     * MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at
-     * 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic
-     * range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 =
-     * -11 - 96 = -107db = ATH at 3.3kHz.
-     *
-     * ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH =
-     * ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener)
-     * 
- */ - function ATHmdct(gfp, f) { - var ath = psy.ATHformula(f, gfp); - - ath -= NSATHSCALE; - - /* modify the MDCT scaling for the ATH and convert to energy */ - ath = Math.pow(10.0, ath / 10.0 + gfp.ATHlower); - return ath; - } - - function compute_ath(gfp) { - var ATH_l = gfp.internal_flags.ATH.l; - var ATH_psfb21 = gfp.internal_flags.ATH.psfb21; - var ATH_s = gfp.internal_flags.ATH.s; - var ATH_psfb12 = gfp.internal_flags.ATH.psfb12; - var gfc = gfp.internal_flags; - var samp_freq = gfp.out_samplerate; - - for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - var start = gfc.scalefac_band.l[sfb]; - var end = gfc.scalefac_band.l[sfb + 1]; - ATH_l[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 576); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_l[sfb] = Math.min(ATH_l[sfb], ATH_f); - } - } - - for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) { - var start = gfc.scalefac_band.psfb21[sfb]; - var end = gfc.scalefac_band.psfb21[sfb + 1]; - ATH_psfb21[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 576); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_psfb21[sfb] = Math.min(ATH_psfb21[sfb], ATH_f); - } - } - - for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) { - var start = gfc.scalefac_band.s[sfb]; - var end = gfc.scalefac_band.s[sfb + 1]; - ATH_s[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 192); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_s[sfb] = Math.min(ATH_s[sfb], ATH_f); - } - ATH_s[sfb] *= (gfc.scalefac_band.s[sfb + 1] - gfc.scalefac_band.s[sfb]); - } - - for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) { - var start = gfc.scalefac_band.psfb12[sfb]; - var end = gfc.scalefac_band.psfb12[sfb + 1]; - ATH_psfb12[sfb] = Float.MAX_VALUE; - for (var i = start; i < end; i++) { - var freq = i * samp_freq / (2 * 192); - var ATH_f = ATHmdct(gfp, freq); - /* freq in kHz */ - ATH_psfb12[sfb] = Math.min(ATH_psfb12[sfb], ATH_f); - } - /* not sure about the following */ - ATH_psfb12[sfb] *= (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]); - } - - /* - * no-ATH mode: reduce ATH to -200 dB - */ - if (gfp.noATH) { - for (var sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - ATH_l[sfb] = 1E-20; - } - for (var sfb = 0; sfb < Encoder.PSFB21; sfb++) { - ATH_psfb21[sfb] = 1E-20; - } - for (var sfb = 0; sfb < Encoder.SBMAX_s; sfb++) { - ATH_s[sfb] = 1E-20; - } - for (var sfb = 0; sfb < Encoder.PSFB12; sfb++) { - ATH_psfb12[sfb] = 1E-20; - } - } - - /* - * work in progress, don't rely on it too much - */ - gfc.ATH.floor = 10. * Math.log10(ATHmdct(gfp, -1.)); - } - - /** - * initialization for iteration_loop - */ - this.iteration_init = function (gfp) { - var gfc = gfp.internal_flags; - var l3_side = gfc.l3_side; - var i; - - if (gfc.iteration_init_init == 0) { - gfc.iteration_init_init = 1; - - l3_side.main_data_begin = 0; - compute_ath(gfp); - - pow43[0] = 0.0; - for (i = 1; i < PRECALC_SIZE; i++) - pow43[i] = Math.pow(i, 4.0 / 3.0); - - for (i = 0; i < PRECALC_SIZE - 1; i++) - adj43[i] = ((i + 1) - Math.pow( - 0.5 * (pow43[i] + pow43[i + 1]), 0.75)); - adj43[i] = 0.5; - - for (i = 0; i < Q_MAX; i++) - ipow20[i] = Math.pow(2.0, (i - 210) * -0.1875); - for (i = 0; i <= Q_MAX + Q_MAX2; i++) - pow20[i] = Math.pow(2.0, (i - 210 - Q_MAX2) * 0.25); - - tak.huffman_init(gfc); - - { - var bass, alto, treble, sfb21; - - i = (gfp.exp_nspsytune >> 2) & 63; - if (i >= 32) - i -= 64; - bass = Math.pow(10, i / 4.0 / 10.0); - - i = (gfp.exp_nspsytune >> 8) & 63; - if (i >= 32) - i -= 64; - alto = Math.pow(10, i / 4.0 / 10.0); - - i = (gfp.exp_nspsytune >> 14) & 63; - if (i >= 32) - i -= 64; - treble = Math.pow(10, i / 4.0 / 10.0); - - /* - * to be compatible with Naoki's original code, the next 6 bits - * define only the amount of changing treble for sfb21 - */ - i = (gfp.exp_nspsytune >> 20) & 63; - if (i >= 32) - i -= 64; - sfb21 = treble * Math.pow(10, i / 4.0 / 10.0); - for (i = 0; i < Encoder.SBMAX_l; i++) { - var f; - if (i <= 6) - f = bass; - else if (i <= 13) - f = alto; - else if (i <= 20) - f = treble; - else - f = sfb21; - - gfc.nsPsy.longfact[i] = f; - } - for (i = 0; i < Encoder.SBMAX_s; i++) { - var f; - if (i <= 5) - f = bass; - else if (i <= 10) - f = alto; - else if (i <= 11) - f = treble; - else - f = sfb21; - - gfc.nsPsy.shortfact[i] = f; - } - } - } - } - - /** - * allocate bits among 2 channels based on PE
- * mt 6/99
- * bugfixes rh 8/01: often allocated more than the allowed 4095 bits - */ - this.on_pe = function (gfp, pe, - targ_bits, mean_bits, gr, cbr) { - var gfc = gfp.internal_flags; - var tbits = 0, bits; - var add_bits = new_int(2); - var ch; - - /* allocate targ_bits for granule */ - var mb = new MeanBits(tbits); - var extra_bits = rv.ResvMaxBits(gfp, mean_bits, mb, cbr); - tbits = mb.bits; - /* maximum allowed bits for this granule */ - var max_bits = tbits + extra_bits; - if (max_bits > LameInternalFlags.MAX_BITS_PER_GRANULE) { - // hard limit per granule - max_bits = LameInternalFlags.MAX_BITS_PER_GRANULE; - } - for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) { - /****************************************************************** - * allocate bits for each channel - ******************************************************************/ - targ_bits[ch] = Math.min(LameInternalFlags.MAX_BITS_PER_CHANNEL, - tbits / gfc.channels_out); - - add_bits[ch] = 0 | (targ_bits[ch] * pe[gr][ch] / 700.0 - targ_bits[ch]); - - /* at most increase bits by 1.5*average */ - if (add_bits[ch] > mean_bits * 3 / 4) - add_bits[ch] = mean_bits * 3 / 4; - if (add_bits[ch] < 0) - add_bits[ch] = 0; - - if (add_bits[ch] + targ_bits[ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) - add_bits[ch] = Math.max(0, - LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[ch]); - - bits += add_bits[ch]; - } - if (bits > extra_bits) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - add_bits[ch] = extra_bits * add_bits[ch] / bits; - } - } - - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[ch] += add_bits[ch]; - extra_bits -= add_bits[ch]; - } - - for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) { - bits += targ_bits[ch]; - } - if (bits > LameInternalFlags.MAX_BITS_PER_GRANULE) { - var sum = 0; - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE; - targ_bits[ch] /= bits; - sum += targ_bits[ch]; - } - assert(sum <= LameInternalFlags.MAX_BITS_PER_GRANULE); - } - - return max_bits; - } - - this.reduce_side = function (targ_bits, ms_ener_ratio, mean_bits, max_bits) { - assert(max_bits <= LameInternalFlags.MAX_BITS_PER_GRANULE); - assert(targ_bits[0] + targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_GRANULE); - - /* - * ms_ener_ratio = 0: allocate 66/33 mid/side fac=.33 ms_ener_ratio =.5: - * allocate 50/50 mid/side fac= 0 - */ - /* 75/25 split is fac=.5 */ - var fac = .33 * (.5 - ms_ener_ratio) / .5; - if (fac < 0) - fac = 0; - if (fac > .5) - fac = .5; - - /* number of bits to move from side channel to mid channel */ - /* move_bits = fac*targ_bits[1]; */ - var move_bits = 0 | (fac * .5 * (targ_bits[0] + targ_bits[1])); - - if (move_bits > LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]) { - move_bits = LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]; - } - if (move_bits < 0) - move_bits = 0; - - if (targ_bits[1] >= 125) { - /* dont reduce side channel below 125 bits */ - if (targ_bits[1] - move_bits > 125) { - - /* if mid channel already has 2x more than average, dont bother */ - /* mean_bits = bits per granule (for both channels) */ - if (targ_bits[0] < mean_bits) - targ_bits[0] += move_bits; - targ_bits[1] -= move_bits; - } else { - targ_bits[0] += targ_bits[1] - 125; - targ_bits[1] = 125; - } - } - - move_bits = targ_bits[0] + targ_bits[1]; - if (move_bits > max_bits) { - targ_bits[0] = (max_bits * targ_bits[0]) / move_bits; - targ_bits[1] = (max_bits * targ_bits[1]) / move_bits; - } - assert(targ_bits[0] <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - assert(targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - assert(targ_bits[0] + targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_GRANULE); - }; - - /** - * Robert Hegemann 2001-04-27: - * this adjusts the ATH, keeping the original noise floor - * affects the higher frequencies more than the lower ones - */ - this.athAdjust = function (a, x, athFloor) { - /* - * work in progress - */ - var o = 90.30873362; - var p = 94.82444863; - var u = Util.FAST_LOG10_X(x, 10.0); - var v = a * a; - var w = 0.0; - u -= athFloor; - /* undo scaling */ - if (v > 1E-20) - w = 1. + Util.FAST_LOG10_X(v, 10.0 / o); - if (w < 0) - w = 0.; - u *= w; - u += athFloor + o - p; - /* redo scaling */ - - return Math.pow(10., 0.1 * u); - }; - - /** - * Calculate the allowed distortion for each scalefactor band, as determined - * by the psychoacoustic model. xmin(sb) = ratio(sb) * en(sb) / bw(sb) - * - * returns number of sfb's with energy > ATH - */ - this.calc_xmin = function (gfp, ratio, cod_info, pxmin) { - var pxminPos = 0; - var gfc = gfp.internal_flags; - var gsfb, j = 0, ath_over = 0; - var ATH = gfc.ATH; - var xr = cod_info.xr; - var enable_athaa_fix = (gfp.VBR == VbrMode.vbr_mtrh) ? 1 : 0; - var masking_lower = gfc.masking_lower; - - if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) { - /* was already done in PSY-Model */ - masking_lower = 1.0; - } - - for (gsfb = 0; gsfb < cod_info.psy_lmax; gsfb++) { - var en0, xmin; - var rh1, rh2; - var width, l; - - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - xmin = athAdjust(ATH.adjust, ATH.l[gsfb], ATH.floor); - else - xmin = ATH.adjust * ATH.l[gsfb]; - - width = cod_info.width[gsfb]; - rh1 = xmin / width; - rh2 = DBL_EPSILON; - l = width >> 1; - en0 = 0.0; - do { - var xa, xb; - xa = xr[j] * xr[j]; - en0 += xa; - rh2 += (xa < rh1) ? xa : rh1; - j++; - xb = xr[j] * xr[j]; - en0 += xb; - rh2 += (xb < rh1) ? xb : rh1; - j++; - } while (--l > 0); - if (en0 > xmin) - ath_over++; - - if (gsfb == Encoder.SBPSY_l) { - var x = xmin * gfc.nsPsy.longfact[gsfb]; - if (rh2 < x) { - rh2 = x; - } - } - if (enable_athaa_fix != 0) { - xmin = rh2; - } - if (!gfp.ATHonly) { - var e = ratio.en.l[gsfb]; - if (e > 0.0) { - var x; - x = en0 * ratio.thm.l[gsfb] * masking_lower / e; - if (enable_athaa_fix != 0) - x *= gfc.nsPsy.longfact[gsfb]; - if (xmin < x) - xmin = x; - } - } - if (enable_athaa_fix != 0) - pxmin[pxminPos++] = xmin; - else - pxmin[pxminPos++] = xmin * gfc.nsPsy.longfact[gsfb]; - } - /* end of long block loop */ - - /* use this function to determine the highest non-zero coeff */ - var max_nonzero = 575; - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type, but not SHORT - var k = 576; - while (k-- != 0 && BitStream.EQ(xr[k], 0)) { - max_nonzero = k; - } - } - cod_info.max_nonzero_coeff = max_nonzero; - - for (var sfb = cod_info.sfb_smin; gsfb < cod_info.psymax; sfb++, gsfb += 3) { - var width, b; - var tmpATH; - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - tmpATH = athAdjust(ATH.adjust, ATH.s[sfb], ATH.floor); - else - tmpATH = ATH.adjust * ATH.s[sfb]; - - width = cod_info.width[gsfb]; - for (b = 0; b < 3; b++) { - var en0 = 0.0, xmin; - var rh1, rh2; - var l = width >> 1; - - rh1 = tmpATH / width; - rh2 = DBL_EPSILON; - do { - var xa, xb; - xa = xr[j] * xr[j]; - en0 += xa; - rh2 += (xa < rh1) ? xa : rh1; - j++; - xb = xr[j] * xr[j]; - en0 += xb; - rh2 += (xb < rh1) ? xb : rh1; - j++; - } while (--l > 0); - if (en0 > tmpATH) - ath_over++; - if (sfb == Encoder.SBPSY_s) { - var x = tmpATH * gfc.nsPsy.shortfact[sfb]; - if (rh2 < x) { - rh2 = x; - } - } - if (enable_athaa_fix != 0) - xmin = rh2; - else - xmin = tmpATH; - - if (!gfp.ATHonly && !gfp.ATHshort) { - var e = ratio.en.s[sfb][b]; - if (e > 0.0) { - var x; - x = en0 * ratio.thm.s[sfb][b] * masking_lower / e; - if (enable_athaa_fix != 0) - x *= gfc.nsPsy.shortfact[sfb]; - if (xmin < x) - xmin = x; - } - } - if (enable_athaa_fix != 0) - pxmin[pxminPos++] = xmin; - else - pxmin[pxminPos++] = xmin * gfc.nsPsy.shortfact[sfb]; - } - /* b */ - if (gfp.useTemporal) { - if (pxmin[pxminPos - 3] > pxmin[pxminPos - 3 + 1]) - pxmin[pxminPos - 3 + 1] += (pxmin[pxminPos - 3] - pxmin[pxminPos - 3 + 1]) - * gfc.decay; - if (pxmin[pxminPos - 3 + 1] > pxmin[pxminPos - 3 + 2]) - pxmin[pxminPos - 3 + 2] += (pxmin[pxminPos - 3 + 1] - pxmin[pxminPos - 3 + 2]) - * gfc.decay; - } - } - /* end of short block sfb loop */ - - return ath_over; - }; - - function StartLine(j) { - this.s = j; - } - - this.calc_noise_core = function (cod_info, startline, l, step) { - var noise = 0; - var j = startline.s; - var ix = cod_info.l3_enc; - - if (j > cod_info.count1) { - while ((l--) != 0) { - var temp; - temp = cod_info.xr[j]; - j++; - noise += temp * temp; - temp = cod_info.xr[j]; - j++; - noise += temp * temp; - } - } else if (j > cod_info.big_values) { - var ix01 = new_float(2); - ix01[0] = 0; - ix01[1] = step; - while ((l--) != 0) { - var temp; - temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]]; - j++; - noise += temp * temp; - temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]]; - j++; - noise += temp * temp; - } - } else { - while ((l--) != 0) { - var temp; - temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step; - j++; - noise += temp * temp; - temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step; - j++; - noise += temp * temp; - } - } - - startline.s = j; - return noise; - } - - /** - *
-     * -oo dB  =>  -1.00
-     * - 6 dB  =>  -0.97
-     * - 3 dB  =>  -0.80
-     * - 2 dB  =>  -0.64
-     * - 1 dB  =>  -0.38
-     *   0 dB  =>   0.00
-     * + 1 dB  =>  +0.49
-     * + 2 dB  =>  +1.06
-     * + 3 dB  =>  +1.68
-     * + 6 dB  =>  +3.69
-     * +10 dB  =>  +6.45
-     * 
- */ - this.calc_noise = function (cod_info, l3_xmin, distort, res, prev_noise) { - var distortPos = 0; - var l3_xminPos = 0; - var sfb, l, over = 0; - var over_noise_db = 0; - /* 0 dB relative to masking */ - var tot_noise_db = 0; - /* -200 dB relative to masking */ - var max_noise = -20.0; - var j = 0; - var scalefac = cod_info.scalefac; - var scalefacPos = 0; - - res.over_SSD = 0; - - for (sfb = 0; sfb < cod_info.psymax; sfb++) { - var s = cod_info.global_gain - - (((scalefac[scalefacPos++]) + (cod_info.preflag != 0 ? pretab[sfb] - : 0)) << (cod_info.scalefac_scale + 1)) - - cod_info.subblock_gain[cod_info.window[sfb]] * 8; - var noise = 0.0; - - if (prev_noise != null && (prev_noise.step[sfb] == s)) { - - /* use previously computed values */ - noise = prev_noise.noise[sfb]; - j += cod_info.width[sfb]; - distort[distortPos++] = noise / l3_xmin[l3_xminPos++]; - - noise = prev_noise.noise_log[sfb]; - - } else { - var step = POW20(s); - l = cod_info.width[sfb] >> 1; - - if ((j + cod_info.width[sfb]) > cod_info.max_nonzero_coeff) { - var usefullsize; - usefullsize = cod_info.max_nonzero_coeff - j + 1; - - if (usefullsize > 0) - l = usefullsize >> 1; - else - l = 0; - } - - var sl = new StartLine(j); - noise = this.calc_noise_core(cod_info, sl, l, step); - j = sl.s; - - if (prev_noise != null) { - /* save noise values */ - prev_noise.step[sfb] = s; - prev_noise.noise[sfb] = noise; - } - - noise = distort[distortPos++] = noise / l3_xmin[l3_xminPos++]; - - /* multiplying here is adding in dB, but can overflow */ - noise = Util.FAST_LOG10(Math.max(noise, 1E-20)); - - if (prev_noise != null) { - /* save noise values */ - prev_noise.noise_log[sfb] = noise; - } - } - - if (prev_noise != null) { - /* save noise values */ - prev_noise.global_gain = cod_info.global_gain; - } - - tot_noise_db += noise; - - if (noise > 0.0) { - var tmp; - - tmp = Math.max(0 | (noise * 10 + .5), 1); - res.over_SSD += tmp * tmp; - - over++; - /* multiplying here is adding in dB -but can overflow */ - /* over_noise *= noise; */ - over_noise_db += noise; - } - max_noise = Math.max(max_noise, noise); - - } - - res.over_count = over; - res.tot_noise = tot_noise_db; - res.over_noise = over_noise_db; - res.max_noise = max_noise; - - return over; - } - - /** - * updates plotting data - * - * Mark Taylor 2000-??-?? - * - * Robert Hegemann: moved noise/distortion calc into it - */ - this.set_pinfo = function (gfp, cod_info, ratio, gr, ch) { - var gfc = gfp.internal_flags; - var sfb, sfb2; - var l; - var en0, en1; - var ifqstep = (cod_info.scalefac_scale == 0) ? .5 : 1.0; - var scalefac = cod_info.scalefac; - - var l3_xmin = new_float(L3Side.SFBMAX); - var xfsf = new_float(L3Side.SFBMAX); - var noise = new CalcNoiseResult(); - - calc_xmin(gfp, ratio, cod_info, l3_xmin); - calc_noise(cod_info, l3_xmin, xfsf, noise, null); - - var j = 0; - sfb2 = cod_info.sfb_lmax; - if (cod_info.block_type != Encoder.SHORT_TYPE - && 0 == cod_info.mixed_block_flag) - sfb2 = 22; - for (sfb = 0; sfb < sfb2; sfb++) { - var start = gfc.scalefac_band.l[sfb]; - var end = gfc.scalefac_band.l[sfb + 1]; - var bw = end - start; - for (en0 = 0.0; j < end; j++) - en0 += cod_info.xr[j] * cod_info.xr[j]; - en0 /= bw; - /* convert to MDCT units */ - /* scaling so it shows up on FFT plot */ - en1 = 1e15; - gfc.pinfo.en[gr][ch][sfb] = en1 * en0; - gfc.pinfo.xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw; - - if (ratio.en.l[sfb] > 0 && !gfp.ATHonly) - en0 = en0 / ratio.en.l[sfb]; - else - en0 = 0.0; - - gfc.pinfo.thr[gr][ch][sfb] = en1 - * Math.max(en0 * ratio.thm.l[sfb], gfc.ATH.l[sfb]); - - /* there is no scalefactor bands >= SBPSY_l */ - gfc.pinfo.LAMEsfb[gr][ch][sfb] = 0; - if (cod_info.preflag != 0 && sfb >= 11) - gfc.pinfo.LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb]; - - if (sfb < Encoder.SBPSY_l) { - /* scfsi should be decoded by caller side */ - assert(scalefac[sfb] >= 0); - gfc.pinfo.LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb]; - } - } - /* for sfb */ - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - sfb2 = sfb; - for (sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - var start = gfc.scalefac_band.s[sfb]; - var end = gfc.scalefac_band.s[sfb + 1]; - var bw = end - start; - for (var i = 0; i < 3; i++) { - for (en0 = 0.0, l = start; l < end; l++) { - en0 += cod_info.xr[j] * cod_info.xr[j]; - j++; - } - en0 = Math.max(en0 / bw, 1e-20); - /* convert to MDCT units */ - /* scaling so it shows up on FFT plot */ - en1 = 1e15; - - gfc.pinfo.en_s[gr][ch][3 * sfb + i] = en1 * en0; - gfc.pinfo.xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2] - * xfsf[sfb2] / bw; - if (ratio.en.s[sfb][i] > 0) - en0 = en0 / ratio.en.s[sfb][i]; - else - en0 = 0.0; - if (gfp.ATHonly || gfp.ATHshort) - en0 = 0; - - gfc.pinfo.thr_s[gr][ch][3 * sfb + i] = en1 - * Math.max(en0 * ratio.thm.s[sfb][i], - gfc.ATH.s[sfb]); - - /* there is no scalefactor bands >= SBPSY_s */ - gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0 - * cod_info.subblock_gain[i]; - if (sfb < Encoder.SBPSY_s) { - gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep - * scalefac[sfb2]; - } - sfb2++; - } - } - } - /* block type short */ - gfc.pinfo.LAMEqss[gr][ch] = cod_info.global_gain; - gfc.pinfo.LAMEmainbits[gr][ch] = cod_info.part2_3_length - + cod_info.part2_length; - gfc.pinfo.LAMEsfbits[gr][ch] = cod_info.part2_length; - - gfc.pinfo.over[gr][ch] = noise.over_count; - gfc.pinfo.max_noise[gr][ch] = noise.max_noise * 10.0; - gfc.pinfo.over_noise[gr][ch] = noise.over_noise * 10.0; - gfc.pinfo.tot_noise[gr][ch] = noise.tot_noise * 10.0; - gfc.pinfo.over_SSD[gr][ch] = noise.over_SSD; - } - - /** - * updates plotting data for a whole frame - * - * Robert Hegemann 2000-10-21 - */ - function set_frame_pinfo(gfp, ratio) { - var gfc = gfp.internal_flags; - - gfc.masking_lower = 1.0; - - /* - * for every granule and channel patch l3_enc and set info - */ - for (var gr = 0; gr < gfc.mode_gr; gr++) { - for (var ch = 0; ch < gfc.channels_out; ch++) { - var cod_info = gfc.l3_side.tt[gr][ch]; - var scalefac_sav = new_int(L3Side.SFBMAX); - System.arraycopy(cod_info.scalefac, 0, scalefac_sav, 0, - scalefac_sav.length); - - /* - * reconstruct the scalefactors in case SCFSI was used - */ - if (gr == 1) { - var sfb; - for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) { - if (cod_info.scalefac[sfb] < 0) /* scfsi */ - cod_info.scalefac[sfb] = gfc.l3_side.tt[0][ch].scalefac[sfb]; - } - } - - set_pinfo(gfp, cod_info, ratio[gr][ch], gr, ch); - System.arraycopy(scalefac_sav, 0, cod_info.scalefac, 0, - scalefac_sav.length); - } - /* for ch */ - } - /* for gr */ - } - -} - -module.exports = QuantizePVT; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ReplayGain.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ReplayGain.js deleted file mode 100644 index 9dd85e5a3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ReplayGain.js +++ /dev/null @@ -1,59 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var GainAnalysis = require('./GainAnalysis.js'); - -function ReplayGain() { - this.linprebuf = new_float(GainAnalysis.MAX_ORDER * 2); - /** - * left input samples, with pre-buffer - */ - this.linpre = 0; - this.lstepbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - /** - * left "first step" (i.e. post first filter) samples - */ - this.lstep = 0; - this.loutbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - /** - * left "out" (i.e. post second filter) samples - */ - this.lout = 0; - this.rinprebuf = new_float(GainAnalysis.MAX_ORDER * 2); - /** - * right input samples ... - */ - this.rinpre = 0; - this.rstepbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - this.rstep = 0; - this.routbuf = new_float(GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER); - this.rout = 0; - /** - * number of samples required to reach number of milliseconds required - * for RMS window - */ - this.sampleWindow = 0; - this.totsamp = 0; - this.lsum = 0.; - this.rsum = 0.; - this.freqindex = 0; - this.first = 0; - this.A = new_int(0 | (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB)); - this.B = new_int(0 | (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB)); - -} - -module.exports = ReplayGain; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Reservoir.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Reservoir.js deleted file mode 100644 index d0ce4d53c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Reservoir.js +++ /dev/null @@ -1,297 +0,0 @@ -/* - * bit reservoir source file - * - * Copyright (c) 1999-2000 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Reservoir.java,v 1.9 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -/** - * ResvFrameBegin:
- * Called (repeatedly) at the beginning of a frame. Updates the maximum size of - * the reservoir, and checks to make sure main_data_begin was set properly by - * the formatter
- * Background information: - * - * This is the original text from the ISO standard. Because of sooo many bugs - * and irritations correcting comments are added in brackets []. A '^W' means - * you should remove the last word. - * - *
- *  1. The following rule can be used to calculate the maximum
- *     number of bits used for one granule [^W frame]:
- * At the highest possible bitrate of Layer III (320 kbps - * per stereo signal [^W^W^W], 48 kHz) the frames must be of - * [^W^W^W are designed to have] constant length, i.e. - * one buffer [^W^W the frame] length is:
- * - * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte - * - * This value is used as the maximum buffer per channel [^W^W] at - * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps - * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit - * [per granule and channel] at 48 kHz sampling frequency. - * This means that there is a maximum deviation (short time buffer - * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps. - * The actual deviation is equal to the number of bytes [with the - * meaning of octets] denoted by the main_data_end offset pointer. - * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits - * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits]. - * ... The xchange of buffer bits between the left and right channel - * is allowed without restrictions [exception: dual channel]. - * Because of the [constructed] constraint on the buffer size - * main_data_end is always set to 0 in the case of bit_rate_index==14, - * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case - * all data are allocated between adjacent header [^W sync] words - * [, i.e. there is no buffering at all]. - *
- */ - -var common = require('./common.js'); -var assert = common.assert; - -function Reservoir() { - var bs; - - this.setModules = function(_bs) { - bs = _bs; - } - - this.ResvFrameBegin = function(gfp, mean_bits) { - var gfc = gfp.internal_flags; - var maxmp3buf; - var l3_side = gfc.l3_side; - - var frameLength = bs.getframebits(gfp); - mean_bits.bits = (frameLength - gfc.sideinfo_len * 8) / gfc.mode_gr; - - /** - *
-		 *  Meaning of the variables:
-		 *      resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1))
-		 *          Number of bits can be stored in previous frame(s) due to
-		 *          counter size constaints
-		 *      maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5))
-		 *          Number of bits allowed to encode one frame (you can take 8*511 bit
-		 *          from the bit reservoir and at most 8*1440 bit from the current
-		 *          frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible
-		 *          value for MPEG-1 and -2)
-		 * 
-		 *          maximum allowed granule/channel size times 4 = 8*2047 bits.,
-		 *          so this is the absolute maximum supported by the format.
-		 * 
-		 * 
-		 *      fullFrameBits:  maximum number of bits available for encoding
-		 *                      the current frame.
-		 * 
-		 *      mean_bits:      target number of bits per granule.
-		 * 
-		 *      frameLength:
-		 * 
-		 *      gfc.ResvMax:   maximum allowed reservoir
-		 * 
-		 *      gfc.ResvSize:  current reservoir size
-		 * 
-		 *      l3_side.resvDrain_pre:
-		 *         ancillary data to be added to previous frame:
-		 *         (only usefull in VBR modes if it is possible to have
-		 *         maxmp3buf < fullFrameBits)).  Currently disabled,
-		 *         see #define NEW_DRAIN
-		 *         2010-02-13: RH now enabled, it seems to be needed for CBR too,
-		 *                     as there exists one example, where the FhG decoder
-		 *                     can't decode a -b320 CBR file anymore.
-		 * 
-		 *      l3_side.resvDrain_post:
-		 *         ancillary data to be added to this frame:
-		 * 
-		 * 
- */ - - /* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */ - var resvLimit = (8 * 256) * gfc.mode_gr - 8; - - /* - * maximum allowed frame size. dont use more than this number of bits, - * even if the frame has the space for them: - */ - if (gfp.brate > 320) { - /* in freeformat the buffer is constant */ - maxmp3buf = 8 * ((int) ((gfp.brate * 1000) - / (gfp.out_samplerate / 1152) / 8 + .5)); - } else { - /* - * all mp3 decoders should have enough buffer to handle this value: - * size of a 320kbps 32kHz frame - */ - maxmp3buf = 8 * 1440; - - /* - * Bouvigne suggests this more lax interpretation of the ISO doc - * instead of using 8*960. - */ - - if (gfp.strict_ISO) { - maxmp3buf = 8 * ((int) (320000 / (gfp.out_samplerate / 1152) / 8 + .5)); - } - } - - gfc.ResvMax = maxmp3buf - frameLength; - if (gfc.ResvMax > resvLimit) - gfc.ResvMax = resvLimit; - if (gfc.ResvMax < 0 || gfp.disable_reservoir) - gfc.ResvMax = 0; - - var fullFrameBits = mean_bits.bits * gfc.mode_gr - + Math.min(gfc.ResvSize, gfc.ResvMax); - - if (fullFrameBits > maxmp3buf) - fullFrameBits = maxmp3buf; - - assert (0 == gfc.ResvMax % 8); - assert (gfc.ResvMax >= 0); - - l3_side.resvDrain_pre = 0; - - // frame analyzer code - if (gfc.pinfo != null) { - /* - * expected bits per channel per granule [is this also right for - * mono/stereo, MPEG-1/2 ?] - */ - gfc.pinfo.mean_bits = mean_bits.bits / 2; - gfc.pinfo.resvsize = gfc.ResvSize; - } - - return fullFrameBits; - } - - /** - * returns targ_bits: target number of bits to use for 1 granule
- * extra_bits: amount extra available from reservoir
- * Mark Taylor 4/99 - */ - this.ResvMaxBits = function(gfp, mean_bits, targ_bits, cbr) { - var gfc = gfp.internal_flags; - var add_bits; - var ResvSize = gfc.ResvSize, ResvMax = gfc.ResvMax; - - /* compensate the saved bits used in the 1st granule */ - if (cbr != 0) - ResvSize += mean_bits; - - if ((gfc.substep_shaping & 1) != 0) - ResvMax *= 0.9; - - targ_bits.bits = mean_bits; - - /* extra bits if the reservoir is almost full */ - if (ResvSize * 10 > ResvMax * 9) { - add_bits = ResvSize - (ResvMax * 9) / 10; - targ_bits.bits += add_bits; - gfc.substep_shaping |= 0x80; - } else { - add_bits = 0; - gfc.substep_shaping &= 0x7f; - /* - * build up reservoir. this builds the reservoir a little slower - * than FhG. It could simple be mean_bits/15, but this was rigged to - * always produce 100 (the old value) at 128kbs - */ - if (!gfp.disable_reservoir && 0 == (gfc.substep_shaping & 1)) - targ_bits.bits -= .1 * mean_bits; - } - - /* amount from the reservoir we are allowed to use. ISO says 6/10 */ - var extra_bits = (ResvSize < (gfc.ResvMax * 6) / 10 ? ResvSize - : (gfc.ResvMax * 6) / 10); - extra_bits -= add_bits; - - if (extra_bits < 0) - extra_bits = 0; - return extra_bits; - } - - /** - * Called after a granule's bit allocation. Readjusts the size of the - * reservoir to reflect the granule's usage. - */ - this.ResvAdjust = function(gfc, gi) { - gfc.ResvSize -= gi.part2_3_length + gi.part2_length; - } - - /** - * Called after all granules in a frame have been allocated. Makes sure that - * the reservoir size is within limits, possibly by adding stuffing bits. - */ - this.ResvFrameEnd = function(gfc, mean_bits) { - var over_bits; - var l3_side = gfc.l3_side; - - gfc.ResvSize += mean_bits * gfc.mode_gr; - var stuffingBits = 0; - l3_side.resvDrain_post = 0; - l3_side.resvDrain_pre = 0; - - /* we must be byte aligned */ - if ((over_bits = gfc.ResvSize % 8) != 0) - stuffingBits += over_bits; - - over_bits = (gfc.ResvSize - stuffingBits) - gfc.ResvMax; - if (over_bits > 0) { - assert (0 == over_bits % 8); - assert (over_bits >= 0); - stuffingBits += over_bits; - } - - /* - * NOTE: enabling the NEW_DRAIN code fixes some problems with FhG - * decoder shipped with MS Windows operating systems. Using this, it is - * even possible to use Gabriel's lax buffer consideration again, which - * assumes, any decoder should have a buffer large enough for a 320 kbps - * frame at 32 kHz sample rate. - * - * old drain code: lame -b320 BlackBird.wav --. does not play with - * GraphEdit.exe using FhG decoder V1.5 Build 50 - * - * new drain code: lame -b320 BlackBird.wav --. plays fine with - * GraphEdit.exe using FhG decoder V1.5 Build 50 - * - * Robert Hegemann, 2010-02-13. - */ - /* - * drain as many bits as possible into previous frame ancillary data In - * particular, in VBR mode ResvMax may have changed, and we have to make - * sure main_data_begin does not create a reservoir bigger than ResvMax - * mt 4/00 - */ - { - var mdb_bytes = Math.min(l3_side.main_data_begin * 8, stuffingBits) / 8; - l3_side.resvDrain_pre += 8 * mdb_bytes; - stuffingBits -= 8 * mdb_bytes; - gfc.ResvSize -= 8 * mdb_bytes; - l3_side.main_data_begin -= mdb_bytes; - } - /* drain the rest into this frames ancillary data */ - l3_side.resvDrain_post += stuffingBits; - gfc.ResvSize -= stuffingBits; - } -} - -module.exports = Reservoir; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ScaleFac.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ScaleFac.js deleted file mode 100644 index 67197c441..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/ScaleFac.js +++ /dev/null @@ -1,52 +0,0 @@ -//package mp3; - -/** - * Layer III side information. - * - * @author Ken - * - */ - -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); - -function ScaleFac(arrL, arrS, arr21, arr12) { - - this.l = new_int(1 + Encoder.SBMAX_l); - this.s = new_int(1 + Encoder.SBMAX_s); - this.psfb21 = new_int(1 + Encoder.PSFB21); - this.psfb12 = new_int(1 + Encoder.PSFB12); - var l = this.l; - var s = this.s; - - if (arguments.length == 4) { - //public ScaleFac(final int[] arrL, final int[] arrS, final int[] arr21, - // final int[] arr12) { - this.arrL = arguments[0]; - this.arrS = arguments[1]; - this.arr21 = arguments[2]; - this.arr12 = arguments[3]; - - System.arraycopy(this.arrL, 0, l, 0, Math.min(this.arrL.length, this.l.length)); - System.arraycopy(this.arrS, 0, s, 0, Math.min(this.arrS.length, this.s.length)); - System.arraycopy(this.arr21, 0, this.psfb21, 0, Math.min(this.arr21.length, this.psfb21.length)); - System.arraycopy(this.arr12, 0, this.psfb12, 0, Math.min(this.arr12.length, this.psfb12.length)); - } -} - -module.exports = ScaleFac; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tables.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tables.js deleted file mode 100644 index 7620e1e1d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tables.js +++ /dev/null @@ -1,514 +0,0 @@ -function HuffCodeTab(len, max, tab, hl) { - this.xlen = len; - this.linmax = max; - this.table = tab; - this.hlen = hl; -} - -var Tables = {}; - - -Tables.t1HB = [ - 1, 1, - 1, 0 -]; - -Tables.t2HB = [ - 1, 2, 1, - 3, 1, 1, - 3, 2, 0 -]; - -Tables.t3HB = [ - 3, 2, 1, - 1, 1, 1, - 3, 2, 0 -]; - -Tables.t5HB = [ - 1, 2, 6, 5, - 3, 1, 4, 4, - 7, 5, 7, 1, - 6, 1, 1, 0 -]; - -Tables.t6HB = [ - 7, 3, 5, 1, - 6, 2, 3, 2, - 5, 4, 4, 1, - 3, 3, 2, 0 -]; - -Tables.t7HB = [ - 1, 2, 10, 19, 16, 10, - 3, 3, 7, 10, 5, 3, - 11, 4, 13, 17, 8, 4, - 12, 11, 18, 15, 11, 2, - 7, 6, 9, 14, 3, 1, - 6, 4, 5, 3, 2, 0 -]; - -Tables.t8HB = [ - 3, 4, 6, 18, 12, 5, - 5, 1, 2, 16, 9, 3, - 7, 3, 5, 14, 7, 3, - 19, 17, 15, 13, 10, 4, - 13, 5, 8, 11, 5, 1, - 12, 4, 4, 1, 1, 0 -]; - -Tables.t9HB = [ - 7, 5, 9, 14, 15, 7, - 6, 4, 5, 5, 6, 7, - 7, 6, 8, 8, 8, 5, - 15, 6, 9, 10, 5, 1, - 11, 7, 9, 6, 4, 1, - 14, 4, 6, 2, 6, 0 -]; - -Tables.t10HB = [ - 1, 2, 10, 23, 35, 30, 12, 17, - 3, 3, 8, 12, 18, 21, 12, 7, - 11, 9, 15, 21, 32, 40, 19, 6, - 14, 13, 22, 34, 46, 23, 18, 7, - 20, 19, 33, 47, 27, 22, 9, 3, - 31, 22, 41, 26, 21, 20, 5, 3, - 14, 13, 10, 11, 16, 6, 5, 1, - 9, 8, 7, 8, 4, 4, 2, 0 -]; - -Tables.t11HB = [ - 3, 4, 10, 24, 34, 33, 21, 15, - 5, 3, 4, 10, 32, 17, 11, 10, - 11, 7, 13, 18, 30, 31, 20, 5, - 25, 11, 19, 59, 27, 18, 12, 5, - 35, 33, 31, 58, 30, 16, 7, 5, - 28, 26, 32, 19, 17, 15, 8, 14, - 14, 12, 9, 13, 14, 9, 4, 1, - 11, 4, 6, 6, 6, 3, 2, 0 -]; - -Tables.t12HB = [ - 9, 6, 16, 33, 41, 39, 38, 26, - 7, 5, 6, 9, 23, 16, 26, 11, - 17, 7, 11, 14, 21, 30, 10, 7, - 17, 10, 15, 12, 18, 28, 14, 5, - 32, 13, 22, 19, 18, 16, 9, 5, - 40, 17, 31, 29, 17, 13, 4, 2, - 27, 12, 11, 15, 10, 7, 4, 1, - 27, 12, 8, 12, 6, 3, 1, 0 -]; - -Tables.t13HB = [ - 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, - 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, - 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, - 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, - 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, - 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, - 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, - 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, - 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, - 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, - 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, - 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, - 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, - 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, - 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, - 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1 -]; - -Tables.t15HB = [ - 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, - 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, - 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33, - 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, - 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, - 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38, - 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, - 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, - 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20, - 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, - 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, - 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11, - 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, - 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, - 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, - 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0 -]; - -Tables.t16HB = [ - 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, - 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, - 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16, - 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, - 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, - 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, - 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, - 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8, - 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, - 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, - 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, - 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, - 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, - 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, - 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0, - 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3 -]; - -Tables.t24HB = [ - 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, - 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, - 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18, - 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, - 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14, - 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, - 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, - 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, - 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, - 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, - 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, - 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, - 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, - 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, - 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, - 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3 -]; - -Tables.t32HB = [ - 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3, - 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4 -]; - -Tables.t33HB = [ - 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3, - 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4 -]; - -Tables.t1l = [ - 1, 4, - 3, 5 -]; - -Tables.t2l = [ - 1, 4, 7, - 4, 5, 7, - 6, 7, 8 -]; - -Tables.t3l = [ - 2, 3, 7, - 4, 4, 7, - 6, 7, 8 -]; - -Tables.t5l = [ - 1, 4, 7, 8, - 4, 5, 8, 9, - 7, 8, 9, 10, - 8, 8, 9, 10 -]; - -Tables.t6l = [ - 3, 4, 6, 8, - 4, 4, 6, 7, - 5, 6, 7, 8, - 7, 7, 8, 9 -]; - -Tables.t7l = [ - 1, 4, 7, 9, 9, 10, - 4, 6, 8, 9, 9, 10, - 7, 7, 9, 10, 10, 11, - 8, 9, 10, 11, 11, 11, - 8, 9, 10, 11, 11, 12, - 9, 10, 11, 12, 12, 12 -]; - -Tables.t8l = [ - 2, 4, 7, 9, 9, 10, - 4, 4, 6, 10, 10, 10, - 7, 6, 8, 10, 10, 11, - 9, 10, 10, 11, 11, 12, - 9, 9, 10, 11, 12, 12, - 10, 10, 11, 11, 13, 13 -]; - -Tables.t9l = [ - 3, 4, 6, 7, 9, 10, - 4, 5, 6, 7, 8, 10, - 5, 6, 7, 8, 9, 10, - 7, 7, 8, 9, 9, 10, - 8, 8, 9, 9, 10, 11, - 9, 9, 10, 10, 11, 11 -]; - -Tables.t10l = [ - 1, 4, 7, 9, 10, 10, 10, 11, - 4, 6, 8, 9, 10, 11, 10, 10, - 7, 8, 9, 10, 11, 12, 11, 11, - 8, 9, 10, 11, 12, 12, 11, 12, - 9, 10, 11, 12, 12, 12, 12, 12, - 10, 11, 12, 12, 13, 13, 12, 13, - 9, 10, 11, 12, 12, 12, 13, 13, - 10, 10, 11, 12, 12, 13, 13, 13 -]; - -Tables.t11l = [ - 2, 4, 6, 8, 9, 10, 9, 10, - 4, 5, 6, 8, 10, 10, 9, 10, - 6, 7, 8, 9, 10, 11, 10, 10, - 8, 8, 9, 11, 10, 12, 10, 11, - 9, 10, 10, 11, 11, 12, 11, 12, - 9, 10, 11, 12, 12, 13, 12, 13, - 9, 9, 9, 10, 11, 12, 12, 12, - 9, 9, 10, 11, 12, 12, 12, 12 -]; - -Tables.t12l = [ - 4, 4, 6, 8, 9, 10, 10, 10, - 4, 5, 6, 7, 9, 9, 10, 10, - 6, 6, 7, 8, 9, 10, 9, 10, - 7, 7, 8, 8, 9, 10, 10, 10, - 8, 8, 9, 9, 10, 10, 10, 11, - 9, 9, 10, 10, 10, 11, 10, 11, - 9, 9, 9, 10, 10, 11, 11, 12, - 10, 10, 10, 11, 11, 11, 11, 12 -]; - -Tables.t13l = [ - 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14, - 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14, - 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15, - 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15, - 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16, - 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16, - 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, - 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18, - 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, - 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17, - 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19, - 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18, - 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18, - 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18, - 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18, - 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18 -]; - -Tables.t15l = [ - 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14, - 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, - 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, - 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, - 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, - 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, - 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14, - 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, - 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14, - 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, - 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15, - 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, - 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15, - 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15 -]; - -Tables.t16_5l = [ - 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11, - 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11, - 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12, - 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13, - 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12, - 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13, - 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13, - 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13, - 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13, - 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14, - 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13, - 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14, - 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14, - 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14, - 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14, - 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12 -]; - -Tables.t16l = [ - 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10, - 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10, - 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11, - 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12, - 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11, - 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12, - 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12, - 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12, - 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12, - 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13, - 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12, - 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13, - 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13, - 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13, - 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13, - 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10 -]; - -Tables.t24l = [ - 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10, - 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10, - 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9, - 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9, - 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9, - 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9, - 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9, - 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10, - 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10, - 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, - 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10, - 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6 -]; - -Tables.t32l = [ - 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3, - 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4 -]; - -Tables.t33l = [ - 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3, - 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4 -]; - -Tables.ht = [ - /* xlen, linmax, table, hlen */ - new HuffCodeTab(0, 0, null, null), - new HuffCodeTab(2, 0, Tables.t1HB, Tables.t1l), - new HuffCodeTab(3, 0, Tables.t2HB, Tables.t2l), - new HuffCodeTab(3, 0, Tables.t3HB, Tables.t3l), - new HuffCodeTab(0, 0, null, null), /* Apparently not used */ - new HuffCodeTab(4, 0, Tables.t5HB, Tables.t5l), - new HuffCodeTab(4, 0, Tables.t6HB, Tables.t6l), - new HuffCodeTab(6, 0, Tables.t7HB, Tables.t7l), - new HuffCodeTab(6, 0, Tables.t8HB, Tables.t8l), - new HuffCodeTab(6, 0, Tables.t9HB, Tables.t9l), - new HuffCodeTab(8, 0, Tables.t10HB, Tables.t10l), - new HuffCodeTab(8, 0, Tables.t11HB, Tables.t11l), - new HuffCodeTab(8, 0, Tables.t12HB, Tables.t12l), - new HuffCodeTab(16, 0, Tables.t13HB, Tables.t13l), - new HuffCodeTab(0, 0, null, Tables.t16_5l), /* Apparently not used */ - new HuffCodeTab(16, 0, Tables.t15HB, Tables.t15l), - - new HuffCodeTab(1, 1, Tables.t16HB, Tables.t16l), - new HuffCodeTab(2, 3, Tables.t16HB, Tables.t16l), - new HuffCodeTab(3, 7, Tables.t16HB, Tables.t16l), - new HuffCodeTab(4, 15, Tables.t16HB, Tables.t16l), - new HuffCodeTab(6, 63, Tables.t16HB, Tables.t16l), - new HuffCodeTab(8, 255, Tables.t16HB, Tables.t16l), - new HuffCodeTab(10, 1023, Tables.t16HB, Tables.t16l), - new HuffCodeTab(13, 8191, Tables.t16HB, Tables.t16l), - - new HuffCodeTab(4, 15, Tables.t24HB, Tables.t24l), - new HuffCodeTab(5, 31, Tables.t24HB, Tables.t24l), - new HuffCodeTab(6, 63, Tables.t24HB, Tables.t24l), - new HuffCodeTab(7, 127, Tables.t24HB, Tables.t24l), - new HuffCodeTab(8, 255, Tables.t24HB, Tables.t24l), - new HuffCodeTab(9, 511, Tables.t24HB, Tables.t24l), - new HuffCodeTab(11, 2047, Tables.t24HB, Tables.t24l), - new HuffCodeTab(13, 8191, Tables.t24HB, Tables.t24l), - - new HuffCodeTab(0, 0, Tables.t32HB, Tables.t32l), - new HuffCodeTab(0, 0, Tables.t33HB, Tables.t33l), -]; - -/** - * - * for (i = 0; i < 16*16; i++) [ - * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i]; - * ] - * - * - */ -Tables.largetbl = [ - 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b, - 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a, - 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b, - 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a, - 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b, - 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009, - 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b, - 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009, - 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b, - 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009, - 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b, - 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009, - 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b, - 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009, - 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, - 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a, - 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, - 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a, - 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c, - 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a, - 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, - 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a, - 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c, - 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a, - 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, - 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a, - 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c, - 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a, - 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d, - 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a, - 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009, - 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006 -]; -/** - * - * for (i = 0; i < 3*3; i++) [ - * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i]; - * ] - * - * - */ -Tables.table23 = [ - 0x010002, 0x040003, 0x070007, - 0x040004, 0x050004, 0x070007, - 0x060006, 0x070007, 0x080008 -]; - -/** - * - * for (i = 0; i < 4*4; i++) [ - * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i]; - * ] - * - * - */ -Tables.table56 = [ - 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007, - 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009 -]; - -Tables.bitrate_table = [ - [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1], /* MPEG 2 */ - [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1], /* MPEG 1 */ - [0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1], /* MPEG 2.5 */ -]; - -/** - * MPEG 2, MPEG 1, MPEG 2.5. - */ -Tables.samplerate_table = [ - [22050, 24000, 16000, -1], - [44100, 48000, 32000, -1], - [11025, 12000, 8000, -1], -]; - -/** - * This is the scfsi_band table from 2.4.2.7 of the IS. - */ -Tables.scfsi_band = [0, 6, 11, 16, 21]; - -module.exports = Tables; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Takehiro.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Takehiro.js deleted file mode 100644 index 493ee0697..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Takehiro.js +++ /dev/null @@ -1,1175 +0,0 @@ -/* - * MP3 huffman table selecting and bit counting - * - * Copyright (c) 1999-2005 Takehiro TOMINAGA - * Copyright (c) 2002-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Takehiro.java,v 1.26 2011/05/24 20:48:06 kenchis Exp $ */ - -//package mp3; - -//import java.util.Arrays; -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Encoder = require('./Encoder.js'); -var Tables = require('./Tables.js'); -var GrInfo = require('./GrInfo.js'); -var QuantizePVT = require('./QuantizePVT.js'); - - -function Takehiro() { - - var qupvt = null; - this.qupvt = null; - - this.setModules = function (_qupvt) { - this.qupvt = _qupvt; - qupvt = _qupvt; - } - - function Bits(b) { - this.bits = 0 | b; - } - - var subdv_table = [[0, 0], /* 0 bands */ - [0, 0], /* 1 bands */ - [0, 0], /* 2 bands */ - [0, 0], /* 3 bands */ - [0, 0], /* 4 bands */ - [0, 1], /* 5 bands */ - [1, 1], /* 6 bands */ - [1, 1], /* 7 bands */ - [1, 2], /* 8 bands */ - [2, 2], /* 9 bands */ - [2, 3], /* 10 bands */ - [2, 3], /* 11 bands */ - [3, 4], /* 12 bands */ - [3, 4], /* 13 bands */ - [3, 4], /* 14 bands */ - [4, 5], /* 15 bands */ - [4, 5], /* 16 bands */ - [4, 6], /* 17 bands */ - [5, 6], /* 18 bands */ - [5, 6], /* 19 bands */ - [5, 7], /* 20 bands */ - [6, 7], /* 21 bands */ - [6, 7], /* 22 bands */ - ]; - - /** - * nonlinear quantization of xr More accurate formula than the ISO formula. - * Takes into account the fact that we are quantizing xr . ix, but we want - * ix^4/3 to be as close as possible to x^4/3. (taking the nearest int would - * mean ix is as close as possible to xr, which is different.) - * - * From Segher Boessenkool 11/1999 - * - * 09/2000: ASM code removed in favor of IEEE754 hack by Takehiro Tominaga. - * If you need the ASM code, check CVS circa Aug 2000. - * - * 01/2004: Optimizations by Gabriel Bouvigne - */ - function quantize_lines_xrpow_01(l, istep, xr, xrPos, ix, ixPos) { - var compareval0 = (1.0 - 0.4054) / istep; - - assert(l > 0); - l = l >> 1; - while ((l--) != 0) { - ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1; - ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1; - } - } - - /** - * XRPOW_FTOI is a macro to convert floats to ints.
- * if XRPOW_FTOI(x) = nearest_int(x), then QUANTFAC(x)=adj43asm[x]
- * ROUNDFAC= -0.0946
- * - * if XRPOW_FTOI(x) = floor(x), then QUANTFAC(x)=asj43[x]
- * ROUNDFAC=0.4054
- * - * Note: using floor() or 0| is extremely slow. On machines where the - * TAKEHIRO_IEEE754_HACK code above does not work, it is worthwile to write - * some ASM for XRPOW_FTOI(). - */ - function quantize_lines_xrpow(l, istep, xr, xrPos, ix, ixPos) { - assert(l > 0); - - l = l >> 1; - var remaining = l % 2; - l = l >> 1; - while (l-- != 0) { - var x0, x1, x2, x3; - var rx0, rx1, rx2, rx3; - - x0 = xr[xrPos++] * istep; - x1 = xr[xrPos++] * istep; - rx0 = 0 | x0; - x2 = xr[xrPos++] * istep; - rx1 = 0 | x1; - x3 = xr[xrPos++] * istep; - rx2 = 0 | x2; - x0 += qupvt.adj43[rx0]; - rx3 = 0 | x3; - x1 += qupvt.adj43[rx1]; - ix[ixPos++] = 0 | x0; - x2 += qupvt.adj43[rx2]; - ix[ixPos++] = 0 | x1; - x3 += qupvt.adj43[rx3]; - ix[ixPos++] = 0 | x2; - ix[ixPos++] = 0 | x3; - } - if (remaining != 0) { - var x0, x1; - var rx0, rx1; - - x0 = xr[xrPos++] * istep; - x1 = xr[xrPos++] * istep; - rx0 = 0 | x0; - rx1 = 0 | x1; - x0 += qupvt.adj43[rx0]; - x1 += qupvt.adj43[rx1]; - ix[ixPos++] = 0 | x0; - ix[ixPos++] = 0 | x1; - } - } - - /** - * Quantization function This function will select which lines to quantize - * and call the proper quantization function - */ - function quantize_xrpow(xp, pi, istep, codInfo, prevNoise) { - /* quantize on xr^(3/4) instead of xr */ - var sfb; - var sfbmax; - var j = 0; - var prev_data_use; - var accumulate = 0; - var accumulate01 = 0; - var xpPos = 0; - var iData = pi; - var iDataPos = 0; - var acc_iData = iData; - var acc_iDataPos = 0; - var acc_xp = xp; - var acc_xpPos = 0; - - /* - * Reusing previously computed data does not seems to work if global - * gain is changed. Finding why it behaves this way would allow to use a - * cache of previously computed values (let's 10 cached values per sfb) - * that would probably provide a noticeable speedup - */ - prev_data_use = (prevNoise != null && (codInfo.global_gain == prevNoise.global_gain)); - - if (codInfo.block_type == Encoder.SHORT_TYPE) - sfbmax = 38; - else - sfbmax = 21; - - for (sfb = 0; sfb <= sfbmax; sfb++) { - var step = -1; - - if (prev_data_use || codInfo.block_type == Encoder.NORM_TYPE) { - step = codInfo.global_gain - - ((codInfo.scalefac[sfb] + (codInfo.preflag != 0 ? qupvt.pretab[sfb] - : 0)) << (codInfo.scalefac_scale + 1)) - - codInfo.subblock_gain[codInfo.window[sfb]] * 8; - } - assert(codInfo.width[sfb] >= 0); - if (prev_data_use && (prevNoise.step[sfb] == step)) { - /* - * do not recompute this part, but compute accumulated lines - */ - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate = 0; - } - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - } - } else { /* should compute this part */ - var l = codInfo.width[sfb]; - - if ((j + codInfo.width[sfb]) > codInfo.max_nonzero_coeff) { - /* do not compute upper zero part */ - var usefullsize; - usefullsize = codInfo.max_nonzero_coeff - j + 1; - Arrays.fill(pi, codInfo.max_nonzero_coeff, 576, 0); - l = usefullsize; - - if (l < 0) { - l = 0; - } - - /* no need to compute higher sfb values */ - sfb = sfbmax + 1; - } - - /* accumulate lines to quantize */ - if (0 == accumulate && 0 == accumulate01) { - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - if (prevNoise != null && prevNoise.sfb_count1 > 0 - && sfb >= prevNoise.sfb_count1 - && prevNoise.step[sfb] > 0 - && step >= prevNoise.step[sfb]) { - - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate = 0; - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - accumulate01 += l; - } else { - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - accumulate += l; - } - - if (l <= 0) { - /* - * rh: 20040215 may happen due to "prev_data_use" - * optimization - */ - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - } - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate = 0; - } - - break; - /* ends for-loop */ - } - } - if (sfb <= sfbmax) { - iDataPos += codInfo.width[sfb]; - xpPos += codInfo.width[sfb]; - j += codInfo.width[sfb]; - } - } - if (accumulate != 0) { /* last data part */ - quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate = 0; - } - if (accumulate01 != 0) { /* last data part */ - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate01 = 0; - } - - } - - /** - * ix_max - */ - function ix_max(ix, ixPos, endPos) { - var max1 = 0, max2 = 0; - - do { - var x1 = ix[ixPos++]; - var x2 = ix[ixPos++]; - if (max1 < x1) - max1 = x1; - - if (max2 < x2) - max2 = x2; - } while (ixPos < endPos); - if (max1 < max2) - max1 = max2; - return max1; - } - - function count_bit_ESC(ix, ixPos, end, t1, t2, s) { - /* ESC-table is used */ - var linbits = Tables.ht[t1].xlen * 65536 + Tables.ht[t2].xlen; - var sum = 0, sum2; - - do { - var x = ix[ixPos++]; - var y = ix[ixPos++]; - - if (x != 0) { - if (x > 14) { - x = 15; - sum += linbits; - } - x *= 16; - } - - if (y != 0) { - if (y > 14) { - y = 15; - sum += linbits; - } - x += y; - } - - sum += Tables.largetbl[x]; - } while (ixPos < end); - - sum2 = sum & 0xffff; - sum >>= 16; - - if (sum > sum2) { - sum = sum2; - t1 = t2; - } - - s.bits += sum; - return t1; - } - - function count_bit_noESC(ix, ixPos, end, s) { - /* No ESC-words */ - var sum1 = 0; - var hlen1 = Tables.ht[1].hlen; - - do { - var x = ix[ixPos + 0] * 2 + ix[ixPos + 1]; - ixPos += 2; - sum1 += hlen1[x]; - } while (ixPos < end); - - s.bits += sum1; - return 1; - } - - function count_bit_noESC_from2(ix, ixPos, end, t1, s) { - /* No ESC-words */ - var sum = 0, sum2; - var xlen = Tables.ht[t1].xlen; - var hlen; - if (t1 == 2) - hlen = Tables.table23; - else - hlen = Tables.table56; - - do { - var x = ix[ixPos + 0] * xlen + ix[ixPos + 1]; - ixPos += 2; - sum += hlen[x]; - } while (ixPos < end); - - sum2 = sum & 0xffff; - sum >>= 16; - - if (sum > sum2) { - sum = sum2; - t1++; - } - - s.bits += sum; - return t1; - } - - function count_bit_noESC_from3(ix, ixPos, end, t1, s) { - /* No ESC-words */ - var sum1 = 0; - var sum2 = 0; - var sum3 = 0; - var xlen = Tables.ht[t1].xlen; - var hlen1 = Tables.ht[t1].hlen; - var hlen2 = Tables.ht[t1 + 1].hlen; - var hlen3 = Tables.ht[t1 + 2].hlen; - - do { - var x = ix[ixPos + 0] * xlen + ix[ixPos + 1]; - ixPos += 2; - sum1 += hlen1[x]; - sum2 += hlen2[x]; - sum3 += hlen3[x]; - } while (ixPos < end); - var t = t1; - if (sum1 > sum2) { - sum1 = sum2; - t++; - } - if (sum1 > sum3) { - sum1 = sum3; - t = t1 + 2; - } - s.bits += sum1; - - return t; - } - - /*************************************************************************/ - /* choose table */ - /*************************************************************************/ - - var huf_tbl_noESC = [1, 2, 5, 7, 7, 10, 10, 13, 13, - 13, 13, 13, 13, 13, 13]; - - /** - * Choose the Huffman table that will encode ix[begin..end] with the fewest - * bits. - * - * Note: This code contains knowledge about the sizes and characteristics of - * the Huffman tables as defined in the IS (Table B.7), and will not work - * with any arbitrary tables. - */ - function choose_table(ix, ixPos, endPos, s) { - var max = ix_max(ix, ixPos, endPos); - - switch (max) { - case 0: - return max; - - case 1: - return count_bit_noESC(ix, ixPos, endPos, s); - - case 2: - case 3: - return count_bit_noESC_from2(ix, ixPos, endPos, - huf_tbl_noESC[max - 1], s); - - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - return count_bit_noESC_from3(ix, ixPos, endPos, - huf_tbl_noESC[max - 1], s); - - default: - /* try tables with linbits */ - if (max > QuantizePVT.IXMAX_VAL) { - s.bits = QuantizePVT.LARGE_BITS; - return -1; - } - max -= 15; - var choice2; - for (choice2 = 24; choice2 < 32; choice2++) { - if (Tables.ht[choice2].linmax >= max) { - break; - } - } - var choice; - for (choice = choice2 - 8; choice < 24; choice++) { - if (Tables.ht[choice].linmax >= max) { - break; - } - } - return count_bit_ESC(ix, ixPos, endPos, choice, choice2, s); - } - } - - /** - * count_bit - */ - this.noquant_count_bits = function (gfc, gi, prev_noise) { - var ix = gi.l3_enc; - var i = Math.min(576, ((gi.max_nonzero_coeff + 2) >> 1) << 1); - - if (prev_noise != null) - prev_noise.sfb_count1 = 0; - - /* Determine count1 region */ - for (; i > 1; i -= 2) - if ((ix[i - 1] | ix[i - 2]) != 0) - break; - gi.count1 = i; - - /* Determines the number of bits to encode the quadruples. */ - var a1 = 0; - var a2 = 0; - for (; i > 3; i -= 4) { - var p; - /* hack to check if all values <= 1 */ - //throw "TODO: HACK if ((((long) ix[i - 1] | (long) ix[i - 2] | (long) ix[i - 3] | (long) ix[i - 4]) & 0xffffffffL) > 1L " - //if (true) { - if (((ix[i - 1] | ix[i - 2] | ix[i - 3] | ix[i - 4]) & 0x7fffffff) > 1) { - break; - } - p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 + ix[i - 1]; - a1 += Tables.t32l[p]; - a2 += Tables.t33l[p]; - } - var bits = a1; - gi.count1table_select = 0; - if (a1 > a2) { - bits = a2; - gi.count1table_select = 1; - } - - gi.count1bits = bits; - gi.big_values = i; - if (i == 0) - return bits; - - if (gi.block_type == Encoder.SHORT_TYPE) { - a1 = 3 * gfc.scalefac_band.s[3]; - if (a1 > gi.big_values) - a1 = gi.big_values; - a2 = gi.big_values; - - } else if (gi.block_type == Encoder.NORM_TYPE) { - assert(i <= 576); - /* bv_scf has 576 entries (0..575) */ - a1 = gi.region0_count = gfc.bv_scf[i - 2]; - a2 = gi.region1_count = gfc.bv_scf[i - 1]; - - assert(a1 + a2 + 2 < Encoder.SBPSY_l); - a2 = gfc.scalefac_band.l[a1 + a2 + 2]; - a1 = gfc.scalefac_band.l[a1 + 1]; - if (a2 < i) { - var bi = new Bits(bits); - gi.table_select[2] = choose_table(ix, a2, i, bi); - bits = bi.bits; - } - } else { - gi.region0_count = 7; - /* gi.region1_count = SBPSY_l - 7 - 1; */ - gi.region1_count = Encoder.SBMAX_l - 1 - 7 - 1; - a1 = gfc.scalefac_band.l[7 + 1]; - a2 = i; - if (a1 > a2) { - a1 = a2; - } - } - - /* have to allow for the case when bigvalues < region0 < region1 */ - /* (and region0, region1 are ignored) */ - a1 = Math.min(a1, i); - a2 = Math.min(a2, i); - - assert(a1 >= 0); - assert(a2 >= 0); - - /* Count the number of bits necessary to code the bigvalues region. */ - if (0 < a1) { - var bi = new Bits(bits); - gi.table_select[0] = choose_table(ix, 0, a1, bi); - bits = bi.bits; - } - if (a1 < a2) { - var bi = new Bits(bits); - gi.table_select[1] = choose_table(ix, a1, a2, bi); - bits = bi.bits; - } - if (gfc.use_best_huffman == 2) { - gi.part2_3_length = bits; - best_huffman_divide(gfc, gi); - bits = gi.part2_3_length; - } - - if (prev_noise != null) { - if (gi.block_type == Encoder.NORM_TYPE) { - var sfb = 0; - while (gfc.scalefac_band.l[sfb] < gi.big_values) { - sfb++; - } - prev_noise.sfb_count1 = sfb; - } - } - - return bits; - } - - this.count_bits = function (gfc, xr, gi, prev_noise) { - var ix = gi.l3_enc; - - /* since quantize_xrpow uses table lookup, we need to check this first: */ - var w = (QuantizePVT.IXMAX_VAL) / qupvt.IPOW20(gi.global_gain); - - if (gi.xrpow_max > w) - return QuantizePVT.LARGE_BITS; - - quantize_xrpow(xr, ix, qupvt.IPOW20(gi.global_gain), gi, prev_noise); - - if ((gfc.substep_shaping & 2) != 0) { - var j = 0; - /* 0.634521682242439 = 0.5946*2**(.5*0.1875) */ - var gain = gi.global_gain + gi.scalefac_scale; - var roundfac = 0.634521682242439 / qupvt.IPOW20(gain); - for (var sfb = 0; sfb < gi.sfbmax; sfb++) { - var width = gi.width[sfb]; - assert(width >= 0); - if (0 == gfc.pseudohalf[sfb]) { - j += width; - } else { - var k; - for (k = j, j += width; k < j; ++k) { - ix[k] = (xr[k] >= roundfac) ? ix[k] : 0; - } - } - } - } - return this.noquant_count_bits(gfc, gi, prev_noise); - } - - /** - * re-calculate the best scalefac_compress using scfsi the saved bits are - * kept in the bit reservoir. - */ - function recalc_divide_init(gfc, cod_info, ix, r01_bits, r01_div, r0_tbl, r1_tbl) { - var bigv = cod_info.big_values; - - for (var r0 = 0; r0 <= 7 + 15; r0++) { - r01_bits[r0] = QuantizePVT.LARGE_BITS; - } - - for (var r0 = 0; r0 < 16; r0++) { - var a1 = gfc.scalefac_band.l[r0 + 1]; - if (a1 >= bigv) - break; - var r0bits = 0; - var bi = new Bits(r0bits); - var r0t = choose_table(ix, 0, a1, bi); - r0bits = bi.bits; - - for (var r1 = 0; r1 < 8; r1++) { - var a2 = gfc.scalefac_band.l[r0 + r1 + 2]; - if (a2 >= bigv) - break; - var bits = r0bits; - bi = new Bits(bits); - var r1t = choose_table(ix, a1, a2, bi); - bits = bi.bits; - if (r01_bits[r0 + r1] > bits) { - r01_bits[r0 + r1] = bits; - r01_div[r0 + r1] = r0; - r0_tbl[r0 + r1] = r0t; - r1_tbl[r0 + r1] = r1t; - } - } - } - } - - function recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl) { - var bigv = cod_info2.big_values; - - for (var r2 = 2; r2 < Encoder.SBMAX_l + 1; r2++) { - var a2 = gfc.scalefac_band.l[r2]; - if (a2 >= bigv) - break; - var bits = r01_bits[r2 - 2] + cod_info2.count1bits; - if (gi.part2_3_length <= bits) - break; - - var bi = new Bits(bits); - var r2t = choose_table(ix, a2, bigv, bi); - bits = bi.bits; - if (gi.part2_3_length <= bits) - continue; - - gi.assign(cod_info2); - gi.part2_3_length = bits; - gi.region0_count = r01_div[r2 - 2]; - gi.region1_count = r2 - 2 - r01_div[r2 - 2]; - gi.table_select[0] = r0_tbl[r2 - 2]; - gi.table_select[1] = r1_tbl[r2 - 2]; - gi.table_select[2] = r2t; - } - } - - this.best_huffman_divide = function (gfc, gi) { - var cod_info2 = new GrInfo(); - var ix = gi.l3_enc; - var r01_bits = new_int(7 + 15 + 1); - var r01_div = new_int(7 + 15 + 1); - var r0_tbl = new_int(7 + 15 + 1); - var r1_tbl = new_int(7 + 15 + 1); - - /* SHORT BLOCK stuff fails for MPEG2 */ - if (gi.block_type == Encoder.SHORT_TYPE && gfc.mode_gr == 1) - return; - - cod_info2.assign(gi); - if (gi.block_type == Encoder.NORM_TYPE) { - recalc_divide_init(gfc, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl); - recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, - r0_tbl, r1_tbl); - } - var i = cod_info2.big_values; - if (i == 0 || (ix[i - 2] | ix[i - 1]) > 1) - return; - - i = gi.count1 + 2; - if (i > 576) - return; - - /* Determines the number of bits to encode the quadruples. */ - cod_info2.assign(gi); - cod_info2.count1 = i; - var a1 = 0; - var a2 = 0; - - assert(i <= 576); - - for (; i > cod_info2.big_values; i -= 4) { - var p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 - + ix[i - 1]; - a1 += Tables.t32l[p]; - a2 += Tables.t33l[p]; - } - cod_info2.big_values = i; - - cod_info2.count1table_select = 0; - if (a1 > a2) { - a1 = a2; - cod_info2.count1table_select = 1; - } - - cod_info2.count1bits = a1; - - if (cod_info2.block_type == Encoder.NORM_TYPE) - recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, - r0_tbl, r1_tbl); - else { - /* Count the number of bits necessary to code the bigvalues region. */ - cod_info2.part2_3_length = a1; - a1 = gfc.scalefac_band.l[7 + 1]; - if (a1 > i) { - a1 = i; - } - if (a1 > 0) { - var bi = new Bits(cod_info2.part2_3_length); - cod_info2.table_select[0] = choose_table(ix, 0, a1, bi); - cod_info2.part2_3_length = bi.bits; - } - if (i > a1) { - var bi = new Bits(cod_info2.part2_3_length); - cod_info2.table_select[1] = choose_table(ix, a1, i, bi); - cod_info2.part2_3_length = bi.bits; - } - if (gi.part2_3_length > cod_info2.part2_3_length) - gi.assign(cod_info2); - } - } - - var slen1_n = [1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16]; - var slen2_n = [1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8]; - var slen1_tab = [0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4]; - var slen2_tab = [0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3]; - Takehiro.slen1_tab = slen1_tab; - Takehiro.slen2_tab = slen2_tab; - - function scfsi_calc(ch, l3_side) { - var sfb; - var gi = l3_side.tt[1][ch]; - var g0 = l3_side.tt[0][ch]; - - for (var i = 0; i < Tables.scfsi_band.length - 1; i++) { - for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) { - if (g0.scalefac[sfb] != gi.scalefac[sfb] - && gi.scalefac[sfb] >= 0) - break; - } - if (sfb == Tables.scfsi_band[i + 1]) { - for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) { - gi.scalefac[sfb] = -1; - } - l3_side.scfsi[ch][i] = 1; - } - } - var s1 = 0; - var c1 = 0; - for (sfb = 0; sfb < 11; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - c1++; - if (s1 < gi.scalefac[sfb]) - s1 = gi.scalefac[sfb]; - } - var s2 = 0; - var c2 = 0; - for (; sfb < Encoder.SBPSY_l; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - c2++; - if (s2 < gi.scalefac[sfb]) - s2 = gi.scalefac[sfb]; - } - - for (var i = 0; i < 16; i++) { - if (s1 < slen1_n[i] && s2 < slen2_n[i]) { - var c = slen1_tab[i] * c1 + slen2_tab[i] * c2; - if (gi.part2_length > c) { - gi.part2_length = c; - gi.scalefac_compress = i; - } - } - } - } - - /** - * Find the optimal way to store the scalefactors. Only call this routine - * after final scalefactors have been chosen and the channel/granule will - * not be re-encoded. - */ - this.best_scalefac_store = function (gfc, gr, ch, l3_side) { - /* use scalefac_scale if we can */ - var gi = l3_side.tt[gr][ch]; - var sfb, i, j, l; - var recalc = 0; - - /* - * remove scalefacs from bands with ix=0. This idea comes from the AAC - * ISO docs. added mt 3/00 - */ - /* check if l3_enc=0 */ - j = 0; - for (sfb = 0; sfb < gi.sfbmax; sfb++) { - var width = gi.width[sfb]; - assert(width >= 0); - j += width; - for (l = -width; l < 0; l++) { - if (gi.l3_enc[l + j] != 0) - break; - } - if (l == 0) - gi.scalefac[sfb] = recalc = -2; - /* anything goes. */ - /* - * only best_scalefac_store and calc_scfsi know--and only they - * should know--about the magic number -2. - */ - } - - if (0 == gi.scalefac_scale && 0 == gi.preflag) { - var s = 0; - for (sfb = 0; sfb < gi.sfbmax; sfb++) - if (gi.scalefac[sfb] > 0) - s |= gi.scalefac[sfb]; - - if (0 == (s & 1) && s != 0) { - for (sfb = 0; sfb < gi.sfbmax; sfb++) - if (gi.scalefac[sfb] > 0) - gi.scalefac[sfb] >>= 1; - - gi.scalefac_scale = recalc = 1; - } - } - - if (0 == gi.preflag && gi.block_type != Encoder.SHORT_TYPE - && gfc.mode_gr == 2) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (gi.scalefac[sfb] < qupvt.pretab[sfb] - && gi.scalefac[sfb] != -2) - break; - if (sfb == Encoder.SBPSY_l) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (gi.scalefac[sfb] > 0) - gi.scalefac[sfb] -= qupvt.pretab[sfb]; - - gi.preflag = recalc = 1; - } - } - - for (i = 0; i < 4; i++) - l3_side.scfsi[ch][i] = 0; - - if (gfc.mode_gr == 2 && gr == 1 - && l3_side.tt[0][ch].block_type != Encoder.SHORT_TYPE - && l3_side.tt[1][ch].block_type != Encoder.SHORT_TYPE) { - scfsi_calc(ch, l3_side); - recalc = 0; - } - for (sfb = 0; sfb < gi.sfbmax; sfb++) { - if (gi.scalefac[sfb] == -2) { - gi.scalefac[sfb] = 0; - /* if anything goes, then 0 is a good choice */ - } - } - if (recalc != 0) { - if (gfc.mode_gr == 2) { - this.scale_bitcount(gi); - } else { - this.scale_bitcount_lsf(gfc, gi); - } - } - } - - function all_scalefactors_not_negative(scalefac, n) { - for (var i = 0; i < n; ++i) { - if (scalefac[i] < 0) - return false; - } - return true; - } - - /** - * number of bits used to encode scalefacs. - * - * 18*slen1_tab[i] + 18*slen2_tab[i] - */ - var scale_short = [0, 18, 36, 54, 54, 36, 54, 72, - 54, 72, 90, 72, 90, 108, 108, 126]; - - /** - * number of bits used to encode scalefacs. - * - * 17*slen1_tab[i] + 18*slen2_tab[i] - */ - var scale_mixed = [0, 18, 36, 54, 51, 35, 53, 71, - 52, 70, 88, 69, 87, 105, 104, 122]; - - /** - * number of bits used to encode scalefacs. - * - * 11*slen1_tab[i] + 10*slen2_tab[i] - */ - var scale_long = [0, 10, 20, 30, 33, 21, 31, 41, 32, 42, - 52, 43, 53, 63, 64, 74]; - - /** - * Also calculates the number of bits necessary to code the scalefactors. - */ - this.scale_bitcount = function (cod_info) { - var k, sfb, max_slen1 = 0, max_slen2 = 0; - - /* maximum values */ - var tab; - var scalefac = cod_info.scalefac; - - assert(all_scalefactors_not_negative(scalefac, cod_info.sfbmax)); - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - tab = scale_short; - if (cod_info.mixed_block_flag != 0) - tab = scale_mixed; - } else { /* block_type == 1,2,or 3 */ - tab = scale_long; - if (0 == cod_info.preflag) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (scalefac[sfb] < qupvt.pretab[sfb]) - break; - - if (sfb == Encoder.SBPSY_l) { - cod_info.preflag = 1; - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - scalefac[sfb] -= qupvt.pretab[sfb]; - } - } - } - - for (sfb = 0; sfb < cod_info.sfbdivide; sfb++) - if (max_slen1 < scalefac[sfb]) - max_slen1 = scalefac[sfb]; - - for (; sfb < cod_info.sfbmax; sfb++) - if (max_slen2 < scalefac[sfb]) - max_slen2 = scalefac[sfb]; - - /* - * from Takehiro TOMINAGA 10/99 loop over *all* - * posible values of scalefac_compress to find the one which uses the - * smallest number of bits. ISO would stop at first valid index - */ - cod_info.part2_length = QuantizePVT.LARGE_BITS; - for (k = 0; k < 16; k++) { - if (max_slen1 < slen1_n[k] && max_slen2 < slen2_n[k] - && cod_info.part2_length > tab[k]) { - cod_info.part2_length = tab[k]; - cod_info.scalefac_compress = k; - } - } - return cod_info.part2_length == QuantizePVT.LARGE_BITS; - } - - /** - * table of largest scalefactor values for MPEG2 - */ - var max_range_sfac_tab = [[15, 15, 7, 7], - [15, 15, 7, 0], [7, 3, 0, 0], [15, 31, 31, 0], - [7, 7, 7, 0], [3, 3, 0, 0]]; - - /** - * Also counts the number of bits to encode the scalefacs but for MPEG 2 - * Lower sampling frequencies (24, 22.05 and 16 kHz.) - * - * This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS, - * "Audio Decoding Layer III" - */ - this.scale_bitcount_lsf = function (gfc, cod_info) { - var table_number, row_in_table, partition, nr_sfb, window; - var over; - var i, sfb; - var max_sfac = new_int(4); -//var partition_table; - var scalefac = cod_info.scalefac; - - /* - * Set partition table. Note that should try to use table one, but do - * not yet... - */ - if (cod_info.preflag != 0) - table_number = 2; - else - table_number = 0; - - for (i = 0; i < 4; i++) - max_sfac[i] = 0; - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - row_in_table = 1; - var partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (sfb = 0, partition = 0; partition < 4; partition++) { - nr_sfb = partition_table[partition] / 3; - for (i = 0; i < nr_sfb; i++, sfb++) - for (window = 0; window < 3; window++) - if (scalefac[sfb * 3 + window] > max_sfac[partition]) - max_sfac[partition] = scalefac[sfb * 3 + window]; - } - } else { - row_in_table = 0; - var partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (sfb = 0, partition = 0; partition < 4; partition++) { - nr_sfb = partition_table[partition]; - for (i = 0; i < nr_sfb; i++, sfb++) - if (scalefac[sfb] > max_sfac[partition]) - max_sfac[partition] = scalefac[sfb]; - } - } - - for (over = false, partition = 0; partition < 4; partition++) { - if (max_sfac[partition] > max_range_sfac_tab[table_number][partition]) - over = true; - } - if (!over) { - var slen1, slen2, slen3, slen4; - - cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (partition = 0; partition < 4; partition++) - cod_info.slen[partition] = log2tab[max_sfac[partition]]; - - /* set scalefac_compress */ - slen1 = cod_info.slen[0]; - slen2 = cod_info.slen[1]; - slen3 = cod_info.slen[2]; - slen4 = cod_info.slen[3]; - - switch (table_number) { - case 0: - cod_info.scalefac_compress = (((slen1 * 5) + slen2) << 4) - + (slen3 << 2) + slen4; - break; - - case 1: - cod_info.scalefac_compress = 400 + (((slen1 * 5) + slen2) << 2) - + slen3; - break; - - case 2: - cod_info.scalefac_compress = 500 + (slen1 * 3) + slen2; - break; - - default: - System.err.printf("intensity stereo not implemented yet\n"); - break; - } - } - if (!over) { - assert(cod_info.sfb_partition_table != null); - cod_info.part2_length = 0; - for (partition = 0; partition < 4; partition++) - cod_info.part2_length += cod_info.slen[partition] - * cod_info.sfb_partition_table[partition]; - } - return over; - } - - /* - * Since no bands have been over-amplified, we can set scalefac_compress and - * slen[] for the formatter - */ - var log2tab = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, - 4, 4, 4, 4]; - - this.huffman_init = function (gfc) { - for (var i = 2; i <= 576; i += 2) { - var scfb_anz = 0, bv_index; - while (gfc.scalefac_band.l[++scfb_anz] < i) - ; - - bv_index = subdv_table[scfb_anz][0]; // .region0_count - while (gfc.scalefac_band.l[bv_index + 1] > i) - bv_index--; - - if (bv_index < 0) { - /* - * this is an indication that everything is going to be encoded - * as region0: bigvalues < region0 < region1 so lets set - * region0, region1 to some value larger than bigvalues - */ - bv_index = subdv_table[scfb_anz][0]; // .region0_count - } - - gfc.bv_scf[i - 2] = bv_index; - - bv_index = subdv_table[scfb_anz][1]; // .region1_count - while (gfc.scalefac_band.l[bv_index + gfc.bv_scf[i - 2] + 2] > i) - bv_index--; - - if (bv_index < 0) { - bv_index = subdv_table[scfb_anz][1]; // .region1_count - } - - gfc.bv_scf[i - 1] = bv_index; - } - } -} - -module.exports = Takehiro; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tests.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tests.js deleted file mode 100644 index e65e23c07..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Tests.js +++ /dev/null @@ -1,84 +0,0 @@ -var fs = require("fs"); -var path = require("path") -var common = require("./common.js"); - -var lamejs = require("./index"); - -var WavHeader = lamejs.WavHeader; -var Mp3Encoder = lamejs.Mp3Encoder; - -var assert = common.assert; - -function testFullLength() { - var r = fs.readFileSync(path.join("testdata", "Left44100.wav")); - var sampleBuf = new Uint8Array(r).buffer; - var w = WavHeader.readHeader(new DataView(sampleBuf)); - var samples = new Int16Array(sampleBuf, w.dataOffset, w.dataLen / 2); - var remaining = samples.length; - var lameEnc = new Mp3Encoder(); //w.channels, w.sampleRate, 128); - var maxSamples = 1152; - - var fd = fs.openSync(path.join("testdata", "testjs2.mp3"), "w"); - var time = new Date().getTime(); - for (var i = 0; remaining >= maxSamples; i += maxSamples) { - var left = samples.subarray(i, i + maxSamples); - var right = samples.subarray(i, i + maxSamples); - - var mp3buf = lameEnc.encodeBuffer(left, right); - if (mp3buf.length > 0) { - fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length); - } - remaining -= maxSamples; - } - var mp3buf = lameEnc.flush(); - if (mp3buf.length > 0) { - fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length); - } - fs.closeSync(fd); - time = new Date().getTime() - time; - console.log('done in ' + time + 'msec'); -} - -function testStereo44100() { - var r1 = fs.readFileSync(path.join("testdata", "Left44100.wav")); - var r2 = fs.readFileSync(path.join("testdata", "Right44100.wav")); - var fd = fs.openSync(path.join("testdata", "stereo.mp3"), "w"); - - var sampleBuf1 = new Uint8Array(r1).buffer; - var sampleBuf2 = new Uint8Array(r2).buffer; - var w1 = WavHeader.readHeader(new DataView(sampleBuf1)); - var w2 = WavHeader.readHeader(new DataView(sampleBuf2)); - - var samples1 = new Int16Array(sampleBuf1, w1.dataOffset, w1.dataLen / 2); - var samples2 = new Int16Array(sampleBuf2, w2.dataOffset, w2.dataLen / 2); - var remaining1 = samples1.length; - var remaining2 = samples2.length; - assert(remaining1 == remaining2); - assert(w1.sampleRate == w2.sampleRate); - - var lameEnc = new Mp3Encoder(2, w1.sampleRate, 128); - var maxSamples = 1152; - - var time = new Date().getTime(); - for (var i = 0; remaining1 >= maxSamples; i += maxSamples) { - var left = samples1.subarray(i, i + maxSamples); - var right = samples2.subarray(i, i + maxSamples); - - var mp3buf = lameEnc.encodeBuffer(left, right); - if (mp3buf.length > 0) { - fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length); - } - remaining1 -= maxSamples; - - } - var mp3buf = lameEnc.flush(); - if (mp3buf.length > 0) { - fs.writeSync(fd, new Buffer(mp3buf), 0, mp3buf.length); - } - fs.closeSync(fd); - time = new Date().getTime() - time; - console.log('done in ' + time + 'msec'); -} - -testStereo44100(); -testFullLength(); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRQuantize.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRQuantize.js deleted file mode 100644 index 3cde95727..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRQuantize.js +++ /dev/null @@ -1,13 +0,0 @@ -function VBRQuantize() { - var qupvt; - var tak; - - this.setModules = function (_qupvt, _tk) { - qupvt = _qupvt; - tak = _tk; - } - //TODO - -} - -module.exports = VBRQuantize; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRSeekInfo.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRSeekInfo.js deleted file mode 100644 index 24d284f3e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRSeekInfo.js +++ /dev/null @@ -1,34 +0,0 @@ -//package mp3; - -function VBRSeekInfo() { - /** - * What we have seen so far. - */ - this.sum = 0; - /** - * How many frames we have seen in this chunk. - */ - this.seen = 0; - /** - * How many frames we want to collect into one chunk. - */ - this.want = 0; - /** - * Actual position in our bag. - */ - this.pos = 0; - /** - * Size of our bag. - */ - this.size = 0; - /** - * Pointer to our bag. - */ - this.bag = null; - this.nVbrNumFrames = 0; - this.nBytesWritten = 0; - /* VBR tag data */ - this.TotalFrameSize = 0; -} - -module.exports = VBRSeekInfo; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRTag.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRTag.js deleted file mode 100644 index 164405a92..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/VBRTag.js +++ /dev/null @@ -1,970 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -/** - * A Vbr header may be present in the ancillary data field of the first frame of - * an mp3 bitstream
- * The Vbr header (optionally) contains - *
    - *
  • frames total number of audio frames in the bitstream - *
  • bytes total number of bytes in the bitstream - *
  • toc table of contents - *
- * - * toc (table of contents) gives seek points for random access.
- * The ith entry determines the seek point for i-percent duration.
- * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes
- * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes - */ -VBRTag.NUMTOCENTRIES = 100; -VBRTag.MAXFRAMESIZE = 2880; - -function VBRTag() { - - var lame; - var bs; - var v; - - this.setModules = function (_lame, _bs, _v) { - lame = _lame; - bs = _bs; - v = _v; - }; - - var FRAMES_FLAG = 0x0001; - var BYTES_FLAG = 0x0002; - var TOC_FLAG = 0x0004; - var VBR_SCALE_FLAG = 0x0008; - - var NUMTOCENTRIES = VBRTag.NUMTOCENTRIES; - - /** - * (0xB40) the max freeformat 640 32kHz framesize. - */ - var MAXFRAMESIZE = VBRTag.MAXFRAMESIZE; - - /** - *
-     *    4 bytes for Header Tag
-     *    4 bytes for Header Flags
-     *  100 bytes for entry (toc)
-     *    4 bytes for frame size
-     *    4 bytes for stream size
-     *    4 bytes for VBR scale. a VBR quality indicator: 0=best 100=worst
-     *   20 bytes for LAME tag.  for example, "LAME3.12 (beta 6)"
-     * ___________
-     *  140 bytes
-     * 
- */ - var VBRHEADERSIZE = (NUMTOCENTRIES + 4 + 4 + 4 + 4 + 4); - - var LAMEHEADERSIZE = (VBRHEADERSIZE + 9 + 1 + 1 + 8 - + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2); - - /** - * The size of the Xing header MPEG-1, bit rate in kbps. - */ - var XING_BITRATE1 = 128; - /** - * The size of the Xing header MPEG-2, bit rate in kbps. - */ - var XING_BITRATE2 = 64; - /** - * The size of the Xing header MPEG-2.5, bit rate in kbps. - */ - var XING_BITRATE25 = 32; - - /** - * ISO-8859-1 charset for byte to string operations. - */ - var ISO_8859_1 = null; //Charset.forName("ISO-8859-1"); - - /** - * VBR header magic string. - */ - var VBRTag0 = "Xing"; - /** - * VBR header magic string (VBR == VBRMode.vbr_off). - */ - var VBRTag1 = "Info"; - - /** - * Lookup table for fast CRC-16 computation. Uses the polynomial - * x^16+x^15+x^2+1 - */ - var crc16Lookup = [0x0000, 0xC0C1, 0xC181, 0x0140, - 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, - 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, - 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, - 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, - 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, - 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, - 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, - 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, - 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, - 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, - 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, - 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, - 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, - 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, - 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, - 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, - 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, - 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, - 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, - 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, - 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, - 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, - 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, - 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, - 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, - 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, - 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, - 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, - 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, - 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, - 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, - 0x4100, 0x81C1, 0x8081, 0x4040]; - - /*********************************************************************** - * Robert Hegemann 2001-01-17 - ***********************************************************************/ - - function addVbr(v, bitrate) { - v.nVbrNumFrames++; - v.sum += bitrate; - v.seen++; - - if (v.seen < v.want) { - return; - } - - if (v.pos < v.size) { - v.bag[v.pos] = v.sum; - v.pos++; - v.seen = 0; - } - if (v.pos == v.size) { - for (var i = 1; i < v.size; i += 2) { - v.bag[i / 2] = v.bag[i]; - } - v.want *= 2; - v.pos /= 2; - } - } - - function xingSeekTable(v, t) { - if (v.pos <= 0) - return; - - for (var i = 1; i < NUMTOCENTRIES; ++i) { - var j = i / NUMTOCENTRIES, act, sum; - var indx = 0 | (Math.floor(j * v.pos)); - if (indx > v.pos - 1) - indx = v.pos - 1; - act = v.bag[indx]; - sum = v.sum; - var seek_point = 0 | (256. * act / sum); - if (seek_point > 255) - seek_point = 255; - t[i] = 0xff & seek_point; - } - } - - /** - * Add VBR entry, used to fill the VBR TOC entries. - * - * @param gfp - * global flags - */ - this.addVbrFrame = function (gfp) { - var gfc = gfp.internal_flags; - var kbps = Tables.bitrate_table[gfp.version][gfc.bitrate_index]; - assert(gfc.VBR_seek_table.bag != null); - addVbr(gfc.VBR_seek_table, kbps); - } - - /** - * Read big endian integer (4-bytes) from header. - * - * @param buf - * header containing the integer - * @param bufPos - * offset into the header - * @return extracted integer - */ - function extractInteger(buf, bufPos) { - var x = buf[bufPos + 0] & 0xff; - x <<= 8; - x |= buf[bufPos + 1] & 0xff; - x <<= 8; - x |= buf[bufPos + 2] & 0xff; - x <<= 8; - x |= buf[bufPos + 3] & 0xff; - return x; - } - - /** - * Write big endian integer (4-bytes) in the header. - * - * @param buf - * header to write the integer into - * @param bufPos - * offset into the header - * @param value - * integer value to write - */ - function createInteger(buf, bufPos, value) { - buf[bufPos + 0] = 0xff & ((value >> 24) & 0xff); - buf[bufPos + 1] = 0xff & ((value >> 16) & 0xff); - buf[bufPos + 2] = 0xff & ((value >> 8) & 0xff); - buf[bufPos + 3] = 0xff & (value & 0xff); - } - - /** - * Write big endian short (2-bytes) in the header. - * - * @param buf - * header to write the integer into - * @param bufPos - * offset into the header - * @param value - * integer value to write - */ - function createShort(buf, bufPos, value) { - buf[bufPos + 0] = 0xff & ((value >> 8) & 0xff); - buf[bufPos + 1] = 0xff & (value & 0xff); - } - - /** - * Check for magic strings (Xing/Info). - * - * @param buf - * header to check - * @param bufPos - * header offset to check - * @return magic string found - */ - function isVbrTag(buf, bufPos) { - return new String(buf, bufPos, VBRTag0.length(), ISO_8859_1) - .equals(VBRTag0) - || new String(buf, bufPos, VBRTag1.length(), ISO_8859_1) - .equals(VBRTag1); - } - - function shiftInBitsValue(x, n, v) { - return 0xff & ((x << n) | (v & ~(-1 << n))); - } - - /** - * Construct the MP3 header using the settings of the global flags. - * - * - * - * @param gfp - * global flags - * @param buffer - * header - */ - function setLameTagFrameHeader(gfp, buffer) { - var gfc = gfp.internal_flags; - - // MP3 Sync Word - buffer[0] = shiftInBitsValue(buffer[0], 8, 0xff); - - buffer[1] = shiftInBitsValue(buffer[1], 3, 7); - buffer[1] = shiftInBitsValue(buffer[1], 1, - (gfp.out_samplerate < 16000) ? 0 : 1); - // Version - buffer[1] = shiftInBitsValue(buffer[1], 1, gfp.version); - // 01 == Layer 3 - buffer[1] = shiftInBitsValue(buffer[1], 2, 4 - 3); - // Error protection - buffer[1] = shiftInBitsValue(buffer[1], 1, (!gfp.error_protection) ? 1 - : 0); - - // Bit rate - buffer[2] = shiftInBitsValue(buffer[2], 4, gfc.bitrate_index); - // Frequency - buffer[2] = shiftInBitsValue(buffer[2], 2, gfc.samplerate_index); - // Pad. Bit - buffer[2] = shiftInBitsValue(buffer[2], 1, 0); - // Priv. Bit - buffer[2] = shiftInBitsValue(buffer[2], 1, gfp.extension); - - // Mode - buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.mode.ordinal()); - // Mode extension (Used with Joint Stereo) - buffer[3] = shiftInBitsValue(buffer[3], 2, gfc.mode_ext); - // Copy - buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.copyright); - // Original - buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.original); - // Emphasis - buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.emphasis); - - /* the default VBR header. 48 kbps layer III, no padding, no crc */ - /* but sampling freq, mode and copyright/copy protection taken */ - /* from first valid frame */ - buffer[0] = 0xff; - var abyte = 0xff & (buffer[1] & 0xf1); - var bitrate; - if (1 == gfp.version) { - bitrate = XING_BITRATE1; - } else { - if (gfp.out_samplerate < 16000) - bitrate = XING_BITRATE25; - else - bitrate = XING_BITRATE2; - } - - if (gfp.VBR == VbrMode.vbr_off) - bitrate = gfp.brate; - - var bbyte; - if (gfp.free_format) - bbyte = 0x00; - else - bbyte = 0xff & (16 * lame.BitrateIndex(bitrate, gfp.version, - gfp.out_samplerate)); - - /* - * Use as much of the info from the real frames in the Xing header: - * samplerate, channels, crc, etc... - */ - if (gfp.version == 1) { - /* MPEG1 */ - buffer[1] = 0xff & (abyte | 0x0a); - /* was 0x0b; */ - abyte = 0xff & (buffer[2] & 0x0d); - /* AF keep also private bit */ - buffer[2] = 0xff & (bbyte | abyte); - /* 64kbs MPEG1 frame */ - } else { - /* MPEG2 */ - buffer[1] = 0xff & (abyte | 0x02); - /* was 0x03; */ - abyte = 0xff & (buffer[2] & 0x0d); - /* AF keep also private bit */ - buffer[2] = 0xff & (bbyte | abyte); - /* 64kbs MPEG2 frame */ - } - } - - /** - * Get VBR tag information - * - * @param buf - * header to analyze - * @param bufPos - * offset into the header - * @return VBR tag data - */ - this.getVbrTag = function (buf) { - var pTagData = new VBRTagData(); - var bufPos = 0; - - /* get Vbr header data */ - pTagData.flags = 0; - - /* get selected MPEG header data */ - var hId = (buf[bufPos + 1] >> 3) & 1; - var hSrIndex = (buf[bufPos + 2] >> 2) & 3; - var hMode = (buf[bufPos + 3] >> 6) & 3; - var hBitrate = ((buf[bufPos + 2] >> 4) & 0xf); - hBitrate = Tables.bitrate_table[hId][hBitrate]; - - /* check for FFE syncword */ - if ((buf[bufPos + 1] >> 4) == 0xE) - pTagData.samprate = Tables.samplerate_table[2][hSrIndex]; - else - pTagData.samprate = Tables.samplerate_table[hId][hSrIndex]; - - /* determine offset of header */ - if (hId != 0) { - /* mpeg1 */ - if (hMode != 3) - bufPos += (32 + 4); - else - bufPos += (17 + 4); - } else { - /* mpeg2 */ - if (hMode != 3) - bufPos += (17 + 4); - else - bufPos += (9 + 4); - } - - if (!isVbrTag(buf, bufPos)) - return null; - - bufPos += 4; - - pTagData.hId = hId; - - /* get flags */ - var head_flags = pTagData.flags = extractInteger(buf, bufPos); - bufPos += 4; - - if ((head_flags & FRAMES_FLAG) != 0) { - pTagData.frames = extractInteger(buf, bufPos); - bufPos += 4; - } - - if ((head_flags & BYTES_FLAG) != 0) { - pTagData.bytes = extractInteger(buf, bufPos); - bufPos += 4; - } - - if ((head_flags & TOC_FLAG) != 0) { - if (pTagData.toc != null) { - for (var i = 0; i < NUMTOCENTRIES; i++) - pTagData.toc[i] = buf[bufPos + i]; - } - bufPos += NUMTOCENTRIES; - } - - pTagData.vbrScale = -1; - - if ((head_flags & VBR_SCALE_FLAG) != 0) { - pTagData.vbrScale = extractInteger(buf, bufPos); - bufPos += 4; - } - - pTagData.headersize = ((hId + 1) * 72000 * hBitrate) - / pTagData.samprate; - - bufPos += 21; - var encDelay = buf[bufPos + 0] << 4; - encDelay += buf[bufPos + 1] >> 4; - var encPadding = (buf[bufPos + 1] & 0x0F) << 8; - encPadding += buf[bufPos + 2] & 0xff; - /* check for reasonable values (this may be an old Xing header, */ - /* not a INFO tag) */ - if (encDelay < 0 || encDelay > 3000) - encDelay = -1; - if (encPadding < 0 || encPadding > 3000) - encPadding = -1; - - pTagData.encDelay = encDelay; - pTagData.encPadding = encPadding; - - /* success */ - return pTagData; - } - - /** - * Initializes the header - * - * @param gfp - * global flags - */ - this.InitVbrTag = function (gfp) { - var gfc = gfp.internal_flags; - - /** - *
-         * Xing VBR pretends to be a 48kbs layer III frame.  (at 44.1kHz).
-         * (at 48kHz they use 56kbs since 48kbs frame not big enough for
-         * table of contents)
-         * let's always embed Xing header inside a 64kbs layer III frame.
-         * this gives us enough room for a LAME version string too.
-         * size determined by sampling frequency (MPEG1)
-         * 32kHz:    216 bytes@48kbs    288bytes@ 64kbs
-         * 44.1kHz:  156 bytes          208bytes@64kbs     (+1 if padding = 1)
-         * 48kHz:    144 bytes          192
-         *
-         * MPEG 2 values are the same since the framesize and samplerate
-         * are each reduced by a factor of 2.
-         * 
- */ - var kbps_header; - if (1 == gfp.version) { - kbps_header = XING_BITRATE1; - } else { - if (gfp.out_samplerate < 16000) - kbps_header = XING_BITRATE25; - else - kbps_header = XING_BITRATE2; - } - - if (gfp.VBR == VbrMode.vbr_off) - kbps_header = gfp.brate; - - // make sure LAME Header fits into Frame - var totalFrameSize = ((gfp.version + 1) * 72000 * kbps_header) - / gfp.out_samplerate; - var headerSize = (gfc.sideinfo_len + LAMEHEADERSIZE); - gfc.VBR_seek_table.TotalFrameSize = totalFrameSize; - if (totalFrameSize < headerSize || totalFrameSize > MAXFRAMESIZE) { - /* disable tag, it wont fit */ - gfp.bWriteVbrTag = false; - return; - } - - gfc.VBR_seek_table.nVbrNumFrames = 0; - gfc.VBR_seek_table.nBytesWritten = 0; - gfc.VBR_seek_table.sum = 0; - - gfc.VBR_seek_table.seen = 0; - gfc.VBR_seek_table.want = 1; - gfc.VBR_seek_table.pos = 0; - - if (gfc.VBR_seek_table.bag == null) { - gfc.VBR_seek_table.bag = new int[400]; - gfc.VBR_seek_table.size = 400; - } - - // write dummy VBR tag of all 0's into bitstream - var buffer = new_byte(MAXFRAMESIZE); - - setLameTagFrameHeader(gfp, buffer); - var n = gfc.VBR_seek_table.TotalFrameSize; - for (var i = 0; i < n; ++i) { - bs.add_dummy_byte(gfp, buffer[i] & 0xff, 1); - } - } - - /** - * Fast CRC-16 computation (uses table crc16Lookup). - * - * @param value - * @param crc - * @return - */ - function crcUpdateLookup(value, crc) { - var tmp = crc ^ value; - crc = (crc >> 8) ^ crc16Lookup[tmp & 0xff]; - return crc; - } - - this.updateMusicCRC = function (crc, buffer, bufferPos, size) { - for (var i = 0; i < size; ++i) - crc[0] = crcUpdateLookup(buffer[bufferPos + i], crc[0]); - } - - /** - * Write LAME info: mini version + info on various switches used (Jonathan - * Dee 2001/08/31). - * - * @param gfp - * global flags - * @param musicLength - * music length - * @param streamBuffer - * pointer to output buffer - * @param streamBufferPos - * offset into the output buffer - * @param crc - * computation of CRC-16 of Lame Tag so far (starting at frame - * sync) - * @return number of bytes written to the stream - */ - function putLameVBR(gfp, musicLength, streamBuffer, streamBufferPos, crc) { - var gfc = gfp.internal_flags; - var bytesWritten = 0; - - /* encoder delay */ - var encDelay = gfp.encoder_delay; - /* encoder padding */ - var encPadding = gfp.encoder_padding; - - /* recall: gfp.VBR_q is for example set by the switch -V */ - /* gfp.quality by -q, -h, -f, etc */ - var quality = (100 - 10 * gfp.VBR_q - gfp.quality); - - var version = v.getLameVeryShortVersion(); - var vbr; - var revision = 0x00; - var revMethod; - // numbering different in vbr_mode vs. Lame tag - var vbrTypeTranslator = [1, 5, 3, 2, 4, 0, 3]; - var lowpass = 0 | (((gfp.lowpassfreq / 100.0) + .5) > 255 ? 255 - : (gfp.lowpassfreq / 100.0) + .5); - var peakSignalAmplitude = 0; - var radioReplayGain = 0; - var audiophileReplayGain = 0; - var noiseShaping = gfp.internal_flags.noise_shaping; - var stereoMode = 0; - var nonOptimal = 0; - var sourceFreq = 0; - var misc = 0; - var musicCRC = 0; - - // psy model type: Gpsycho or NsPsytune - var expNPsyTune = (gfp.exp_nspsytune & 1) != 0; - var safeJoint = (gfp.exp_nspsytune & 2) != 0; - var noGapMore = false; - var noGapPrevious = false; - var noGapCount = gfp.internal_flags.nogap_total; - var noGapCurr = gfp.internal_flags.nogap_current; - - // 4 bits - var athType = gfp.ATHtype; - var flags = 0; - - // vbr modes - var abrBitrate; - switch (gfp.VBR) { - case vbr_abr: - abrBitrate = gfp.VBR_mean_bitrate_kbps; - break; - case vbr_off: - abrBitrate = gfp.brate; - break; - default: - abrBitrate = gfp.VBR_min_bitrate_kbps; - } - - // revision and vbr method - if (gfp.VBR.ordinal() < vbrTypeTranslator.length) - vbr = vbrTypeTranslator[gfp.VBR.ordinal()]; - else - vbr = 0x00; // unknown - - revMethod = 0x10 * revision + vbr; - - // ReplayGain - if (gfc.findReplayGain) { - if (gfc.RadioGain > 0x1FE) - gfc.RadioGain = 0x1FE; - if (gfc.RadioGain < -0x1FE) - gfc.RadioGain = -0x1FE; - - // set name code - radioReplayGain = 0x2000; - // set originator code to `determined automatically' - radioReplayGain |= 0xC00; - - if (gfc.RadioGain >= 0) { - // set gain adjustment - radioReplayGain |= gfc.RadioGain; - } else { - // set the sign bit - radioReplayGain |= 0x200; - // set gain adjustment - radioReplayGain |= -gfc.RadioGain; - } - } - - // peak sample - if (gfc.findPeakSample) - peakSignalAmplitude = Math - .abs(0 | ((( gfc.PeakSample) / 32767.0) * Math.pow(2, 23) + .5)); - - // nogap - if (noGapCount != -1) { - if (noGapCurr > 0) - noGapPrevious = true; - - if (noGapCurr < noGapCount - 1) - noGapMore = true; - } - - // flags - flags = athType + ((expNPsyTune ? 1 : 0) << 4) - + ((safeJoint ? 1 : 0) << 5) + ((noGapMore ? 1 : 0) << 6) - + ((noGapPrevious ? 1 : 0) << 7); - - if (quality < 0) - quality = 0; - - // stereo mode field (Intensity stereo is not implemented) - switch (gfp.mode) { - case MONO: - stereoMode = 0; - break; - case STEREO: - stereoMode = 1; - break; - case DUAL_CHANNEL: - stereoMode = 2; - break; - case JOINT_STEREO: - if (gfp.force_ms) - stereoMode = 4; - else - stereoMode = 3; - break; - case NOT_SET: - //$FALL-THROUGH$ - default: - stereoMode = 7; - break; - } - - if (gfp.in_samplerate <= 32000) - sourceFreq = 0x00; - else if (gfp.in_samplerate == 48000) - sourceFreq = 0x02; - else if (gfp.in_samplerate > 48000) - sourceFreq = 0x03; - else { - // default is 44100Hz - sourceFreq = 0x01; - } - - // Check if the user overrided the default LAME behavior with some - // nasty options - if (gfp.short_blocks == ShortBlock.short_block_forced - || gfp.short_blocks == ShortBlock.short_block_dispensed - || ((gfp.lowpassfreq == -1) && (gfp.highpassfreq == -1)) || /* "-k" */ - (gfp.scale_left < gfp.scale_right) - || (gfp.scale_left > gfp.scale_right) - || (gfp.disable_reservoir && gfp.brate < 320) || gfp.noATH - || gfp.ATHonly || (athType == 0) || gfp.in_samplerate <= 32000) - nonOptimal = 1; - - misc = noiseShaping + (stereoMode << 2) + (nonOptimal << 5) - + (sourceFreq << 6); - - musicCRC = gfc.nMusicCRC; - - // Write all this information into the stream - - createInteger(streamBuffer, streamBufferPos + bytesWritten, quality); - bytesWritten += 4; - - for (var j = 0; j < 9; j++) { - streamBuffer[streamBufferPos + bytesWritten + j] = 0xff & version .charAt(j); - } - bytesWritten += 9; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & revMethod; - bytesWritten++; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & lowpass; - bytesWritten++; - - createInteger(streamBuffer, streamBufferPos + bytesWritten, - peakSignalAmplitude); - bytesWritten += 4; - - createShort(streamBuffer, streamBufferPos + bytesWritten, - radioReplayGain); - bytesWritten += 2; - - createShort(streamBuffer, streamBufferPos + bytesWritten, - audiophileReplayGain); - bytesWritten += 2; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & flags; - bytesWritten++; - - if (abrBitrate >= 255) - streamBuffer[streamBufferPos + bytesWritten] = 0xFF; - else - streamBuffer[streamBufferPos + bytesWritten] = 0xff & abrBitrate; - bytesWritten++; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & (encDelay >> 4); - streamBuffer[streamBufferPos + bytesWritten + 1] = 0xff & ((encDelay << 4) + (encPadding >> 8)); - streamBuffer[streamBufferPos + bytesWritten + 2] = 0xff & encPadding; - - bytesWritten += 3; - - streamBuffer[streamBufferPos + bytesWritten] = 0xff & misc; - bytesWritten++; - - // unused in rev0 - streamBuffer[streamBufferPos + bytesWritten++] = 0; - - createShort(streamBuffer, streamBufferPos + bytesWritten, gfp.preset); - bytesWritten += 2; - - createInteger(streamBuffer, streamBufferPos + bytesWritten, musicLength); - bytesWritten += 4; - - createShort(streamBuffer, streamBufferPos + bytesWritten, musicCRC); - bytesWritten += 2; - - // Calculate tag CRC.... must be done here, since it includes previous - // information - - for (var i = 0; i < bytesWritten; i++) - crc = crcUpdateLookup(streamBuffer[streamBufferPos + i], crc); - - createShort(streamBuffer, streamBufferPos + bytesWritten, crc); - bytesWritten += 2; - - return bytesWritten; - } - - function skipId3v2(fpStream) { - // seek to the beginning of the stream - fpStream.seek(0); - // read 10 bytes in case there's an ID3 version 2 header here - var id3v2Header = new_byte(10); - fpStream.readFully(id3v2Header); - /* does the stream begin with the ID3 version 2 file identifier? */ - var id3v2TagSize; - if (!new String(id3v2Header, "ISO-8859-1").startsWith("ID3")) { - /* - * the tag size (minus the 10-byte header) is encoded into four - * bytes where the most significant bit is clear in each byte - */ - id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21) - | ((id3v2Header[7] & 0x7f) << 14) - | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f)) - + id3v2Header.length; - } else { - /* no ID3 version 2 tag in this stream */ - id3v2TagSize = 0; - } - return id3v2TagSize; - } - - this.getLameTagFrame = function (gfp, buffer) { - var gfc = gfp.internal_flags; - - if (!gfp.bWriteVbrTag) { - return 0; - } - if (gfc.Class_ID != Lame.LAME_ID) { - return 0; - } - if (gfc.VBR_seek_table.pos <= 0) { - return 0; - } - if (buffer.length < gfc.VBR_seek_table.TotalFrameSize) { - return gfc.VBR_seek_table.TotalFrameSize; - } - - Arrays.fill(buffer, 0, gfc.VBR_seek_table.TotalFrameSize, 0); - - // 4 bytes frame header - setLameTagFrameHeader(gfp, buffer); - - // Create TOC entries - var toc = new_byte(NUMTOCENTRIES); - - if (gfp.free_format) { - for (var i = 1; i < NUMTOCENTRIES; ++i) - toc[i] = 0xff & (255 * i / 100); - } else { - xingSeekTable(gfc.VBR_seek_table, toc); - } - - // Start writing the tag after the zero frame - var streamIndex = gfc.sideinfo_len; - /** - * Note: Xing header specifies that Xing data goes in the ancillary data - * with NO ERROR PROTECTION. If error protecton in enabled, the Xing - * data still starts at the same offset, and now it is in sideinfo data - * block, and thus will not decode correctly by non-Xing tag aware - * players - */ - if (gfp.error_protection) - streamIndex -= 2; - - // Put Vbr tag - if (gfp.VBR == VbrMode.vbr_off) { - buffer[streamIndex++] = 0xff & VBRTag1.charAt(0); - buffer[streamIndex++] = 0xff & VBRTag1.charAt(1); - buffer[streamIndex++] = 0xff & VBRTag1.charAt(2); - buffer[streamIndex++] = 0xff & VBRTag1.charAt(3); - - } else { - buffer[streamIndex++] = 0xff & VBRTag0.charAt(0); - buffer[streamIndex++] = 0xff & VBRTag0.charAt(1); - buffer[streamIndex++] = 0xff & VBRTag0.charAt(2); - buffer[streamIndex++] = 0xff & VBRTag0.charAt(3); - } - - // Put header flags - createInteger(buffer, streamIndex, FRAMES_FLAG + BYTES_FLAG + TOC_FLAG - + VBR_SCALE_FLAG); - streamIndex += 4; - - // Put Total Number of frames - createInteger(buffer, streamIndex, gfc.VBR_seek_table.nVbrNumFrames); - streamIndex += 4; - - // Put total audio stream size, including Xing/LAME Header - var streamSize = (gfc.VBR_seek_table.nBytesWritten + gfc.VBR_seek_table.TotalFrameSize); - createInteger(buffer, streamIndex, 0 | streamSize); - streamIndex += 4; - - /* Put TOC */ - System.arraycopy(toc, 0, buffer, streamIndex, toc.length); - streamIndex += toc.length; - - if (gfp.error_protection) { - // (jo) error_protection: add crc16 information to header - bs.CRC_writeheader(gfc, buffer); - } - - // work out CRC so far: initially crc = 0 - var crc = 0x00; - for (var i = 0; i < streamIndex; i++) - crc = crcUpdateLookup(buffer[i], crc); - // Put LAME VBR info - streamIndex += putLameVBR(gfp, streamSize, buffer, streamIndex, crc); - - return gfc.VBR_seek_table.TotalFrameSize; - } - - /** - * Write final VBR tag to the file. - * - * @param gfp - * global flags - * @param stream - * stream to add the VBR tag to - * @return 0 (OK), -1 else - * @throws IOException - * I/O error - */ - this.putVbrTag = function (gfp, stream) { - var gfc = gfp.internal_flags; - - if (gfc.VBR_seek_table.pos <= 0) - return -1; - - // Seek to end of file - stream.seek(stream.length()); - - // Get file size, abort if file has zero length. - if (stream.length() == 0) - return -1; - - // The VBR tag may NOT be located at the beginning of the stream. If an - // ID3 version 2 tag was added, then it must be skipped to write the VBR - // tag data. - var id3v2TagSize = skipId3v2(stream); - - // Seek to the beginning of the stream - stream.seek(id3v2TagSize); - - var buffer = new_byte(MAXFRAMESIZE); - var bytes = getLameTagFrame(gfp, buffer); - if (bytes > buffer.length) { - return -1; - } - - if (bytes < 1) { - return 0; - } - - // Put it all to disk again - stream.write(buffer, 0, bytes); - // success - return 0; - } - -} - -module.exports = VBRTag; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Version.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Version.js deleted file mode 100644 index e8c0d0dbd..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/Version.js +++ /dev/null @@ -1,90 +0,0 @@ -function Version() { - - /** - * URL for the LAME website. - */ - var LAME_URL = "http://www.mp3dev.org/"; - - /** - * Major version number. - */ - var LAME_MAJOR_VERSION = 3; - /** - * Minor version number. - */ - var LAME_MINOR_VERSION = 98; - /** - * Patch level. - */ - var LAME_PATCH_VERSION = 4; - - /** - * Major version number. - */ - var PSY_MAJOR_VERSION = 0; - /** - * Minor version number. - */ - var PSY_MINOR_VERSION = 93; - - /** - * A string which describes the version of LAME. - * - * @return string which describes the version of LAME - */ - this.getLameVersion = function () { - // primary to write screen reports - return (LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "." + LAME_PATCH_VERSION); - } - - /** - * The short version of the LAME version string. - * - * @return short version of the LAME version string - */ - this.getLameShortVersion = function () { - // Adding date and time to version string makes it harder for output - // validation - return (LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "." + LAME_PATCH_VERSION); - } - - /** - * The shortest version of the LAME version string. - * - * @return shortest version of the LAME version string - */ - this.getLameVeryShortVersion = function () { - // Adding date and time to version string makes it harder for output - return ("LAME" + LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "r"); - } - - /** - * String which describes the version of GPSYCHO - * - * @return string which describes the version of GPSYCHO - */ - this.getPsyVersion = function () { - return (PSY_MAJOR_VERSION + "." + PSY_MINOR_VERSION); - } - - /** - * String which is a URL for the LAME website. - * - * @return string which is a URL for the LAME website - */ - this.getLameUrl = function () { - return LAME_URL; - } - - /** - * Quite useless for a java version, however we are compatible ;-) - * - * @return "32bits" - */ - this.getLameOsBitness = function () { - return "32bits"; - } - -} - -module.exports = Version; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/common.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/common.js deleted file mode 100644 index a179be631..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/common.js +++ /dev/null @@ -1,169 +0,0 @@ -function new_byte(count) { - return new Int8Array(count); -} - -function new_short(count) { - return new Int16Array(count); -} - -function new_int(count) { - return new Int32Array(count); -} - -function new_float(count) { - return new Float32Array(count); -} - -function new_double(count) { - return new Float64Array(count); -} - -function new_float_n(args) { - if (args.length == 1) { - return new_float(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_float_n(args)); - } - return A; -} -function new_int_n(args) { - if (args.length == 1) { - return new_int(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_int_n(args)); - } - return A; -} - -function new_short_n(args) { - if (args.length == 1) { - return new_short(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_short_n(args)); - } - return A; -} - -function new_array_n(args) { - if (args.length == 1) { - return new Array(args[0]); - } - var sz = args[0]; - args = args.slice(1); - var A = []; - for (var i = 0; i < sz; i++) { - A.push(new_array_n(args)); - } - return A; -} - - -var Arrays = {}; - -Arrays.fill = function (a, fromIndex, toIndex, val) { - if (arguments.length == 2) { - for (var i = 0; i < a.length; i++) { - a[i] = arguments[1]; - } - } else { - for (var i = fromIndex; i < toIndex; i++) { - a[i] = val; - } - } -}; - -var System = {}; - -System.arraycopy = function (src, srcPos, dest, destPos, length) { - var srcEnd = srcPos + length; - while (srcPos < srcEnd) - dest[destPos++] = src[srcPos++]; -}; - -System.out = {}; -System.out.println = function (message) { - console.log(message); -} - -System.out.printf = function () { - console.log.apply(console, arguments); -} - - -var Util = {}; -Util.SQRT2 = 1.41421356237309504880; -Util.FAST_LOG10 = function (x) { - return Math.log10(x); -}; - -Util.FAST_LOG10_X = function (x, y) { - return Math.log10(x) * y; -}; - -function ShortBlock(ordinal) { - this.ordinal = ordinal; -} -/** - * LAME may use them, even different block types for L/R. - */ -ShortBlock.short_block_allowed = new ShortBlock(0); -/** - * LAME may use them, but always same block types in L/R. - */ -ShortBlock.short_block_coupled = new ShortBlock(1); -/** - * LAME will not use short blocks, long blocks only. - */ -ShortBlock.short_block_dispensed = new ShortBlock(2); -/** - * LAME will not use long blocks, short blocks only. - */ -ShortBlock.short_block_forced = new ShortBlock(3); - -var Float = {}; -Float.MAX_VALUE = 3.4028235e+38; - -function VbrMode(ordinal) { - this.ordinal = ordinal; -} -VbrMode.vbr_off = new VbrMode(0); -VbrMode.vbr_mt = new VbrMode(1); -VbrMode.vbr_rh = new VbrMode(2); -VbrMode.vbr_abr = new VbrMode(3); -VbrMode.vbr_mtrh = new VbrMode(4); -VbrMode.vbr_default = VbrMode.vbr_mtrh; - -var assert = function (x) { - //console.assert(x); -}; - -module.exports = { - "System": System, - "VbrMode": VbrMode, - "Float": Float, - "ShortBlock": ShortBlock, - "Util": Util, - "Arrays": Arrays, - "new_array_n": new_array_n, - "new_byte": new_byte, - "new_double": new_double, - "new_float": new_float, - "new_float_n": new_float_n, - "new_int": new_int, - "new_int_n": new_int_n, - "new_short": new_short, - "new_short_n": new_short_n, - "assert": assert -}; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/index.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/index.js deleted file mode 100644 index 156f72b06..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/js/index.js +++ /dev/null @@ -1,196 +0,0 @@ -var common = require('./common.js'); -var System = common.System; -var VbrMode = common.VbrMode; -var Float = common.Float; -var ShortBlock = common.ShortBlock; -var Util = common.Util; -var Arrays = common.Arrays; -var new_array_n = common.new_array_n; -var new_byte = common.new_byte; -var new_double = common.new_double; -var new_float = common.new_float; -var new_float_n = common.new_float_n; -var new_int = common.new_int; -var new_int_n = common.new_int_n; -var assert = common.assert; - -var Lame = require('./Lame.js'); -var Presets = require('./Presets.js'); -var GainAnalysis = require('./GainAnalysis.js'); -var QuantizePVT = require('./QuantizePVT.js'); -var Quantize = require('./Quantize.js'); -var Takehiro = require('./Takehiro.js'); -var Reservoir = require('./Reservoir.js'); -var MPEGMode = require('./MPEGMode.js'); -var BitStream = require('./BitStream.js'); -var Encoder = require('./Encoder.js'); -var Version = require('./Version.js'); -var VBRTag = require('./VBRTag.js'); - -function GetAudio() { - var parse; - var mpg; - - this.setModules = function (parse2, mpg2) { - parse = parse2; - mpg = mpg2; - } -} - - -function Parse() { - var ver; - var id3; - var pre; - - this.setModules = function (ver2, id32, pre2) { - ver = ver2; - id3 = id32; - pre = pre2; - } -} - -function MPGLib() { -} - -function ID3Tag() { - var bits; - var ver; - - this.setModules = function (_bits, _ver) { - bits = _bits; - ver = _ver; - } -} - -function Mp3Encoder(channels, samplerate, kbps) { - if (arguments.length != 3) { - console.error('WARN: Mp3Encoder(channels, samplerate, kbps) not specified'); - channels = 1; - samplerate = 44100; - kbps = 128; - } - var lame = new Lame(); - var gaud = new GetAudio(); - var ga = new GainAnalysis(); - var bs = new BitStream(); - var p = new Presets(); - var qupvt = new QuantizePVT(); - var qu = new Quantize(); - var vbr = new VBRTag(); - var ver = new Version(); - var id3 = new ID3Tag(); - var rv = new Reservoir(); - var tak = new Takehiro(); - var parse = new Parse(); - var mpg = new MPGLib(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - var gfp = lame.lame_init(); - - gfp.num_channels = channels; - gfp.in_samplerate = samplerate; - gfp.brate = kbps; - gfp.mode = MPEGMode.STEREO; - gfp.quality = 3; - gfp.bWriteVbrTag = false; - gfp.disable_reservoir = true; - gfp.write_id3tag_automatic = false; - - var retcode = lame.lame_init_params(gfp); - assert(0 == retcode); - var maxSamples = 1152; - var mp3buf_size = 0 | (1.25 * maxSamples + 7200); - var mp3buf = new_byte(mp3buf_size); - - this.encodeBuffer = function (left, right) { - if (channels == 1) { - right = left; - } - assert(left.length == right.length); - if (left.length > maxSamples) { - maxSamples = left.length; - mp3buf_size = 0 | (1.25 * maxSamples + 7200); - mp3buf = new_byte(mp3buf_size); - } - - var _sz = lame.lame_encode_buffer(gfp, left, right, left.length, mp3buf, 0, mp3buf_size); - return new Int8Array(mp3buf.subarray(0, _sz)); - }; - - this.flush = function () { - var _sz = lame.lame_encode_flush(gfp, mp3buf, 0, mp3buf_size); - return new Int8Array(mp3buf.subarray(0, _sz)); - }; -} - -function WavHeader() { - this.dataOffset = 0; - this.dataLen = 0; - this.channels = 0; - this.sampleRate = 0; -} - -function fourccToInt(fourcc) { - return fourcc.charCodeAt(0) << 24 | fourcc.charCodeAt(1) << 16 | fourcc.charCodeAt(2) << 8 | fourcc.charCodeAt(3); -} - -WavHeader.RIFF = fourccToInt("RIFF"); -WavHeader.WAVE = fourccToInt("WAVE"); -WavHeader.fmt_ = fourccToInt("fmt "); -WavHeader.data = fourccToInt("data"); - -WavHeader.readHeader = function (dataView) { - var w = new WavHeader(); - - var header = dataView.getUint32(0, false); - if (WavHeader.RIFF != header) { - return; - } - var fileLen = dataView.getUint32(4, true); - if (WavHeader.WAVE != dataView.getUint32(8, false)) { - return; - } - if (WavHeader.fmt_ != dataView.getUint32(12, false)) { - return; - } - var fmtLen = dataView.getUint32(16, true); - var pos = 16 + 4; - switch (fmtLen) { - case 16: - case 18: - w.channels = dataView.getUint16(pos + 2, true); - w.sampleRate = dataView.getUint32(pos + 4, true); - break; - default: - throw 'extended fmt chunk not implemented'; - } - pos += fmtLen; - var data = WavHeader.data; - var len = 0; - while (data != header) { - header = dataView.getUint32(pos, false); - len = dataView.getUint32(pos + 4, true); - if (data == header) { - break; - } - pos += (len + 8); - } - w.dataLen = len; - w.dataOffset = pos + 8; - return w; -}; - -module.exports.Mp3Encoder = Mp3Encoder; -module.exports.WavHeader = WavHeader; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/assembly/bundle.xml b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/assembly/bundle.xml deleted file mode 100644 index f0c32f953..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/assembly/bundle.xml +++ /dev/null @@ -1,37 +0,0 @@ - - bundle - - dir - zip - - - - /lib - - - - - src/main/resources/run.bat - /bin - true - - - src/main/resources/run.sh - /bin - true - unix - - - src/main/resources/LameUI.xml - /conf - true - - - src/main/resources/picture.png - /images - false - - - \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/COPYING b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/COPYING deleted file mode 100644 index f5030495b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/COPYING +++ /dev/null @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/LICENSE b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/LICENSE deleted file mode 100644 index 3d186e3c8..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/LICENSE +++ /dev/null @@ -1,12 +0,0 @@ -Can I use LAME in my commercial program? - -Yes, you can, under the restrictions of the LGPL. The easiest -way to do this is to: - -1. Link to LAME as separate jar (jump3r.jar) - -2. Fully acknowledge that you are using LAME, and give a link - to our web site, www.mp3dev.org - -3. If you make modifications to LAME, you *must* release these - these modifications back to the LAME project, under the LGPL. diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/README b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/README deleted file mode 100644 index 826fbfb58..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/README +++ /dev/null @@ -1,7 +0,0 @@ -jump3r - Java Unofficial MP3 EncodeR - -...is a Java version of lame-3.98.4 - -Java port created by Ken Händel. -Original sources by the authors of Lame: -http://www.sourceforge.net/projects/lame \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/USAGE b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/USAGE deleted file mode 100644 index a1136ed55..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/USAGE +++ /dev/null @@ -1,707 +0,0 @@ - -java -jar jump3r.jar [options] inputfile [outputfile] - -For more options, just type: -java -jar jump3r.jar --help - - -======================================================================= -Constant Bitrate Examples: -======================================================================= -fixed bit rate jstereo 128 kbps encoding: -java -jar jump3r.jar sample.wav sample.mp3 - -fixed bit rate jstereo 128 kbps encoding, higher quality: (recommended) -java -jar jump3r.jar -h sample.wav sample.mp3 - -Fast encode, low quality (no noise shaping) -java -jar jump3r.jar -f sample.wav sample.mp3 - -======================================================================= -Variable Bitrate Examples: -======================================================================= -LAME has two types of variable bitrate: ABR and VBR. - -ABR is the type of variable bitrate encoding usually found in other -MP3 encoders, Vorbis and AAC. The number of bits is determined by -some metric (like perceptual entropy, or just the number of bits -needed for a certain set of encoding tables), and it is not based on -computing the actual encoding/quantization error. ABR should always -give results equal or better than CBR: - -ABR: (--abr means encode with an average bitrate of around x kbps) -java -jar jump3r.jar -h --abr 128 sample.wav sample.mp3 - - -VBR is a true variable bitrate mode which bases the number of bits for -each frame on the measured quantization error relative to the -estimated allowed masking. There are 10 compression levels defined, -ranging from 0=lowest compression to 9 highest compression. The resulting -filesizes depend on the input material. On typical music you can expect --V 5 resulting in files averaging 132 kbps, -V 2 averaging 200 kbps. - -Variable Bitrate (VBR): (use -V n to adjust quality/filesize) -java -jar jump3r.jar -V 2 sample.wav sample.mp3 - - - -======================================================================= -LOW BITRATES -======================================================================= -At lower bitrates, (like 24 kbps per channel), it is recommended that -you use a 16 kHz sampling rate combined with lowpass filtering. LAME, -as well as commercial encoders (FhG, Xing) will do this automatically. -However, if you feel there is too much (or not enough) lowpass -filtering, you may need to try different values of the lowpass cutoff -and passband width (--resample, --lowpass and --lowpass-width options). - - -======================================================================= -options guide: -======================================================================= -These options are explained in detail below. - - -Quality related: - --m m/s/j/f/a mode selection --q n Internal algorithm quality setting 0..9. - 0 = slowest algorithms, but potentially highest quality - 9 = faster algorithms, very poor quality --h same as -q2 --f same as -q7 - - -Constant Bit Rate (CBR) --b n set bitrate (8, 16, 24, ..., 320) ---freeformat produce a free format bitstream. User must also specify - a bitrate with -b, between 8 and 640 kbps. - -Variable Bit Rate (VBR) --v VBR ---vbr-old use old variable bitrate (VBR) routine ---vbr-new use new variable bitrate (VBR) routine (default) --V n VBR quality setting (0=highest quality, 9=lowest) --b n specify a minimum allowed bitrate (8,16,24,...,320) --B n specify a maximum allowed bitrate (8,16,24,...,320) --F strictly enforce minimum bitrate --t disable VBR informational tag ---nohist disable display of VBR bitrate histogram - ---abr n specify average bitrate desired - - -Operational: - --r assume input file is raw PCM --s n input sampling frequency in kHz (for raw PCM input files) ---resample n output sampling frequency ---mp3input input file is an MP3 file. decode using mpglib/mpg123 --x swap bytes of input file ---scale multiply PCM input by ---scale-l scale channel 0 (left) input (multiply PCM data) by ---scale-r scale channel 1 (right) input (multiply PCM data) by --a downmix stereo input file to mono .mp3 --e n/5/c de-emphasis --p add CRC error protection --c mark the encoded file as copyrighted --o mark the encoded file as a copy --S don't print progress report, VBR histogram ---strictly-enforce-ISO comply as much as possible to ISO MPEG spec ---replaygain-fast compute RG fast but slightly inaccurately (default) ---replaygain-accurate compute RG more accurately and find the peak sample ---noreplaygain disable ReplayGain analysis ---clipdetect enable --replaygain-accurate and print a message whether - clipping occurs and how far the waveform is from full scale - ---decode assume input file is an mp3 file, and decode to wav. --t disable writing of WAV header when using --decode - (decode to raw pcm, native endian format (use -x to swap)) - - - -ID3 tagging: - ---tt audio/song title (max 30 chars for version 1 tag) ---ta <artist> audio/song artist (max 30 chars for version 1 tag) ---tl <album> audio/song album (max 30 chars for version 1 tag) ---ty <year> audio/song year of issue (1 to 9999) ---tc <comment> user-defined text (max 30 chars for v1 tag, 28 for v1.1) ---tn <track> audio/song track number (1 to 255, creates v1.1 tag) ---tg <genre> audio/song genre (name or number in list) ---add-id3v2 force addition of version 2 tag ---id3v1-only add only a version 1 tag ---id3v2-only add only a version 2 tag ---space-id3v1 pad version 1 tag with spaces instead of nulls ---pad-id3v2 same as '--pad-id3v2-size 128' ---pad-id3v2-size <num> adds version 2 tag, pad with extra <num> bytes ---genre-list print alphabetically sorted ID3 genre list and exit - -Note: A version 2 tag will NOT be added unless one of the input fields -won't fit in a version 1 tag (e.g. the title string is longer than 30 -characters), or the '--add-id3v2' or '--id3v2-only' options are used. - -Windows and OS/2-specific options: - --priority <type> sets the process priority - - -options not yet described: ---nores disable bit reservoir ---disptime - ---lowpass ---lowpass-width ---highpass ---highpass-width - - - - - -======================================================================= -Detailed description of all options in alphabetical order -======================================================================= - - -======================================================================= -downmix -======================================================================= --a - -mix the stereo input file to mono and encode as mono. - -This option is only needed in the case of raw PCM stereo input -(because LAME cannot determine the number of channels in the input file). -To encode a stereo PCM input file as mono, use "java -jar jump3r.jar -m s -a" - -For WAV and AIFF input files, using "-m m" will always produce a -mono .mp3 file from both mono and stereo input. - - -======================================================================= -average bitrate encoding (aka Safe VBR) -======================================================================= ---abr n - -turns on encoding with a targeted average bitrate of n kbps, allowing -to use frames of different sizes. The allowed range of n is 8...320 -kbps, you can use any integer value within that range. - - - - - -======================================================================= -bitrate -======================================================================= --b n - -For MPEG-1 (sampling frequencies of 32, 44.1 and 48 kHz) -n = 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 - -For MPEG-2 (sampling frequencies of 16, 22.05 and 24 kHz) -n = 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 - -For MPEG-2.5 (sampling frequencies of 8, 11.025 and 12 kHz) -n = 8, 16, 24, 32, 40, 48, 56, 64 - - -The bitrate to be used. Default is 128 kbps MPEG1, 80 kbps MPEG2. - -When used with variable bitrate encodings (VBR), -b specifies the -minimum bitrate to use. This is useful only if you need to circumvent -a buggy hardware device with strange bitrate constrains. - - -======================================================================= -max bitrate -======================================================================= --B n - -see also option "-b" for allowed bitrates. - -Maximum allowed bitrate when using VBR/ABR. - -Using -B is NOT RECOMMENDED. A 128 kbps CBR bitstream, because of the -bit reservoir, can actually have frames which use as many bits as a -320 kbps frame. ABR/VBR modes minimize the use of the bit reservoir, and -thus need to allow 320 kbps frames to get the same flexability as CBR -streams. This is useful only if you need to circumvent a buggy hardware -device with strange bitrate constrains. - - - - -======================================================================= -copyright -======================================================================= --c - -mark the encoded file as copyrighted - - - -======================================================================= -clipping detection -======================================================================= ---clipdetect - -Enable --replaygain-accurate and print a message whether clipping -occurs and how far in dB the waveform is from full scale. - -See also: --replaygain-accurate - - - -======================================================================= -mpglib decode capability -======================================================================= ---decode - -This just uses LAME's mpg123/mpglib interface to decode an MP3 file to -a wav file. The input file can be any input type supported by -encoding, including .mp3 (layers 1, 2 and 3). - -If -t is used (disable wav header), LAME will output -raw pcm in native endian format (use -x to swap bytes). - - -======================================================================= -de-emphasis -======================================================================= --e n/5/c - - n = (none, default) - 5 = 0/15 microseconds - c = citt j.17 - -All this does is set a flag in the bitstream. If you have a PCM -input file where one of the above types of (obsolete) emphasis has -been applied, you can set this flag in LAME. Then the mp3 decoder -should de-emphasize the output during playback, although most -decoders ignore this flag. - -A better solution would be to apply the de-emphasis with a standalone -utility before encoding, and then encode without -e. - - - -======================================================================= -fast mode -======================================================================= --f - -Same as -q 7. - -NOT RECOMMENDED. Use when encoding speed is critical and encoding -quality does not matter. Disable noise shaping. Psycho acoustics are -used only for bit allocation and pre-echo detection. - -======================================================================= -strictly enforce VBR minimum bitrate -======================================================================= --F - -strictly enforce VBR minimum bitrate. With out this option, the minimum -bitrate will be ignored for passages of analog silence. - - - -======================================================================= -free format bitstreams -======================================================================= ---freeformat - -LAME will produce a fixed bitrate, free format bitstream. -User must specify the desired bitrate in kbps, which can -be any integer between 8 and 640. - -Not supported by most decoders. Complient decoders (of which there -are few) are only required to support up to 320 kbps. - -Decoders which can handle free format: - - supports up to -MAD 640 kbps -jump3r 550 kbps -Freeamp: 440 kbps -l3dec: 310 kbps - - - - - -======================================================================= -high quality -======================================================================= --h - -use some quality improvements. The same as -q 2. - - - -======================================================================= -Modes: -======================================================================= - --m m mono --m s stereo --m j joint stereo --m f forced mid/side stereo --m d dual (independent) channels --m a auto - -MONO is the default mode for mono input files. If "-m m" is specified -for a stereo input file, the two channels will be averaged into a mono -signal. - -STEREO - -JOINT STEREO is the default mode for stereo files with fixed bitrates of -128 kbps or less. At higher fixed bitrates, the default is stereo. -For VBR encoding, jstereo is the default for VBR_q >4, and stereo -is the default for VBR_q <=4. You can override all of these defaults -by specifing the mode on the command line. - -jstereo means the encoder can use (on a frame by frame bases) either -regular stereo (just encode left and right channels independently) -or mid/side stereo. In mid/side stereo, the mid (L+R) and side (L-R) -channels are encoded, and more bits are allocated to the mid channel -than the side channel. This will effectively increase the bandwidth -if the signal does not have too much stereo separation. - -Mid/side stereo is basically a trick to increase bandwidth. At 128 kbps, -it is clearly worth while. At higher bitrates it is less useful. - -For truly mono content, use -m m, which will automatically down -sample your input file to mono. This will produce 30% better results -over -m j. - -Using mid/side stereo inappropriately can result in audible -compression artifacts. To much switching between mid/side and regular -stereo can also sound bad. To determine when to switch to mid/side -stereo, LAME uses a much more sophisticated algorithm than that -described in the ISO documentation. - -FORCED MID/SIDE STEREO forces all frames to be encoded mid/side stereo. It -should only be used if you are sure every frame of the input file -has very little stereo seperation. - -DUAL CHANNELS Not supported. - -AUTO - -Auto select should select (if input is stereo) - 8 kbps Mono - 16- 96 kbps Intensity Stereo (if available, otherwise Joint Stereo) - 112-128 kbps Joint Stereo -mj - 160-192 kbps -mj with variable mid/side threshold - 224-320 kbps Independent Stereo -ms - - - -======================================================================= -MP3 input file -======================================================================= ---mp3input - -Assume the input file is a MP3 file. LAME will decode the input file -before re-encoding it. Since MP3 is a lossy format, this is -not recommended in general. But it is useful for creating low bitrate -mp3s from high bitrate mp3s. If the filename ends in ".mp3" LAME will assume -it is an MP3. - - -======================================================================= -disable histogram display -======================================================================= ---nohist - -By default, LAME will display a bitrate histogram while producing -VBR mp3 files. This will disable that feature. - - -======================================================================= -disable ReplayGain analysis -======================================================================= ---noreplaygain - -By default ReplayGain analysis is enabled. This switch disables it. - -See also: --replaygain-accurate, --replaygain-fast - - -======================================================================= -non-original -======================================================================= --o - -mark the encoded file as a copy - - - -======================================================================= -CRC error protection -======================================================================= --p - -turn on CRC error protection. -Yes this really does work correctly in LAME. However, it takes -16 bits per frame that would otherwise be used for encoding. - - -======================================================================= -algorithm quality selection -======================================================================= --q n - -Bitrate is of course the main influence on quality. The higher the -bitrate, the higher the quality. But for a given bitrate, -we have a choice of algorithms to determine the best -scalefactors and huffman encoding (noise shaping). - --q 0: use slowest & best possible version of all algorithms. - --q 2: recommended. Same as -h. -q 0 and -q 1 are slow and may not produce - significantly higher quality. - --q 5: default value. Good speed, reasonable quality - --q 7: same as -f. Very fast, ok quality. (psycho acoustics are - used for pre-echo & M/S, but no noise shaping is done. - --q 9: disables almost all algorithms including psy-model. poor quality. - - - -======================================================================= -input file is raw pcm -======================================================================= --r - -Assume the input file is raw pcm. Sampling rate and mono/stereo/jstereo -must be specified on the command line. Without -r, LAME will perform -several fseek()'s on the input file looking for WAV and AIFF headers. - - - -======================================================================= -slightly more accurate ReplayGain analysis and finding the peak sample -======================================================================= ---replaygain-accurate - -Enable decoding on the fly. Compute "Radio" ReplayGain on the decoded -data stream. Find the peak sample of the decoded data stream and store -it in the file. - - -ReplayGain analysis does _not_ affect the content of a compressed data -stream itself, it is a value stored in the header of a sound file. -Information on the purpose of ReplayGain and the algorithms used is -available from http://www.replaygain.org/ - -By default, LAME performs ReplayGain analysis on the input data (after -the user-specified volume scaling). This behaviour might give slightly -inaccurate results because the data on the output of a lossy -compression/decompression sequence differs from the initial input data. -When --replaygain-accurate is specified the mp3 stream gets decoded on -the fly and the analysis is performed on the decoded data stream. -Although theoretically this method gives more accurate results, it has -several disadvantages: - * tests have shown that the difference between the ReplayGain values - computed on the input data and decoded data is usually no greater - than 0.5dB, although the minimum volume difference the human ear - can perceive is about 1.0dB - * decoding on the fly significantly slows down the encoding process -The apparent advantage is that: - * with --replaygain-accurate the peak sample is determined and - stored in the file. The knowledge of the peak sample can be useful - to decoders (players) to prevent a negative effect called 'clipping' - that introduces distortion into sound. - - -Only the "Radio" ReplayGain value is computed. It is stored in the LAME tag. -The analysis is performed with the reference volume equal to 89dB. -Note: the reference volume has been changed from 83dB on transition -from version 3.95 to 3.95.1. - -See also: --replaygain-fast, --noreplaygain, --clipdetect - - -======================================================================= -fast ReplayGain analysis -======================================================================= ---replaygain-fast - -Compute "Radio" ReplayGain of the input data stream after user-specified -volume scaling and/or resampling. - -ReplayGain analysis does _not_ affect the content of a compressed data -stream itself, it is a value stored in the header of a sound file. -Information on the purpose of ReplayGain and the algorithms used is -available from http://www.replaygain.org/ - -Only the "Radio" ReplayGain value is computed. It is stored in the LAME tag. -The analysis is performed with the reference volume equal to 89dB. -Note: the reference volume has been changed from 83dB on transition -from version 3.95 to 3.95.1. - -This switch is enabled by default. - -See also: --replaygain-accurate, --noreplaygain - - - -======================================================================= -output sampling frequency in kHz -======================================================================= ---resample n - -where n = 8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48 - -Output sampling frequency. Resample the input if necessary. - -If not specified, LAME may sometimes resample automatically -when faced with extreme compression conditions (like encoding -a 44.1 kHz input file at 32 kbps). To disable this automatic -resampling, you have to use --resamle to set the output samplerate -equal to the input samplerate. In that case, LAME will not -perform any extra computations. - - - -======================================================================= -sampling frequency in kHz -======================================================================= --s n - -where n = sampling rate in kHz. - -Required for raw PCM input files. Otherwise it will be determined -from the header information in the input file. - -LAME will automatically resample the input file to one of the -supported MP3 samplerates if necessary. - - -======================================================================= -silent operation -======================================================================= --S - -don't print progress report - -======================================================================= -scale -======================================================================= ---scale <arg> - -Scales input by <arg>. This just multiplies the PCM data -(after it has been converted to floating point) by <arg>. - -<arg> > 1: increase volume -<arg> = 1: no effect -<arg> < 1: reduce volume - -Use with care, since most MP3 decoders will truncate data -which decodes to values greater than 32768. - - -======================================================================= -strict ISO complience -======================================================================= ---strictly-enforce-ISO - -With this option, LAME will enforce the 7680 bit limitation on -total frame size. This results in many wasted bits for -high bitrate encodings. - - -======================================================================= -disable VBR tag -======================================================================= --t - -Disable writing of the VBR Tag (only valid if -v flag is -specified) This tag in embedded in frame 0 of the MP3 file. It lets -VBR aware players correctly seek and compute playing times of VBR -files. - -When '--decode' is specified (decode mp3 to wav), this flag will -disable writing the WAV header. The output will be raw pcm, -native endian format. Use -x to swap bytes. - - - -======================================================================= -variable bit rate (VBR) -======================================================================= --v - -Turn on VBR. There are several ways you can use VBR. I personally -like using VBR to get files slightly bigger than 128 kbps files, where -the extra bits are used for the occasional difficult-to-encode frame. -For this, try specifying a minimum bitrate to use with VBR: - -java -jar jump3r.jar -v -b 112 input.wav output.mp3 - -If the file is too big, use -V n, where n = 0...9 - -java -jar jump3r.jar -v -V n -b 112 input.wav output.mp3 - - -If you want to use VBR to get the maximum compression possible, -and for this, you can try: - -java -jar jump3r.jar -v input.wav output.mp3 -java -jar jump3r.jar -v -V n input.wav output.mp3 (to vary quality/filesize) - - - - - - -======================================================================= -VBR quality setting -======================================================================= --V n - -n = 0...9. Specifies the value of VBR_q. -default = 4, highest quality = 0, smallest files = 9 - -Using -V 6 or higher (lower quality) is NOT RECOMMENDED. -ABR will produce better results. - - -How is VBR_q used? - -The value of VBR_q influences two basic parameters of LAME's psycho -acoustics: - a) the absolute threshold of hearing - b) the sample to noise ratio -The lower the VBR_q value the lower the injected quantization noise -will be. - -*NOTE* No psy-model is perfect, so there can often be distortion which -is audible even though the psy-model claims it is not! Thus using a -small minimum bitrate can result in some aggressive compression and -audible distortion even with -V 0. Thus using -V 0 does not sound -better than a fixed 256 kbps encoding. For example: suppose in the 1 kHz -frequency band the psy-model claims 20 dB of distortion will not be -detectable by the human ear, so LAME VBR-0 will compress that -frequency band as much as possible and introduce at most 20 dB of -distortion. Using a fixed 256 kbps framesize, LAME could end up -introducing only 2 dB of distortion. If the psy-model was correct, -they will both sound the same. If the psy-model was wrong, the VBR-0 -result can sound worse. - - -======================================================================= -swapbytes -======================================================================= --x - -swap bytes in the input file (and output file when using --decode). -For sorting out little endian/big endian type problems. If your -encodings sound like static, try this first. - diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameDecoder.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameDecoder.java deleted file mode 100644 index 851984ba3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameDecoder.java +++ /dev/null @@ -1,171 +0,0 @@ -package lowlevel; - -import java.nio.ByteBuffer; - -import mp3.BitStream; -import mp3.Enc; -import mp3.GainAnalysis; -import mp3.GetAudio; -import mp3.ID3Tag; -import mp3.Lame; -import mp3.LameGlobalFlags; -import mp3.Parse; -import mp3.Presets; -import mp3.Quantize; -import mp3.QuantizePVT; -import mp3.Reservoir; -import mp3.Takehiro; -import mp3.VBRTag; -import mp3.Version; -import mpg.Common; -import mpg.Interface; -import mpg.MPGLib; - -public class LameDecoder { - - private GetAudio gaud; - private ID3Tag id3; - private Lame lame; - private GainAnalysis ga; - private BitStream bs; - private Presets p; - private QuantizePVT qupvt; - private Quantize qu; - private VBRTag vbr; - private Version ver; - private Reservoir rv; - private Takehiro tak; - private Parse parse; - - private MPGLib mpg; - private Interface intf; - private Common common; - - private int wavsize; - private short buffer[][] = new short[2][1152]; - // private DataOutput outf; - private LameGlobalFlags gfp; - - public LameDecoder(String mp3File) { - // encoder modules - lame = new Lame(); - gaud = new GetAudio(); - ga = new GainAnalysis(); - bs = new BitStream(); - p = new Presets(); - qupvt = new QuantizePVT(); - qu = new Quantize(); - vbr = new VBRTag(); - ver = new Version(); - id3 = new ID3Tag(); - rv = new Reservoir(); - tak = new Takehiro(); - parse = new Parse(); - - mpg = new MPGLib(); - intf = new Interface(); - common = new Common(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - // decoder modules - mpg.setModules(intf, common); - intf.setModules(vbr, common); - - gfp = lame.lame_init(); - - /* - * turn off automatic writing of ID3 tag data into mp3 stream we have to - * call it before 'lame_init_params', because that function would spit - * out ID3v2 tag data. - */ - gfp.write_id3tag_automatic = false; - - /* - * Now that all the options are set, lame needs to analyze them and set - * some more internal options and check for problems - */ - lame.lame_init_params(gfp); - - parse.input_format = GetAudio.sound_file_format.sf_mp3; - - StringBuilder inPath = new StringBuilder(mp3File); - Enc enc = new Enc(); - - gaud.init_infile(gfp, inPath.toString(), enc); - - int skip_start = 0; - int skip_end = 0; - - if (parse.silent < 10) - System.out.printf("\rinput: %s%s(%g kHz, %d channel%s, ", inPath, - inPath.length() > 26 ? "\n\t" : " ", - gfp.in_samplerate / 1.e3, gfp.num_channels, - gfp.num_channels != 1 ? "s" : ""); - - if (enc.enc_delay > -1 || enc.enc_padding > -1) { - if (enc.enc_delay > -1) - skip_start = enc.enc_delay + 528 + 1; - if (enc.enc_padding > -1) - skip_end = enc.enc_padding - (528 + 1); - } else - skip_start = gfp.encoder_delay + 528 + 1; - - System.out.printf("MPEG-%d%s Layer %s", 2 - gfp.version, - gfp.out_samplerate < 16000 ? ".5" : "", "III"); - - System.out.printf(")\noutput: (16 bit, Microsoft WAVE)\n"); - - if (skip_start > 0) - System.out.printf( - "skipping initial %d samples (encoder+decoder delay)\n", - skip_start); - if (skip_end > 0) - System.out - .printf("skipping final %d samples (encoder padding-decoder delay)\n", - skip_end); - - wavsize = -(skip_start + skip_end); - parse.mp3input_data.totalframes = parse.mp3input_data.nsamp - / parse.mp3input_data.framesize; - - assert (gfp.num_channels >= 1 && gfp.num_channels <= 2); - } - - public void decode(final ByteBuffer sampleBuffer, final boolean playOriginal) { - int iread = gaud.get_audio16(gfp, buffer); - if (iread >= 0) { - parse.mp3input_data.framenum += iread - / parse.mp3input_data.framesize; - wavsize += iread; - - for (int i = 0; i < iread; i++) { - if (playOriginal) { - // We put mp3 data into the sample buffer here! - sampleBuffer.array()[i * 2] = (byte) (buffer[0][i] & 0xff); - sampleBuffer.array()[i * 2 + 1] = (byte) (((buffer[0][i] & 0xffff) >> 8) & 0xff); - } - - if (gfp.num_channels == 2) { - // gaud.write16BitsLowHigh(outf, buffer[1][i] & 0xffff); - // TODO two channels? - } - } - } - - } - - public void close() { - lame.lame_close(gfp); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameEncoder.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameEncoder.java deleted file mode 100644 index b7dc5b41d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/lowlevel/LameEncoder.java +++ /dev/null @@ -1,694 +0,0 @@ -package lowlevel; - -import static javax.sound.sampled.AudioSystem.NOT_SPECIFIED; - -import java.nio.ByteOrder; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioFormat.Encoding; - -import mp3.BRHist; -import mp3.BitStream; -import mp3.GainAnalysis; -import mp3.GetAudio; -import mp3.ID3Tag; -import mp3.Lame; -import mp3.LameGlobalFlags; -import mp3.MPEGMode; -import mp3.Parse; -import mp3.Presets; -import mp3.Quantize; -import mp3.QuantizePVT; -import mp3.Reservoir; -import mp3.Takehiro; -import mp3.Util; -import mp3.VBRTag; -import mp3.VbrMode; -import mp3.Version; -import mpg.Common; -import mpg.Interface; -import mpg.MPGLib; - -/** - * Wrapper for the jump3r encoder. - * - * @author Ken Handel - */ -public class LameEncoder { - - public static final AudioFormat.Encoding MPEG1L3 = new AudioFormat.Encoding( - "MPEG1L3"); - // Lame converts automagically to MPEG2 or MPEG2.5, if necessary. - public static final AudioFormat.Encoding MPEG2L3 = new AudioFormat.Encoding( - "MPEG2L3"); - public static final AudioFormat.Encoding MPEG2DOT5L3 = new AudioFormat.Encoding( - "MPEG2DOT5L3"); - - // property constants - /** - * property key to read/set the VBR mode: an instance of Boolean (default: - * false) - */ - public static final String P_VBR = "vbr"; - /** - * property key to read/set the channel mode: a String, one of - * "jointstereo", "dual", "mono", - * "auto" (default). - */ - public static final String P_CHMODE = "chmode"; - /** - * property key to read/set the bitrate: an Integer value. Set to -1 for - * default bitrate. - */ - public static final String P_BITRATE = "bitrate"; - /** - * property key to read/set the quality: an Integer from 1 (highest) to 9 - * (lowest). - */ - public static final String P_QUALITY = "quality"; - - // constants from lame.h - public static final int MPEG_VERSION_2 = 0; // MPEG-2 - public static final int MPEG_VERSION_1 = 1; // MPEG-1 - public static final int MPEG_VERSION_2DOT5 = 2; // MPEG-2.5 - - // low mean bitrate in VBR mode - public static final int QUALITY_LOWEST = 9; - public static final int QUALITY_LOW = 7; - public static final int QUALITY_MIDDLE = 5; - public static final int QUALITY_HIGH = 2; - // quality==0 not yet coded in LAME (3.83alpha) - // high mean bitrate in VBR // mode - public static final int QUALITY_HIGHEST = 1; - - public static final int CHANNEL_MODE_STEREO = 0; - public static final int CHANNEL_MODE_JOINT_STEREO = 1; - public static final int CHANNEL_MODE_DUAL_CHANNEL = 2; - public static final int CHANNEL_MODE_MONO = 3; - - // channel mode has no influence on mono files. - public static final int CHANNEL_MODE_AUTO = -1; - public static final int BITRATE_AUTO = -1; - - // suggested maximum buffer size for an mpeg frame - private static final int DEFAULT_PCM_BUFFER_SIZE = 2048 * 16; - - // frame size=576 for MPEG2 and MPEG2.5 - // =576*2 for MPEG1 - - private static int DEFAULT_QUALITY = QUALITY_MIDDLE; - private static int DEFAULT_BITRATE = BITRATE_AUTO; - private static int DEFAULT_CHANNEL_MODE = CHANNEL_MODE_AUTO; - // in VBR mode, bitrate is ignored. - private static boolean DEFAULT_VBR = false; - - // encoding source values - private Encoding sourceEncoding; - private ByteOrder sourceByteOrder; - private int sourceChannels; - private int sourceSampleRate; - private int sourceSampleSizeInBits; - private boolean sourceIsBigEndian; - - private int quality = DEFAULT_QUALITY; - private int bitRate = DEFAULT_BITRATE; - private boolean vbrMode = DEFAULT_VBR; - private int chMode = DEFAULT_CHANNEL_MODE; - - // these fields are set upon successful initialization to show effective - // values. - private int effQuality; - private int effBitRate; - private int effVbr; - private int effChMode; - private int effSampleRate; - private int effEncoding; - private LameGlobalFlags gfp; - private AudioFormat sourceFormat; - private AudioFormat targetFormat; - - - - public LameEncoder() { - - } - - /** - * Initializes the encoder with the given source/PCM format. The default mp3 - * encoding parameters are used, see DEFAULT_BITRATE, DEFAULT_CHANNEL_MODE, - * DEFAULT_QUALITY, and DEFAULT_VBR. - * - * @throws IllegalArgumentException - * when parameters are not supported by LAME. - */ - - - - - public LameEncoder(AudioFormat sourceFormat) { - readParams(sourceFormat, null); - setFormat(sourceFormat, null); - } - - /** - * Initializes the encoder with the given source/PCM format. The mp3 - * parameters are read from the targetFormat's properties. For any parameter - * that is not set, global system properties are queried for backwards - * tritonus compatibility. Last, parameters will use the default values - * DEFAULT_BITRATE, DEFAULT_CHANNEL_MODE, DEFAULT_QUALITY, and DEFAULT_VBR. - * - * @throws IllegalArgumentException - * when parameters are not supported by LAME. - */ - public LameEncoder(AudioFormat sourceFormat, AudioFormat targetFormat) { - readParams(sourceFormat, targetFormat.properties()); - setFormat(sourceFormat, targetFormat); - } - - - /** - * Initializes the encoder, overriding any parameters set in the audio - * format's properties or in the system properties. - * - * @throws IllegalArgumentException - * when parameters are not supported by LAME. - */ - public LameEncoder(AudioFormat sourceFormat, int bitRate, int channelMode, int quality, boolean VBR) { - this.bitRate = bitRate; - this.chMode = channelMode; - this.quality = quality; - this.vbrMode = VBR; - setFormat(sourceFormat, null); - } - - private void readParams(AudioFormat sourceFormat, Map<String, Object> props) { - if (props != null) { - readProps(props); - } - } - - public void setSourceFormat(AudioFormat sourceFormat) { - setFormat(sourceFormat, null); - } - - public void setTargetFormat(AudioFormat targetFormat) { - setFormat(null, targetFormat); - } - - public void setFormat(AudioFormat sourceFormat, AudioFormat targetFormat) { - this.sourceFormat = sourceFormat; - if (sourceFormat!=null){ - sourceEncoding = sourceFormat.getEncoding(); - sourceSampleSizeInBits = sourceFormat.getSampleSizeInBits(); - sourceByteOrder = sourceFormat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN; - sourceChannels = sourceFormat.getChannels(); - sourceSampleRate = Math.round(sourceFormat.getSampleRate()); - sourceIsBigEndian = sourceFormat.isBigEndian(); - // simple check that bitrate is not too high for MPEG2 and MPEG2.5 - // todo: exception ? - if (sourceFormat.getSampleRate() < 32000 && bitRate > 160) { - bitRate = 160; - } - } - //-1 means do not change the sample rate - int targetSampleRate = -1; - this.targetFormat = targetFormat; - if (targetFormat!=null){ - targetSampleRate = Math.round(targetFormat.getSampleRate()); - } - int result = nInitParams(sourceChannels, - sourceSampleRate, - targetSampleRate, - bitRate, - chMode, - quality, - vbrMode, - sourceIsBigEndian); - if (result < 0) { - throw new IllegalArgumentException("parameters not supported by LAME (returned " + result + ")"); - } - } - - GetAudio gaud; - ID3Tag id3; - Lame lame; - GainAnalysis ga; - BitStream bs; - Presets p; - QuantizePVT qupvt; - Quantize qu; - VBRTag vbr; - Version ver; - Util util; - Reservoir rv; - Takehiro tak; - Parse parse; - BRHist hist; - - MPGLib mpg; - Interface intf; - Common common; - - /** - * Initializes the lame encoder. Throws IllegalArgumentException when - * parameters are not supported by LAME. - */ - private int nInitParams(int channels, int inSampleRate, int outSampleRate, int bitrate, - int mode, int quality, boolean VBR, boolean bigEndian) { - // encoder modules - lame = new Lame(); - gaud = new GetAudio(); - ga = new GainAnalysis(); - bs = new BitStream(); - p = new Presets(); - qupvt = new QuantizePVT(); - qu = new Quantize(); - vbr = new VBRTag(); - ver = new Version(); - id3 = new ID3Tag(); - rv = new Reservoir(); - tak = new Takehiro(); - parse = new Parse(); - hist = new BRHist(); - - mpg = new MPGLib(); - intf = new Interface(); - common = new Common(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - - // decoder modules - mpg.setModules(intf, common); - intf.setModules(vbr, common); - - gfp = lame.lame_init(); - gfp.num_channels = channels; - gfp.in_samplerate = inSampleRate; - if (outSampleRate>=0) - gfp.out_samplerate = outSampleRate; - if (mode != CHANNEL_MODE_AUTO) { - gfp.mode = Enum.valueOf(MPEGMode.class, chmode2string(mode)); - } - if (VBR) { - gfp.VBR = VbrMode.vbr_default; - gfp.VBR_q = quality; - } else { - if (bitrate != BITRATE_AUTO) { - gfp.brate = bitrate; - } - } - gfp.quality = quality; - - id3.id3tag_init(gfp); - /* - * turn off automatic writing of ID3 tag data into mp3 stream we have to - * call it before 'lame_init_params', because that function would spit - * out ID3v2 tag data. - */ - gfp.write_id3tag_automatic = false; - gfp.findReplayGain = true; - - int rc = lame.lame_init_params(gfp); - // return effective values - effSampleRate = gfp.out_samplerate; - effBitRate = gfp.brate; - effChMode = gfp.mode.ordinal(); - effVbr = gfp.VBR.ordinal(); - effQuality = (VBR) ? gfp.VBR_q : gfp.quality; - return rc; - } - - /** - * returns -1 if string is too short or returns one of the exception - * constants if everything OK, returns the length of the string - */ - public String getEncoderVersion() { - return ver.getLameVersion(); - } - - /** - * Returns the buffer needed pcm buffer size. The passed parameter is a - * wished buffer size. The implementation of the encoder may return a lower - * or higher buffer size. The encoder must be initalized (i.e. not closed) - * at this point. A return value of <0 denotes an error. - */ - public int getPCMBufferSize() { - return DEFAULT_PCM_BUFFER_SIZE; - } - - public int getMP3BufferSize() { - // bad estimate :) - return getPCMBufferSize() / 2 + 1024; - } - - - public int getInputBufferSize() { - return getPCMBufferSize(); - } - - public int getOutputBufferSize() { - return getMP3BufferSize(); - } - - private int doEncodeBuffer(byte[] pcm, int offset, int length, byte[] encoded) { - int bytes_per_sample = sourceSampleSizeInBits >> 3; - int samples_read = length / bytes_per_sample; - - - - int[] sample_buffer = new int[samples_read]; - - int sample_index = samples_read; - if (!sourceEncoding.toString().equals("PCM_FLOAT")){ - if (sourceByteOrder == ByteOrder.LITTLE_ENDIAN) { - if (bytes_per_sample == 1) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) << 24; - if (bytes_per_sample == 2) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) << 16 - | (pcm[offset + i + 1] & 0xff) << 24; - if (bytes_per_sample == 3) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) << 8 - | (pcm[offset + i + 1] & 0xff) << 16 - | (pcm[offset + i + 2] & 0xff) << 24; - if (bytes_per_sample == 4) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) - | (pcm[offset + i + 1] & 0xff) << 8 - | (pcm[offset + i + 2] & 0xff) << 16 - | (pcm[offset + i + 3] & 0xff) << 24; - } else { - if (bytes_per_sample == 1) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = ((pcm[offset + i] & 0xff) ^ 0x80) << 24 - | 0x7f << 16; - if (bytes_per_sample == 2) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) << 24 - | (pcm[offset + i + 1] & 0xff) << 16; - if (bytes_per_sample == 3) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) << 24 - | (pcm[offset + i + 1] & 0xff) << 16 - | (pcm[offset + i + 2] & 0xff) << 8; - if (bytes_per_sample == 4) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--sample_index] = (pcm[offset + i] & 0xff) << 24 - | (pcm[offset + i + 1] & 0xff) << 16 - | (pcm[offset + i + 2] & 0xff) << 8 - | (pcm[offset + i + 3] & 0xff); - } - } else { - if (bytes_per_sample == 4) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;){ - byte[] sample = new byte[4]; - sample[0] = pcm [offset + i]; - sample[1] = pcm [offset + i + 1]; - sample[2] = pcm [offset + i + 2]; - sample[3] = pcm [offset + i + 3]; - float amlitude = convertByteArrayToFloat(sample, 0, sourceByteOrder); - if (Math.abs(amlitude)>=1.0) continue; - int sampleInt = Math.round(Integer.MAX_VALUE*amlitude); - sample_buffer[--sample_index]=sampleInt; -// System.out.print(sample_buffer[--sample_index]=sampleInt); -// System.out.println(Arrays.toString(sample)); - } - } - int p = samples_read; - samples_read /= gfp.num_channels; - - int buffer[][] = new int[2][samples_read]; - if (gfp.num_channels == 2) { - for (int i = samples_read; --i >= 0;) { - buffer[1][i] = sample_buffer[--p]; - buffer[0][i] = sample_buffer[--p]; - } - } else if (gfp.num_channels == 1) { - Arrays.fill(buffer[1], 0, samples_read, 0); - for (int i = samples_read; --i >= 0;) { - buffer[0][i] = buffer[1][i] = sample_buffer[--p]; - } - } - - int res = lame.lame_encode_buffer_int(gfp, buffer[0], buffer[1], samples_read, encoded, 0, encoded.length); - return res; - } - - /** - * Encode a block of data. Throws IllegalArgumentException when parameters - * are wrong. When the <code>encoded</code> array is too small, an - * ArrayIndexOutOfBoundsException is thrown. <code>length</code> should be - * the value returned by getPCMBufferSize. - * - * @return the number of bytes written to <code>encoded</code>. May be 0. - */ - public int encodeBuffer(byte[] pcm, int offset, int length, byte[] encoded) - throws ArrayIndexOutOfBoundsException { - if (length < 0 || (offset + length) > pcm.length) { - throw new IllegalArgumentException("inconsistent parameters"); - } - int result = doEncodeBuffer(pcm, offset, length, encoded); - if (result < 0) { - if (result == -1) { - throw new ArrayIndexOutOfBoundsException( - "Encode buffer too small"); - } - throw new RuntimeException("crucial error in encodeBuffer."); - } - return result; - } - - public int encodeFinish(byte[] encoded) { - return lame.lame_encode_flush(gfp, encoded, 0, encoded.length); - } - - public void close() { - lame.lame_close(gfp); - } - - // properties - private void readProps(Map<String, Object> props) { - Object q = props.get(P_QUALITY); - if (q instanceof String) { - quality = string2quality(((String) q).toLowerCase(), quality); - } else if (q instanceof Integer) { - quality = (Integer) q; - } else if (q != null) { - throw new IllegalArgumentException( - "illegal type of quality property: " + q); - } - q = props.get(P_BITRATE); - if (q instanceof String) { - bitRate = Integer.parseInt((String) q); - } else if (q instanceof Integer) { - bitRate = (Integer) q; - } else if (q != null) { - throw new IllegalArgumentException( - "illegal type of bitrate property: " + q); - } - q = props.get(P_CHMODE); - if (q instanceof String) { - chMode = string2chmode(((String) q).toLowerCase(), chMode); - } else if (q != null) { - throw new IllegalArgumentException( - "illegal type of chmode property: " + q); - } - q = props.get(P_VBR); - if (q instanceof String) { - vbrMode = string2bool(((String) q)); - } else if (q instanceof Boolean) { - vbrMode = (Boolean) q; - } else if (q != null) { - throw new IllegalArgumentException("illegal type of vbr property: " - + q); - } - } - - /** - * Return the audioformat representing the encoded mp3 stream. The format - * object will have the following properties: - * <ul> - * <li>quality: an Integer, 1 (highest) to 9 (lowest) - * <li>bitrate: an Integer, 32...320 kbit/s - * <li>chmode: channel mode, a String, one of "jointstereo", - * "dual", "mono", "auto" (default). - * <li>vbr: a Boolean - * <li>encoder.version: a string with the version of the encoder - * <li>encoder.name: a string with the name of the encoder - * </ul> - */ - public AudioFormat getEffectiveFormat() { - // first gather properties - HashMap<String, Object> map = new HashMap<String, Object>(); - map.put(P_QUALITY, getEffectiveQuality()); - map.put(P_BITRATE, getEffectiveBitRate()); - map.put(P_CHMODE, chmode2string(getEffectiveChannelMode())); - map.put(P_VBR, getEffectiveVBR()); - // map.put(P_SAMPLERATE, getEffectiveSampleRate()); - // map.put(P_ENCODING,getEffectiveEncoding()); - map.put("encoder.name", "LAME"); - map.put("encoder.version", getEncoderVersion()); - int channels = 2; - if (chMode == CHANNEL_MODE_MONO) { - channels = 1; - } - return new AudioFormat(getEffectiveEncoding(), - getEffectiveSampleRate(), NOT_SPECIFIED, channels, - NOT_SPECIFIED, NOT_SPECIFIED, false, map); - } - - public int getEffectiveQuality() { - if (effQuality >= QUALITY_LOWEST) { - return QUALITY_LOWEST; - } else if (effQuality >= QUALITY_LOW) { - return QUALITY_LOW; - } else if (effQuality >= QUALITY_MIDDLE) { - return QUALITY_MIDDLE; - } else if (effQuality >= QUALITY_HIGH) { - return QUALITY_HIGH; - } - return QUALITY_HIGHEST; - } - - public int getEffectiveBitRate() { - return effBitRate; - } - - public int getEffectiveChannelMode() { - return effChMode; - } - - public boolean getEffectiveVBR() { - return effVbr != 0; - } - - public int getEffectiveSampleRate() { - return effSampleRate; - } - - public AudioFormat.Encoding getEffectiveEncoding() { - if (effEncoding == MPEG_VERSION_2) { - if (getEffectiveSampleRate() < 16000) { - return MPEG2DOT5L3; - } - return MPEG2L3; - } else if (effEncoding == MPEG_VERSION_2DOT5) { - return MPEG2DOT5L3; - } - // default - return MPEG1L3; - } - - private int string2quality(String quality, int def) { - if (quality.equals("lowest")) { - return QUALITY_LOWEST; - } else if (quality.equals("low")) { - return QUALITY_LOW; - } else if (quality.equals("middle")) { - return QUALITY_MIDDLE; - } else if (quality.equals("high")) { - return QUALITY_HIGH; - } else if (quality.equals("highest")) { - return QUALITY_HIGHEST; - } - return def; - } - - private String chmode2string(int chmode) { - if (chmode == CHANNEL_MODE_STEREO) { - return "stereo"; - } else if (chmode == CHANNEL_MODE_JOINT_STEREO) { - return "jointstereo"; - } else if (chmode == CHANNEL_MODE_DUAL_CHANNEL) { - return "dual"; - } else if (chmode == CHANNEL_MODE_MONO) { - return "mono"; - } else if (chmode == CHANNEL_MODE_AUTO) { - return "auto"; - } - return "auto"; - } - - private int string2chmode(String chmode, int def) { - if (chmode.equals("stereo")) { - return CHANNEL_MODE_STEREO; - } else if (chmode.equals("jointstereo")) { - return CHANNEL_MODE_JOINT_STEREO; - } else if (chmode.equals("dual")) { - return CHANNEL_MODE_DUAL_CHANNEL; - } else if (chmode.equals("mono")) { - return CHANNEL_MODE_MONO; - } else if (chmode.equals("auto")) { - return CHANNEL_MODE_AUTO; - } - return def; - } - - /** - * @return true if val is starts with t or y or on, false if val starts with - * f or n or off. - * @throws IllegalArgumentException - * if val is neither true nor false - */ - private static boolean string2bool(String val) { - if (val.length() > 0) { - if ((val.charAt(0) == 'f') // false - || (val.charAt(0) == 'n') // no - || (val.equals("off"))) { - return false; - } - if ((val.charAt(0) == 't') // true - || (val.charAt(0) == 'y') // yes - || (val.equals("on"))) { - return true; - } - } - throw new IllegalArgumentException( - "wrong string for boolean property: " + val); - } - - public final float convertByteArrayToFloat(byte bytes[], int offset, ByteOrder byteOrder) - { - byte byte0 = bytes[offset + 0]; - byte byte1 = bytes[offset + 1]; - byte byte2 = bytes[offset + 2]; - byte byte3 = bytes[offset + 3]; - int bits; - if (byteOrder == ByteOrder.BIG_ENDIAN) //big endian - { - bits = ((0xff & byte0) << 24) | ((0xff & byte1) << 16) | ((0xff & byte2) << 8) | ((0xff & byte3) << 0); - } else{ - // little endian - bits = ((0xff & byte3) << 24) | ((0xff & byte2) << 16) | ((0xff & byte1) << 8) | ((0xff & byte0) << 0); - } - float result = Float.intBitsToFloat(bits); - return result; - } - - public AudioFormat getSourceFormat() { - return sourceFormat; - } - - public AudioFormat getTargetFormat() { - return targetFormat; - } - - /** * Lame.java ** */ - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRIterationLoop.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRIterationLoop.java deleted file mode 100644 index 6adee499a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRIterationLoop.java +++ /dev/null @@ -1,102 +0,0 @@ -package mp3; - -/** - * encode a frame with a disired average bitrate - * - * mt 2000/05/31 - * - * @author Ken - * - */ -public final class ABRIterationLoop implements IIterationLoop { - - /** - * - */ - private final Quantize quantize; - - /** - * @param quantize - */ - ABRIterationLoop(Quantize quantize) { - this.quantize = quantize; - } - - public final void iteration_loop(final LameGlobalFlags gfp, - final float pe[][], final float ms_ener_ratio[], - final III_psy_ratio ratio[][]) { - final LameInternalFlags gfc = gfp.internal_flags; - float l3_xmin[] = new float[L3Side.SFBMAX]; - float xrpow[] = new float[576]; - int targ_bits[][] = new int[2][2]; - int max_frame_bits[] = new int[1]; - int analog_silence_bits[] = new int[1]; - final IIISideInfo l3_side = gfc.l3_side; - - int mean_bits = 0; - - this.quantize.calc_target_bits(gfp, pe, ms_ener_ratio, targ_bits, - analog_silence_bits, max_frame_bits); - - /* - * encode granules - */ - for (int gr = 0; gr < gfc.mode_gr; gr++) { - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - this.quantize.ms_convert(gfc.l3_side, gr); - } - for (int ch = 0; ch < gfc.channels_out; ch++) { - float adjust, masking_lower_db; - GrInfo cod_info = l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = (float) Math.pow(10.0, - masking_lower_db * 0.1); - - /* - * cod_info, scalefac and xrpow get initialized in - * init_outer_loop - */ - this.quantize.init_outer_loop(gfc, cod_info); - if (this.quantize.init_xrpow(gfc, cod_info, xrpow)) { - /* - * xr contains energy we will have to encode calculate the - * masking abilities find some good quantization in - * outer_loop - */ - int ath_over = this.quantize.qupvt.calc_xmin(gfp, - ratio[gr][ch], cod_info, l3_xmin); - if (0 == ath_over) /* analog silence */ - targ_bits[gr][ch] = analog_silence_bits[0]; - - this.quantize.outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, - targ_bits[gr][ch]); - } - this.quantize.iteration_finish_one(gfc, gr, ch); - } /* ch */ - } /* gr */ - - /* - * find a bitrate which can refill the resevoir to positive size. - */ - for (gfc.bitrate_index = gfc.VBR_min_bitrate; gfc.bitrate_index <= gfc.VBR_max_bitrate; gfc.bitrate_index++) { - - MeanBits mb = new MeanBits(mean_bits); - int rc = this.quantize.rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - if (rc >= 0) - break; - } - assert (gfc.bitrate_index <= gfc.VBR_max_bitrate); - - this.quantize.rv.ResvFrameEnd(gfc, mean_bits); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRPresets.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRPresets.java deleted file mode 100644 index 7ef8a2d28..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ABRPresets.java +++ /dev/null @@ -1,40 +0,0 @@ -package mp3; - -class ABRPresets { - public ABRPresets(final int kbps, final int comp, final int compS, - final int joint, final float fix, final float shThreshold, - final float shThresholdS, final float bass, final float sc, - final float mask, final float lower, final float curve, - final float interCh, final int sfScale) { - quant_comp = comp; - quant_comp_s = compS; - safejoint = joint; - nsmsfix = fix; - st_lrm = shThreshold; - st_s = shThresholdS; - nsbass = bass; - scale = sc; - masking_adj = mask; - ath_lower = lower; - ath_curve = curve; - interch = interCh; - sfscale = sfScale; - } - - int quant_comp; - int quant_comp_s; - int safejoint; - float nsmsfix; - /** - * short threshold - */ - float st_lrm; - float st_s; - float nsbass; - float scale; - float masking_adj; - float ath_lower; - float ath_curve; - float interch; - int sfscale; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ATH.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ATH.java deleted file mode 100644 index d9b943960..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ATH.java +++ /dev/null @@ -1,61 +0,0 @@ -package mp3; - -/** - * ATH related stuff, if something new ATH related has to be added, please plug - * it here into the ATH. - */ -public class ATH { - /** - * Method for the auto adjustment. - */ - int useAdjust; - /** - * factor for tuning the (sample power) point below which adaptive threshold - * of hearing adjustment occurs - */ - float aaSensitivityP; - /** - * Lowering based on peak volume, 1 = no lowering. - */ - float adjust; - /** - * Limit for dynamic ATH adjust. - */ - float adjustLimit; - /** - * Determined to lower x dB each second. - */ - float decay; - /** - * Lowest ATH value. - */ - float floor; - /** - * ATH for sfbs in long blocks. - */ - float l[] = new float[Encoder.SBMAX_l]; - /** - * ATH for sfbs in short blocks. - */ - float s[] = new float[Encoder.SBMAX_s]; - /** - * ATH for partitioned sfb21 in long blocks. - */ - float psfb21[] = new float[Encoder.PSFB21]; - /** - * ATH for partitioned sfb12 in short blocks. - */ - float psfb12[] = new float[Encoder.PSFB12]; - /** - * ATH for long block convolution bands. - */ - float cb_l[] = new float[Encoder.CBANDS]; - /** - * ATH for short block convolution bands. - */ - float cb_s[] = new float[Encoder.CBANDS]; - /** - * Equal loudness weights (based on ATH). - */ - float eql_w[] = new float[Encoder.BLKSIZE / 2]; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BRHist.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BRHist.java deleted file mode 100644 index b0c7aa6e4..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BRHist.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Bitrate histogram source file - * - * Copyright (c) 2000 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: BRHist.java,v 1.3 2011/05/24 22:02:42 kenchis Exp $ */ - -package mp3; - -// XXX VBR histogram console output is unsupported in java. -// Console features like cursor-up etc. are missing! -public class BRHist { - - int brhist_init(final LameGlobalFlags gf, final int bitrate_kbps_min, - final int bitrate_kbps_max) { - return 0; - } - - public void brhist_jump_back() { - - } - - public void brhist_disp(LameGlobalFlags gf) { - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BitStream.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BitStream.java deleted file mode 100644 index 3c14175b2..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/BitStream.java +++ /dev/null @@ -1,1019 +0,0 @@ -/* - * MP3 bitstream Output interface for LAME - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 1999-2002 Takehiro Tominaga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * $Id: BitStream.java,v 1.23 2011/05/24 22:02:42 kenchis Exp $ - */ -package mp3; - -import java.util.Arrays; - -import mpg.MPGLib; - -public class BitStream { - - private static final int CRC16_POLYNOMIAL = 0x8005; - - /* - * we work with ints, so when doing bit manipulation, we limit ourselves to - * MAX_LENGTH-2 just to be on the safe side - */ - private static final int MAX_LENGTH = 32; - - GainAnalysis ga; - MPGLib mpg; - Version ver; - VBRTag vbr; - - public final void setModules(GainAnalysis ga, MPGLib mpg, Version ver, - VBRTag vbr) { - this.ga = ga; - this.mpg = mpg; - this.ver = ver; - this.vbr = vbr; - } - - /** - * Bit stream buffer. - */ - private byte[] buf; - /** - * Bit counter of bit stream. - */ - private int totbit; - /** - * Pointer to top byte in buffer. - */ - private int bufByteIdx; - /** - * Pointer to top bit of top byte in buffer. - */ - private int bufBitIdx; - - /** - * compute bitsperframe and mean_bits for a layer III frame - */ - public final int getframebits(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - int bit_rate; - - /* get bitrate in kbps [?] */ - if (gfc.bitrate_index != 0) - bit_rate = Tables.bitrate_table[gfp.version][gfc.bitrate_index]; - else - bit_rate = gfp.brate; - assert (8 <= bit_rate && bit_rate <= 640); - - /* main encoding routine toggles padding on and off */ - /* one Layer3 Slot consists of 8 bits */ - return 8 * ((gfp.version + 1) * 72000 * bit_rate / gfp.out_samplerate + gfc.padding); - } - - private void putheader_bits(final LameInternalFlags gfc) { - System.arraycopy(gfc.header[gfc.w_ptr].buf, 0, buf, bufByteIdx, - gfc.sideinfo_len); - bufByteIdx += gfc.sideinfo_len; - totbit += gfc.sideinfo_len * 8; - gfc.w_ptr = (gfc.w_ptr + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1); - } - - /** - * write j bits into the bit stream - */ - private void putbits2(final LameInternalFlags gfc, final int val, int j) { - assert (j < MAX_LENGTH - 2); - - while (j > 0) { - int k; - if (bufBitIdx == 0) { - bufBitIdx = 8; - bufByteIdx++; - assert (bufByteIdx < Lame.LAME_MAXMP3BUFFER); - assert (gfc.header[gfc.w_ptr].write_timing >= totbit); - if (gfc.header[gfc.w_ptr].write_timing == totbit) { - putheader_bits(gfc); - } - buf[bufByteIdx] = 0; - } - - k = Math.min(j, bufBitIdx); - j -= k; - - bufBitIdx -= k; - - assert (j < MAX_LENGTH); - /* 32 too large on 32 bit machines */ - assert (bufBitIdx < MAX_LENGTH); - - buf[bufByteIdx] |= ((val >> j) << bufBitIdx); - totbit += k; - } - } - - /** - * write j bits into the bit stream, ignoring frame headers - */ - private void putbits_noheaders(final LameInternalFlags gfc, final int val, - int j) { - assert (j < MAX_LENGTH - 2); - - while (j > 0) { - int k; - if (bufBitIdx == 0) { - bufBitIdx = 8; - bufByteIdx++; - assert (bufByteIdx < Lame.LAME_MAXMP3BUFFER); - buf[bufByteIdx] = 0; - } - - k = Math.min(j, bufBitIdx); - j -= k; - - bufBitIdx -= k; - - assert (j < MAX_LENGTH); /* 32 too large on 32 bit machines */ - assert (bufBitIdx < MAX_LENGTH); - - buf[bufByteIdx] |= ((val >> j) << bufBitIdx); - totbit += k; - } - } - - /** - * Some combinations of bitrate, Fs, and stereo make it impossible to stuff - * out a frame using just main_data, due to the limited number of bits to - * indicate main_data_length. In these situations, we put stuffing bits into - * the ancillary data... - */ - private void drain_into_ancillary(final LameGlobalFlags gfp, - int remainingBits) { - final LameInternalFlags gfc = gfp.internal_flags; - int i; - assert (remainingBits >= 0); - - if (remainingBits >= 8) { - putbits2(gfc, 0x4c, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x41, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x4d, 8); - remainingBits -= 8; - } - if (remainingBits >= 8) { - putbits2(gfc, 0x45, 8); - remainingBits -= 8; - } - - if (remainingBits >= 32) { - final String version = ver.getLameShortVersion(); - if (remainingBits >= 32) - for (i = 0; i < version.length() && remainingBits >= 8; ++i) { - remainingBits -= 8; - putbits2(gfc, version.charAt(i), 8); - } - } - - for (; remainingBits >= 1; remainingBits -= 1) { - putbits2(gfc, gfc.ancillary_flag, 1); - gfc.ancillary_flag ^= (!gfp.disable_reservoir ? 1 : 0); - } - - assert (remainingBits == 0); - - } - - /** - * write N bits into the header - */ - private void writeheader(final LameInternalFlags gfc, final int val, int j) { - int ptr = gfc.header[gfc.h_ptr].ptr; - - while (j > 0) { - final int k = Math.min(j, 8 - (ptr & 7)); - j -= k; - assert (j < MAX_LENGTH); /* >> 32 too large for 32 bit machines */ - - gfc.header[gfc.h_ptr].buf[ptr >> 3] |= ((val >> j)) << (8 - (ptr & 7) - k); - ptr += k; - } - gfc.header[gfc.h_ptr].ptr = ptr; - } - - private int CRC_update(int value, int crc) { - value <<= 8; - for (int i = 0; i < 8; i++) { - value <<= 1; - crc <<= 1; - - if ((((crc ^ value) & 0x10000) != 0)) - crc ^= CRC16_POLYNOMIAL; - } - return crc; - } - - public final void CRC_writeheader(final LameInternalFlags gfc, - final byte[] header) { - int crc = 0xffff; - /* (jo) init crc16 for error_protection */ - - crc = CRC_update(header[2] & 0xff, crc); - crc = CRC_update(header[3] & 0xff, crc); - for (int i = 6; i < gfc.sideinfo_len; i++) { - crc = CRC_update(header[i] & 0xff, crc); - } - - header[4] = (byte) (crc >> 8); - header[5] = (byte) (crc & 255); - } - - private void encodeSideInfo2(final LameGlobalFlags gfp, - final int bitsPerFrame) { - final LameInternalFlags gfc = gfp.internal_flags; - IIISideInfo l3_side; - int gr, ch; - - l3_side = gfc.l3_side; - gfc.header[gfc.h_ptr].ptr = 0; - Arrays.fill(gfc.header[gfc.h_ptr].buf, 0, gfc.sideinfo_len, (byte) 0); - if (gfp.out_samplerate < 16000) - writeheader(gfc, 0xffe, 12); - else - writeheader(gfc, 0xfff, 12); - writeheader(gfc, (gfp.version), 1); - writeheader(gfc, 4 - 3, 2); - writeheader(gfc, (!gfp.error_protection ? 1 : 0), 1); - writeheader(gfc, (gfc.bitrate_index), 4); - writeheader(gfc, (gfc.samplerate_index), 2); - writeheader(gfc, (gfc.padding), 1); - writeheader(gfc, (gfp.extension), 1); - writeheader(gfc, (gfp.mode.ordinal()), 2); - writeheader(gfc, (gfc.mode_ext), 2); - writeheader(gfc, (gfp.copyright), 1); - writeheader(gfc, (gfp.original), 1); - writeheader(gfc, (gfp.emphasis), 2); - if (gfp.error_protection) { - writeheader(gfc, 0, 16); /* dummy */ - } - - if (gfp.version == 1) { - /* MPEG1 */ - assert (l3_side.main_data_begin >= 0); - writeheader(gfc, (l3_side.main_data_begin), 9); - - if (gfc.channels_out == 2) - writeheader(gfc, l3_side.private_bits, 3); - else - writeheader(gfc, l3_side.private_bits, 5); - - for (ch = 0; ch < gfc.channels_out; ch++) { - int band; - for (band = 0; band < 4; band++) { - writeheader(gfc, l3_side.scfsi[ch][band], 1); - } - } - - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo gi = l3_side.tt[gr][ch]; - writeheader(gfc, gi.part2_3_length + gi.part2_length, 12); - writeheader(gfc, gi.big_values / 2, 9); - writeheader(gfc, gi.global_gain, 8); - writeheader(gfc, gi.scalefac_compress, 4); - - if (gi.block_type != Encoder.NORM_TYPE) { - writeheader(gfc, 1, 1); /* window_switching_flag */ - writeheader(gfc, gi.block_type, 2); - writeheader(gfc, gi.mixed_block_flag, 1); - - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - - writeheader(gfc, gi.subblock_gain[0], 3); - writeheader(gfc, gi.subblock_gain[1], 3); - writeheader(gfc, gi.subblock_gain[2], 3); - } else { - writeheader(gfc, 0, 1); /* window_switching_flag */ - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - if (gi.table_select[2] == 14) - gi.table_select[2] = 16; - writeheader(gfc, gi.table_select[2], 5); - - assert (0 <= gi.region0_count && gi.region0_count < 16); - assert (0 <= gi.region1_count && gi.region1_count < 8); - writeheader(gfc, gi.region0_count, 4); - writeheader(gfc, gi.region1_count, 3); - } - writeheader(gfc, gi.preflag, 1); - writeheader(gfc, gi.scalefac_scale, 1); - writeheader(gfc, gi.count1table_select, 1); - } - } - } else { - /* MPEG2 */ - assert (l3_side.main_data_begin >= 0); - writeheader(gfc, (l3_side.main_data_begin), 8); - writeheader(gfc, l3_side.private_bits, gfc.channels_out); - - gr = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo gi = l3_side.tt[gr][ch]; - writeheader(gfc, gi.part2_3_length + gi.part2_length, 12); - writeheader(gfc, gi.big_values / 2, 9); - writeheader(gfc, gi.global_gain, 8); - writeheader(gfc, gi.scalefac_compress, 9); - - if (gi.block_type != Encoder.NORM_TYPE) { - writeheader(gfc, 1, 1); /* window_switching_flag */ - writeheader(gfc, gi.block_type, 2); - writeheader(gfc, gi.mixed_block_flag, 1); - - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - - writeheader(gfc, gi.subblock_gain[0], 3); - writeheader(gfc, gi.subblock_gain[1], 3); - writeheader(gfc, gi.subblock_gain[2], 3); - } else { - writeheader(gfc, 0, 1); /* window_switching_flag */ - if (gi.table_select[0] == 14) - gi.table_select[0] = 16; - writeheader(gfc, gi.table_select[0], 5); - if (gi.table_select[1] == 14) - gi.table_select[1] = 16; - writeheader(gfc, gi.table_select[1], 5); - if (gi.table_select[2] == 14) - gi.table_select[2] = 16; - writeheader(gfc, gi.table_select[2], 5); - - assert (0 <= gi.region0_count && gi.region0_count < 16); - assert (0 <= gi.region1_count && gi.region1_count < 8); - writeheader(gfc, gi.region0_count, 4); - writeheader(gfc, gi.region1_count, 3); - } - - writeheader(gfc, gi.scalefac_scale, 1); - writeheader(gfc, gi.count1table_select, 1); - } - } - - if (gfp.error_protection) { - /* (jo) error_protection: add crc16 information to header */ - CRC_writeheader(gfc, gfc.header[gfc.h_ptr].buf); - } - - { - final int old = gfc.h_ptr; - assert (gfc.header[old].ptr == gfc.sideinfo_len * 8); - - gfc.h_ptr = (old + 1) & (LameInternalFlags.MAX_HEADER_BUF - 1); - gfc.header[gfc.h_ptr].write_timing = gfc.header[old].write_timing - + bitsPerFrame; - - if (gfc.h_ptr == gfc.w_ptr) { - /* yikes! we are out of header buffer space */ - System.err - .println("Error: MAX_HEADER_BUF too small in bitstream.c \n"); - } - - } - } - - private int huffman_coder_count1(final LameInternalFlags gfc, - final GrInfo gi) { - /* Write count1 area */ - final HuffCodeTab h = Tables.ht[gi.count1table_select + 32]; - int i, bits = 0; - - int ix = gi.big_values; - int xr = gi.big_values; - assert (gi.count1table_select < 2); - - for (i = (gi.count1 - gi.big_values) / 4; i > 0; --i) { - int huffbits = 0; - int p = 0, v; - - v = gi.l3_enc[ix + 0]; - if (v != 0) { - p += 8; - if (gi.xr[xr + 0] < 0) - huffbits++; - assert (v <= 1); - } - - v = gi.l3_enc[ix + 1]; - if (v != 0) { - p += 4; - huffbits *= 2; - if (gi.xr[xr + 1] < 0) - huffbits++; - assert (v <= 1); - } - - v = gi.l3_enc[ix + 2]; - if (v != 0) { - p += 2; - huffbits *= 2; - if (gi.xr[xr + 2] < 0) - huffbits++; - assert (v <= 1); - } - - v = gi.l3_enc[ix + 3]; - if (v != 0) { - p++; - huffbits *= 2; - if (gi.xr[xr + 3] < 0) - huffbits++; - assert (v <= 1); - } - - ix += 4; - xr += 4; - putbits2(gfc, huffbits + h.table[p], h.hlen[p]); - bits += h.hlen[p]; - } - return bits; - } - - /** - * Implements the pseudocode of page 98 of the IS - */ - private int Huffmancode(final LameInternalFlags gfc, final int tableindex, - final int start, final int end, final GrInfo gi) { - final HuffCodeTab h = Tables.ht[tableindex]; - int bits = 0; - - assert (tableindex < 32); - if (0 == tableindex) - return bits; - - for (int i = start; i < end; i += 2) { - int cbits = 0; - int xbits = 0; - final int linbits = h.xlen; - int xlen = h.xlen; - int ext = 0; - int x1 = gi.l3_enc[i]; - int x2 = gi.l3_enc[i + 1]; - - if (x1 != 0) { - if (gi.xr[i] < 0) - ext++; - cbits--; - } - - if (tableindex > 15) { - /* use ESC-words */ - if (x1 > 14) { - final int linbits_x1 = x1 - 15; - assert (linbits_x1 <= h.linmax); - ext |= linbits_x1 << 1; - xbits = linbits; - x1 = 15; - } - - if (x2 > 14) { - final int linbits_x2 = x2 - 15; - assert (linbits_x2 <= h.linmax); - ext <<= linbits; - ext |= linbits_x2; - xbits += linbits; - x2 = 15; - } - xlen = 16; - } - - if (x2 != 0) { - ext <<= 1; - if (gi.xr[i + 1] < 0) - ext++; - cbits--; - } - - assert ((x1 | x2) < 16); - - x1 = x1 * xlen + x2; - xbits -= cbits; - cbits += h.hlen[x1]; - - assert (cbits <= MAX_LENGTH); - assert (xbits <= MAX_LENGTH); - - putbits2(gfc, h.table[x1], cbits); - putbits2(gfc, ext, xbits); - bits += cbits + xbits; - } - return bits; - } - - /** - * Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as - * well as the definitions of the side information on pages 26 and 27. - */ - private int ShortHuffmancodebits(final LameInternalFlags gfc, - final GrInfo gi) { - int region1Start = 3 * gfc.scalefac_band.s[3]; - if (region1Start > gi.big_values) - region1Start = gi.big_values; - - /* short blocks do not have a region2 */ - int bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi); - bits += Huffmancode(gfc, gi.table_select[1], region1Start, - gi.big_values, gi); - return bits; - } - - private int LongHuffmancodebits(final LameInternalFlags gfc, final GrInfo gi) { - int bigvalues, bits; - int region1Start, region2Start; - - bigvalues = gi.big_values; - assert (0 <= bigvalues && bigvalues <= 576); - - int i = gi.region0_count + 1; - assert (0 <= i); - assert (i < gfc.scalefac_band.l.length); - region1Start = gfc.scalefac_band.l[i]; - i += gi.region1_count + 1; - assert (0 <= i); - assert (i < gfc.scalefac_band.l.length); - region2Start = gfc.scalefac_band.l[i]; - - if (region1Start > bigvalues) - region1Start = bigvalues; - - if (region2Start > bigvalues) - region2Start = bigvalues; - - bits = Huffmancode(gfc, gi.table_select[0], 0, region1Start, gi); - bits += Huffmancode(gfc, gi.table_select[1], region1Start, - region2Start, gi); - bits += Huffmancode(gfc, gi.table_select[2], region2Start, bigvalues, - gi); - return bits; - } - - private int writeMainData(final LameGlobalFlags gfp) { - int gr, ch, sfb, data_bits, tot_bits = 0; - final LameInternalFlags gfc = gfp.internal_flags; - final IIISideInfo l3_side = gfc.l3_side; - - if (gfp.version == 1) { - /* MPEG 1 */ - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo gi = l3_side.tt[gr][ch]; - final int slen1 = Takehiro.slen1_tab[gi.scalefac_compress]; - final int slen2 = Takehiro.slen2_tab[gi.scalefac_compress]; - data_bits = 0; - for (sfb = 0; sfb < gi.sfbdivide; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; /* scfsi is used */ - putbits2(gfc, gi.scalefac[sfb], slen1); - data_bits += slen1; - } - for (; sfb < gi.sfbmax; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; /* scfsi is used */ - putbits2(gfc, gi.scalefac[sfb], slen2); - data_bits += slen2; - } - assert (data_bits == gi.part2_length); - - if (gi.block_type == Encoder.SHORT_TYPE) { - data_bits += ShortHuffmancodebits(gfc, gi); - } else { - data_bits += LongHuffmancodebits(gfc, gi); - } - data_bits += huffman_coder_count1(gfc, gi); - /* does bitcount in quantize.c agree with actual bit count? */ - assert (data_bits == gi.part2_3_length + gi.part2_length); - tot_bits += data_bits; - } /* for ch */ - } /* for gr */ - } else { - /* MPEG 2 */ - gr = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo gi = l3_side.tt[gr][ch]; - int i, sfb_partition, scale_bits = 0; - assert (gi.sfb_partition_table != null); - data_bits = 0; - sfb = 0; - sfb_partition = 0; - - if (gi.block_type == Encoder.SHORT_TYPE) { - for (; sfb_partition < 4; sfb_partition++) { - final int sfbs = gi.sfb_partition_table[sfb_partition] / 3; - final int slen = gi.slen[sfb_partition]; - for (i = 0; i < sfbs; i++, sfb++) { - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 0], 0), slen); - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 1], 0), slen); - putbits2(gfc, - Math.max(gi.scalefac[sfb * 3 + 2], 0), slen); - scale_bits += 3 * slen; - } - } - data_bits += ShortHuffmancodebits(gfc, gi); - } else { - for (; sfb_partition < 4; sfb_partition++) { - final int sfbs = gi.sfb_partition_table[sfb_partition]; - final int slen = gi.slen[sfb_partition]; - for (i = 0; i < sfbs; i++, sfb++) { - putbits2(gfc, Math.max(gi.scalefac[sfb], 0), slen); - scale_bits += slen; - } - } - data_bits += LongHuffmancodebits(gfc, gi); - } - data_bits += huffman_coder_count1(gfc, gi); - /* does bitcount in quantize.c agree with actual bit count? */ - assert (data_bits == gi.part2_3_length); - assert (scale_bits == gi.part2_length); - tot_bits += scale_bits + data_bits; - } /* for ch */ - } /* for gf */ - return tot_bits; - } /* main_data */ - - public static class TotalBytes { - public int total; - } - - /* - * compute the number of bits required to flush all mp3 frames currently in - * the buffer. This should be the same as the reservoir size. Only call this - * routine between frames - i.e. only after all headers and data have been - * added to the buffer by format_bitstream(). - * - * Also compute total_bits_output = size of mp3 buffer (including frame - * headers which may not have yet been send to the mp3 buffer) + number of - * bits needed to flush all mp3 frames. - * - * total_bytes_output is the size of the mp3 output buffer if - * lame_encode_flush_nogap() was called right now. - */ - private int compute_flushbits(final LameGlobalFlags gfp, - final TotalBytes total_bytes_output) { - final LameInternalFlags gfc = gfp.internal_flags; - int flushbits, remaining_headers; - int bitsPerFrame; - int last_ptr, first_ptr; - first_ptr = gfc.w_ptr; - /* first header to add to bitstream */ - last_ptr = gfc.h_ptr - 1; - /* last header to add to bitstream */ - if (last_ptr == -1) - last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1; - - /* add this many bits to bitstream so we can flush all headers */ - flushbits = gfc.header[last_ptr].write_timing - totbit; - total_bytes_output.total = flushbits; - - if (flushbits >= 0) { - /* if flushbits >= 0, some headers have not yet been written */ - /* reduce flushbits by the size of the headers */ - remaining_headers = 1 + last_ptr - first_ptr; - if (last_ptr < first_ptr) - remaining_headers = 1 + last_ptr - first_ptr - + LameInternalFlags.MAX_HEADER_BUF; - flushbits -= remaining_headers * 8 * gfc.sideinfo_len; - } - - /* - * finally, add some bits so that the last frame is complete these bits - * are not necessary to decode the last frame, but some decoders will - * ignore last frame if these bits are missing - */ - bitsPerFrame = getframebits(gfp); - flushbits += bitsPerFrame; - total_bytes_output.total += bitsPerFrame; - /* round up: */ - if ((total_bytes_output.total % 8) != 0) - total_bytes_output.total = 1 + (total_bytes_output.total / 8); - else - total_bytes_output.total = (total_bytes_output.total / 8); - total_bytes_output.total += bufByteIdx + 1; - - if (flushbits < 0) { - System.err.println("strange error flushing buffer ... \n"); - } - return flushbits; - } - - public final void flush_bitstream(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - IIISideInfo l3_side; - int flushbits; - int last_ptr = gfc.h_ptr - 1; - /* last header to add to bitstream */ - if (last_ptr == -1) - last_ptr = LameInternalFlags.MAX_HEADER_BUF - 1; - l3_side = gfc.l3_side; - - if ((flushbits = compute_flushbits(gfp, new TotalBytes())) < 0) - return; - drain_into_ancillary(gfp, flushbits); - - /* check that the 100% of the last frame has been written to bitstream */ - assert (gfc.header[last_ptr].write_timing + getframebits(gfp) == totbit); - - /* - * we have padded out all frames with ancillary data, which is the same - * as filling the bitreservoir with ancillary data, so : - */ - gfc.ResvSize = 0; - l3_side.main_data_begin = 0; - - /* save the ReplayGain value */ - if (gfc.findReplayGain) { - final float RadioGain = (float) ga.GetTitleGain(gfc.rgdata); - assert (NEQ(RadioGain, GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)); - gfc.RadioGain = (int) Math.floor(RadioGain * 10.0 + 0.5); - /* round to nearest */ - } - - /* find the gain and scale change required for no clipping */ - if (gfc.findPeakSample) { - gfc.noclipGainChange = (int) Math.ceil(Math - .log10(gfc.PeakSample / 32767.0) * 20.0 * 10.0); - /* round up */ - - if (gfc.noclipGainChange > 0) { - /* clipping occurs */ - if (EQ(gfp.scale, 1.0f) || EQ(gfp.scale, 0.0f)) - gfc.noclipScale = (float) (Math - .floor((32767.0 / gfc.PeakSample) * 100.0f) / 100.0f); - /* round down */ - else { - /* - * the user specified his own scaling factor. We could - * suggest the scaling factor of - * (32767.0/gfp.PeakSample)*(gfp.scale) but it's usually - * very inaccurate. So we'd rather not advice him on the - * scaling factor. - */ - gfc.noclipScale = -1; - } - } else - /* no clipping */ - gfc.noclipScale = -1; - } - } - - public final void add_dummy_byte(final LameGlobalFlags gfp, final int val, - int n) { - final LameInternalFlags gfc = gfp.internal_flags; - int i; - - while (n-- > 0) { - putbits_noheaders(gfc, val, 8); - - for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i) - gfc.header[i].write_timing += 8; - } - } - - /** - * This is called after a frame of audio has been quantized and coded. It - * will write the encoded audio to the bitstream. Note that from a layer3 - * encoder's perspective the bit stream is primarily a series of main_data() - * blocks, with header and side information inserted at the proper locations - * to maintain framing. (See Figure A.7 in the IS). - */ - public final int format_bitstream(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - IIISideInfo l3_side; - l3_side = gfc.l3_side; - - int bitsPerFrame = getframebits(gfp); - drain_into_ancillary(gfp, l3_side.resvDrain_pre); - - encodeSideInfo2(gfp, bitsPerFrame); - int bits = 8 * gfc.sideinfo_len; - bits += writeMainData(gfp); - drain_into_ancillary(gfp, l3_side.resvDrain_post); - bits += l3_side.resvDrain_post; - - l3_side.main_data_begin += (bitsPerFrame - bits) / 8; - - /* - * compare number of bits needed to clear all buffered mp3 frames with - * what we think the resvsize is: - */ - if (compute_flushbits(gfp, new TotalBytes()) != gfc.ResvSize) { - System.err - .println("Internal buffer inconsistency. flushbits <> ResvSize"); - } - - /* - * compare main_data_begin for the next frame with what we think the - * resvsize is: - */ - if ((l3_side.main_data_begin * 8) != gfc.ResvSize) { - System.err.printf("bit reservoir error: \n" - + "l3_side.main_data_begin: %d \n" - + "Resvoir size: %d \n" - + "resv drain (post) %d \n" - + "resv drain (pre) %d \n" - + "header and sideinfo: %d \n" - + "data bits: %d \n" - + "total bits: %d (remainder: %d) \n" - + "bitsperframe: %d \n", - 8 * l3_side.main_data_begin, gfc.ResvSize, - l3_side.resvDrain_post, l3_side.resvDrain_pre, - 8 * gfc.sideinfo_len, bits - l3_side.resvDrain_post - 8 - * gfc.sideinfo_len, bits, bits % 8, bitsPerFrame); - - System.err - .println("This is a fatal error. It has several possible causes:"); - System.err - .println("90%% LAME compiled with buggy version of gcc using advanced optimizations"); - System.err.println(" 9%% Your system is overclocked"); - System.err.println(" 1%% bug in LAME encoding library"); - - gfc.ResvSize = l3_side.main_data_begin * 8; - } - ; - assert (totbit % 8 == 0); - - if (totbit > 1000000000) { - /* - * to avoid totbit overflow, (at 8h encoding at 128kbs) lets reset - * bit counter - */ - int i; - for (i = 0; i < LameInternalFlags.MAX_HEADER_BUF; ++i) - gfc.header[i].write_timing -= totbit; - totbit = 0; - } - - return 0; - } - - /** - * <PRE> - * copy data out of the internal MP3 bit buffer into a user supplied - * unsigned char buffer. - * - * mp3data=0 indicates data in buffer is an id3tags and VBR tags - * mp3data=1 data is real mp3 frame data. - * </PRE> - */ - public final int copy_buffer(final LameInternalFlags gfc, - final byte[] buffer, final int bufferPos, final int size, - final int mp3data) { - final int minimum = bufByteIdx + 1; - if (minimum <= 0) - return 0; - if (size != 0 && minimum > size) { - /* buffer is too small */ - return -1; - } - System.arraycopy(buf, 0, buffer, bufferPos, minimum); - bufByteIdx = -1; - bufBitIdx = 0; - - if (mp3data != 0) { - int[] crc = new int[1]; - crc[0] = gfc.nMusicCRC; - vbr.updateMusicCRC(crc, buffer, bufferPos, minimum); - gfc.nMusicCRC = crc[0]; - - /** - * sum number of bytes belonging to the mp3 stream this info will be - * written into the Xing/LAME header for seeking - */ - if (minimum > 0) { - gfc.VBR_seek_table.nBytesWritten += minimum; - } - - if (gfc.decode_on_the_fly) { /* decode the frame */ - float pcm_buf[][] = new float[2][1152]; - int mp3_in = minimum; - int samples_out = -1; - int i; - - /* re-synthesis to pcm. Repeat until we get a samples_out=0 */ - while (samples_out != 0) { - - samples_out = mpg.hip_decode1_unclipped(gfc.hip, buffer, - bufferPos, mp3_in, pcm_buf[0], pcm_buf[1]); - /* - * samples_out = 0: need more data to decode samples_out = - * -1: error. Lets assume 0 pcm output samples_out = number - * of samples output - */ - - /* - * set the lenght of the mp3 input buffer to zero, so that - * in the next iteration of the loop we will be querying - * mpglib about buffered data - */ - mp3_in = 0; - - if (samples_out == -1) { - /* - * error decoding. Not fatal, but might screw up the - * ReplayGain tag. What should we do? Ignore for now - */ - samples_out = 0; - } - if (samples_out > 0) { - /* process the PCM data */ - - /* - * this should not be possible, and indicates we have - * overflown the pcm_buf buffer - */ - assert (samples_out <= 1152); - - if (gfc.findPeakSample) { - for (i = 0; i < samples_out; i++) { - if (pcm_buf[0][i] > gfc.PeakSample) - gfc.PeakSample = pcm_buf[0][i]; - else if (-pcm_buf[0][i] > gfc.PeakSample) - gfc.PeakSample = -pcm_buf[0][i]; - } - if (gfc.channels_out > 1) - for (i = 0; i < samples_out; i++) { - if (pcm_buf[1][i] > gfc.PeakSample) - gfc.PeakSample = pcm_buf[1][i]; - else if (-pcm_buf[1][i] > gfc.PeakSample) - gfc.PeakSample = -pcm_buf[1][i]; - } - } - - if (gfc.findReplayGain) - if (ga.AnalyzeSamples(gfc.rgdata, pcm_buf[0], 0, - pcm_buf[1], 0, samples_out, - gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR) - return -6; - - } /* if (samples_out>0) */ - } /* while (samples_out!=0) */ - } /* if (gfc.decode_on_the_fly) */ - - } /* if (mp3data) */ - return minimum; - } - - public final void init_bit_stream_w(final LameInternalFlags gfc) { - buf = new byte[Lame.LAME_MAXMP3BUFFER]; - - gfc.h_ptr = gfc.w_ptr = 0; - gfc.header[gfc.h_ptr].write_timing = 0; - bufByteIdx = -1; - bufBitIdx = 0; - totbit = 0; - } - - // From machine.h - - public static boolean EQ(float a, float b) { - return (Math.abs(a) > Math.abs(b)) ? (Math.abs((a) - (b)) <= (Math - .abs(a) * 1e-6f)) - : (Math.abs((a) - (b)) <= (Math.abs(b) * 1e-6f)); - } - - public static boolean NEQ(float a, float b) { - return !EQ(a, b); - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CBRNewIterationLoop.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CBRNewIterationLoop.java deleted file mode 100644 index 0e0be8a1e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CBRNewIterationLoop.java +++ /dev/null @@ -1,91 +0,0 @@ -package mp3; - -/** - * author/date?? - * - * encodes one frame of MP3 data with constant bitrate - * - * @author Ken - * - */ -public final class CBRNewIterationLoop implements IIterationLoop { - /** - * - */ - private final Quantize quantize; - - /** - * @param quantize - */ - CBRNewIterationLoop(Quantize quantize) { - this.quantize = quantize; - } - - public void iteration_loop(final LameGlobalFlags gfp, final float pe[][], - final float ms_ener_ratio[], final III_psy_ratio ratio[][]) { - final LameInternalFlags gfc = gfp.internal_flags; - float l3_xmin[] = new float[L3Side.SFBMAX]; - float xrpow[] = new float[576]; - int targ_bits[] = new int[2]; - int mean_bits = 0, max_bits; - final IIISideInfo l3_side = gfc.l3_side; - - MeanBits mb = new MeanBits(mean_bits); - this.quantize.rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - /* quantize! */ - for (int gr = 0; gr < gfc.mode_gr; gr++) { - - /* - * calculate needed bits - */ - max_bits = this.quantize.qupvt.on_pe(gfp, pe, targ_bits, mean_bits, - gr, gr); - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - this.quantize.ms_convert(gfc.l3_side, gr); - this.quantize.qupvt.reduce_side(targ_bits, ms_ener_ratio[gr], - mean_bits, max_bits); - } - - for (int ch = 0; ch < gfc.channels_out; ch++) { - float adjust, masking_lower_db; - GrInfo cod_info = l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 0; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = (float) Math.pow(10.0, - masking_lower_db * 0.1); - - /* - * init_outer_loop sets up cod_info, scalefac and xrpow - */ - this.quantize.init_outer_loop(gfc, cod_info); - if (this.quantize.init_xrpow(gfc, cod_info, xrpow)) { - /* - * xr contains energy we will have to encode calculate the - * masking abilities find some good quantization in - * outer_loop - */ - this.quantize.qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin); - this.quantize.outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, - targ_bits[ch]); - } - - this.quantize.iteration_finish_one(gfc, gr, ch); - assert (cod_info.part2_3_length <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - assert (cod_info.part2_3_length <= targ_bits[ch]); - } /* for ch */ - } /* for gr */ - - this.quantize.rv.ResvFrameEnd(gfc, mean_bits); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseData.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseData.java deleted file mode 100644 index 9bf86d334..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseData.java +++ /dev/null @@ -1,12 +0,0 @@ -package mp3; - -/** - * allows re-use of previously computed noise values - */ -public class CalcNoiseData { - int global_gain; - int sfb_count1; - int step[] = new int[39]; - float noise[] = new float[39]; - float noise_log[] = new float[39]; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseResult.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseResult.java deleted file mode 100644 index 05a25ad44..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/CalcNoiseResult.java +++ /dev/null @@ -1,25 +0,0 @@ -package mp3; - -public class CalcNoiseResult { - /** - * sum of quantization noise > masking - */ - float over_noise; - /** - * sum of all quantization noise - */ - float tot_noise; - /** - * max quantization noise - */ - float max_noise; - /** - * number of quantization noise > masking - */ - int over_count; - /** - * SSD-like cost of distorted bands - */ - int over_SSD; - int bits; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Enc.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Enc.java deleted file mode 100644 index 7f2a0fecc..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Enc.java +++ /dev/null @@ -1,6 +0,0 @@ -package mp3; - -public class Enc { - public int enc_delay = -1; - public int enc_padding = -1; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Encoder.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Encoder.java deleted file mode 100644 index 79bac8eb5..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Encoder.java +++ /dev/null @@ -1,654 +0,0 @@ -/* - * LAME MP3 encoding engine - * - * Copyright (c) 1999 Mark Taylor - * Copyright (c) 2000-2002 Takehiro Tominaga - * Copyright (c) 2000-2005 Robert Hegemann - * Copyright (c) 2001 Gabriel Bouvigne - * Copyright (c) 2001 John Dahlstrom - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Encoder.java,v 1.21 2011/05/24 21:45:14 kenchis Exp $ */ -package mp3; - -public class Encoder { - BitStream bs; - public PsyModel psy; - VBRTag vbr; - QuantizePVT qupvt; - - public final void setModules(BitStream bs, PsyModel psy, QuantizePVT qupvt, - VBRTag vbr) { - this.bs = bs; - this.psy = psy; - this.vbr = vbr; - this.qupvt = qupvt; - } - - private NewMDCT newMDCT = new NewMDCT(); - - /*********************************************************************** - * - * encoder and decoder delays - * - ***********************************************************************/ - - /** - * <PRE> - * layer III enc->dec delay: 1056 (1057?) (observed) - * layer II enc->dec delay: 480 (481?) (observed) - * - * polyphase 256-16 (dec or enc) = 240 - * mdct 256+32 (9*32) (dec or enc) = 288 - * total: 512+16 - * - * My guess is that delay of polyphase filterbank is actualy 240.5 - * (there are technical reasons for this, see postings in mp3encoder). - * So total Encode+Decode delay = ENCDELAY + 528 + 1 - * </PRE> - */ - - /** - * ENCDELAY The encoder delay. - * - * Minimum allowed is MDCTDELAY (see below) - * - * The first 96 samples will be attenuated, so using a value less than 96 - * will result in corrupt data for the first 96-ENCDELAY samples. - * - * suggested: 576 set to 1160 to sync with FhG. - */ - public static final int ENCDELAY = 576; - - /** - * make sure there is at least one complete frame after the last frame - * containing real data - * - * Using a value of 288 would be sufficient for a a very sophisticated - * decoder that can decode granule-by-granule instead of frame by frame. But - * lets not assume this, and assume the decoder will not decode frame N - * unless it also has data for frame N+1 - */ - public static final int POSTDELAY = 1152; - - /** - * delay of the MDCT used in mdct.c original ISO routines had a delay of - * 528! Takehiro's routines: - */ - public static final int MDCTDELAY = 48; - public static final int FFTOFFSET = (224 + MDCTDELAY); - - /** - * Most decoders, including the one we use, have a delay of 528 samples. - */ - public static final int DECDELAY = 528; - - /** - * number of subbands - */ - public static final int SBLIMIT = 32; - - /** - * parition bands bands - */ - public static final int CBANDS = 64; - - /** - * number of critical bands/scale factor bands where masking is computed - */ - public static final int SBPSY_l = 21; - public static final int SBPSY_s = 12; - - /** - * total number of scalefactor bands encoded - */ - public static final int SBMAX_l = 22; - public static final int SBMAX_s = 13; - public static final int PSFB21 = 6; - public static final int PSFB12 = 6; - - /** - * FFT sizes - */ - public static final int BLKSIZE = 1024; - public static final int HBLKSIZE = (BLKSIZE / 2 + 1); - public static final int BLKSIZE_s = 256; - public static final int HBLKSIZE_s = (BLKSIZE_s / 2 + 1); - - public static final int NORM_TYPE = 0; - public static final int START_TYPE = 1; - public static final int SHORT_TYPE = 2; - public static final int STOP_TYPE = 3; - - /** - * <PRE> - * Mode Extention: - * When we are in stereo mode, there are 4 possible methods to store these - * two channels. The stereo modes -m? are using a subset of them. - * - * -ms: MPG_MD_LR_LR - * -mj: MPG_MD_LR_LR and MPG_MD_MS_LR - * -mf: MPG_MD_MS_LR - * -mi: all - * </PRE> - */ - public static final int MPG_MD_LR_LR = 0; - public static final int MPG_MD_LR_I = 1; - public static final int MPG_MD_MS_LR = 2; - public static final int MPG_MD_MS_I = 3; - - /** - * auto-adjust of ATH, useful for low volume Gabriel Bouvigne 3 feb 2001 - * - * modifies some values in gfp.internal_flags.ATH (gfc.ATH) - */ - private void adjust_ATH(final LameInternalFlags gfc) { - float gr2_max, max_pow; - - if (gfc.ATH.useAdjust == 0) { - gfc.ATH.adjust = 1.0f; - /* no adjustment */ - return; - } - - /* jd - 2001 mar 12, 27, jun 30 */ - /* loudness based on equal loudness curve; */ - /* use granule with maximum combined loudness */ - max_pow = gfc.loudness_sq[0][0]; - gr2_max = gfc.loudness_sq[1][0]; - if (gfc.channels_out == 2) { - max_pow += gfc.loudness_sq[0][1]; - gr2_max += gfc.loudness_sq[1][1]; - } else { - max_pow += max_pow; - gr2_max += gr2_max; - } - if (gfc.mode_gr == 2) { - max_pow = Math.max(max_pow, gr2_max); - } - max_pow *= 0.5; /* max_pow approaches 1.0 for full band noise */ - - /* jd - 2001 mar 31, jun 30 */ - /* user tuning of ATH adjustment region */ - max_pow *= gfc.ATH.aaSensitivityP; - - /* - * adjust ATH depending on range of maximum value - */ - - /* jd - 2001 feb27, mar12,20, jun30, jul22 */ - /* continuous curves based on approximation */ - /* to GB's original values. */ - /* For an increase in approximate loudness, */ - /* set ATH adjust to adjust_limit immediately */ - /* after a delay of one frame. */ - /* For a loudness decrease, reduce ATH adjust */ - /* towards adjust_limit gradually. */ - /* max_pow is a loudness squared or a power. */ - if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */ - if (gfc.ATH.adjust >= 1.0) { - gfc.ATH.adjust = 1.0f; - } else { - /* preceding frame has lower ATH adjust; */ - /* ascend only to the preceding adjust_limit */ - /* in case there is leading low volume */ - if (gfc.ATH.adjust < gfc.ATH.adjustLimit) { - gfc.ATH.adjust = gfc.ATH.adjustLimit; - } - } - gfc.ATH.adjustLimit = 1.0f; - } else { /* adjustment curve */ - /* about 32 dB maximum adjust (0.000625) */ - final float adj_lim_new = 31.98f * max_pow + 0.000625f; - if (gfc.ATH.adjust >= adj_lim_new) { /* descend gradually */ - gfc.ATH.adjust *= adj_lim_new * 0.075 + 0.925; - if (gfc.ATH.adjust < adj_lim_new) { /* stop descent */ - gfc.ATH.adjust = adj_lim_new; - } - } else { /* ascend */ - if (gfc.ATH.adjustLimit >= adj_lim_new) { - gfc.ATH.adjust = adj_lim_new; - } else { - /* preceding frame has lower ATH adjust; */ - /* ascend only to the preceding adjust_limit */ - if (gfc.ATH.adjust < gfc.ATH.adjustLimit) { - gfc.ATH.adjust = gfc.ATH.adjustLimit; - } - } - } - gfc.ATH.adjustLimit = adj_lim_new; - } - } - - /** - * <PRE> - * some simple statistics - * - * bitrate index 0: free bitrate . not allowed in VBR mode - * : bitrates, kbps depending on MPEG version - * bitrate index 15: forbidden - * - * mode_ext: - * 0: LR - * 1: LR-i - * 2: MS - * 3: MS-i - * </PRE> - */ - private void updateStats(final LameInternalFlags gfc) { - int gr, ch; - assert (0 <= gfc.bitrate_index && gfc.bitrate_index < 16); - assert (0 <= gfc.mode_ext && gfc.mode_ext < 4); - - /* count bitrate indices */ - gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][4]++; - gfc.bitrate_stereoMode_Hist[15][4]++; - - /* count 'em for every mode extension in case of 2 channel encoding */ - if (gfc.channels_out == 2) { - gfc.bitrate_stereoMode_Hist[gfc.bitrate_index][gfc.mode_ext]++; - gfc.bitrate_stereoMode_Hist[15][gfc.mode_ext]++; - } - for (gr = 0; gr < gfc.mode_gr; ++gr) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - int bt = gfc.l3_side.tt[gr][ch].block_type; - if (gfc.l3_side.tt[gr][ch].mixed_block_flag != 0) - bt = 4; - gfc.bitrate_blockType_Hist[gfc.bitrate_index][bt]++; - gfc.bitrate_blockType_Hist[gfc.bitrate_index][5]++; - gfc.bitrate_blockType_Hist[15][bt]++; - gfc.bitrate_blockType_Hist[15][5]++; - } - } - } - - private void lame_encode_frame_init(final LameGlobalFlags gfp, - final float inbuf[][]) { - final LameInternalFlags gfc = gfp.internal_flags; - - int ch, gr; - - if (gfc.lame_encode_frame_init == 0) { - /* prime the MDCT/polyphase filterbank with a short block */ - int i, j; - float primebuff0[] = new float[286 + 1152 + 576]; - float primebuff1[] = new float[286 + 1152 + 576]; - gfc.lame_encode_frame_init = 1; - for (i = 0, j = 0; i < 286 + 576 * (1 + gfc.mode_gr); ++i) { - if (i < 576 * gfc.mode_gr) { - primebuff0[i] = 0; - if (gfc.channels_out == 2) - primebuff1[i] = 0; - } else { - primebuff0[i] = inbuf[0][j]; - if (gfc.channels_out == 2) - primebuff1[i] = inbuf[1][j]; - ++j; - } - } - /* polyphase filtering / mdct */ - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.l3_side.tt[gr][ch].block_type = SHORT_TYPE; - } - } - newMDCT.mdct_sub48(gfc, primebuff0, primebuff1); - - /* check FFT will not use a negative starting offset */ - assert (576 >= FFTOFFSET); - /* check if we have enough data for FFT */ - assert (gfc.mf_size >= (BLKSIZE + gfp.framesize - FFTOFFSET)); - /* check if we have enough data for polyphase filterbank */ - assert (gfc.mf_size >= (512 + gfp.framesize - 32)); - } - - } - - /** - * <PRE> - * encodeframe() Layer 3 - * - * encode a single frame - * - * - * lame_encode_frame() - * - * - * gr 0 gr 1 - * inbuf: |--------------|--------------|--------------| - * - * - * Polyphase (18 windows, each shifted 32) - * gr 0: - * window1 <----512---. - * window18 <----512---. - * - * gr 1: - * window1 <----512---. - * window18 <----512---. - * - * - * - * MDCT output: |--------------|--------------|--------------| - * - * FFT's <---------1024---------. - * <---------1024-------. - * - * - * - * inbuf = buffer of PCM data size=MP3 framesize - * encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY - * so the MDCT coefficints are from inbuf[ch][-MDCTDELAY] - * - * psy-model FFT has a 1 granule delay, so we feed it data for the - * next granule. - * FFT is centered over granule: 224+576+224 - * So FFT starts at: 576-224-MDCTDELAY - * - * MPEG2: FFT ends at: BLKSIZE+576-224-MDCTDELAY (1328) - * MPEG1: FFT ends at: BLKSIZE+2*576-224-MDCTDELAY (1904) - * - * MPEG2: polyphase first window: [0..511] - * 18th window: [544..1055] (1056) - * MPEG1: 36th window: [1120..1631] (1632) - * data needed: 512+framesize-32 - * - * A close look newmdct.c shows that the polyphase filterbank - * only uses data from [0..510] for each window. Perhaps because the window - * used by the filterbank is zero for the last point, so Takehiro's - * code doesn't bother to compute with it. - * - * FFT starts at 576-224-MDCTDELAY (304) = 576-FFTOFFSET - * - * </PRE> - */ - - private static final float fircoef[] = { -0.0207887f * 5, -0.0378413f * 5, - -0.0432472f * 5, -0.031183f * 5, 7.79609e-18f * 5, 0.0467745f * 5, - 0.10091f * 5, 0.151365f * 5, 0.187098f * 5 }; - - public final int lame_encode_mp3_frame(final LameGlobalFlags gfp, - final float[] inbuf_l, final float[] inbuf_r, byte[] mp3buf, - int mp3bufPos, int mp3buf_size) { - int mp3count; - III_psy_ratio masking_LR[][] = new III_psy_ratio[2][2]; /* - * LR masking & - * energy - */ - masking_LR[0][0] = new III_psy_ratio(); - masking_LR[0][1] = new III_psy_ratio(); - masking_LR[1][0] = new III_psy_ratio(); - masking_LR[1][1] = new III_psy_ratio(); - III_psy_ratio masking_MS[][] = new III_psy_ratio[2][2]; - /* MS masking & energy */ - masking_MS[0][0] = new III_psy_ratio(); - masking_MS[0][1] = new III_psy_ratio(); - masking_MS[1][0] = new III_psy_ratio(); - masking_MS[1][1] = new III_psy_ratio(); - III_psy_ratio masking[][]; - /* pointer to selected maskings */ - final float[] inbuf[] = new float[2][]; - final LameInternalFlags gfc = gfp.internal_flags; - - float tot_ener[][] = new float[2][4]; - float ms_ener_ratio[] = { .5f, .5f }; - float[][] pe = { { 0.f, 0.f }, { 0.f, 0.f } }, pe_MS = { { 0.f, 0.f }, - { 0.f, 0.f } }; - float[][] pe_use; - - int ch, gr; - - inbuf[0] = inbuf_l; - inbuf[1] = inbuf_r; - - if (gfc.lame_encode_frame_init == 0) { - /* first run? */ - lame_encode_frame_init(gfp, inbuf); - - } - - /********************** padding *****************************/ - /** - * <PRE> - * padding method as described in - * "MPEG-Layer3 / Bitstream Syntax and Decoding" - * by Martin Sieler, Ralph Sperschneider - * - * note: there is no padding for the very first frame - * - * Robert Hegemann 2000-06-22 - * </PRE> - */ - gfc.padding = 0; - if ((gfc.slot_lag -= gfc.frac_SpF) < 0) { - gfc.slot_lag += gfp.out_samplerate; - gfc.padding = 1; - } - - /**************************************** - * Stage 1: psychoacoustic model * - ****************************************/ - - if (gfc.psymodel != 0) { - /* - * psychoacoustic model psy model has a 1 granule (576) delay that - * we must compensate for (mt 6/99). - */ - int ret; - final float bufp[][] = new float[2][]; - /* address of beginning of left & right granule */ - int bufpPos = 0; - /* address of beginning of left & right granule */ - int blocktype[] = new int[2]; - - for (gr = 0; gr < gfc.mode_gr; gr++) { - - for (ch = 0; ch < gfc.channels_out; ch++) { - bufp[ch] = inbuf[ch]; - bufpPos = 576 + gr * 576 - FFTOFFSET; - } - if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) { - ret = psy.L3psycho_anal_vbr(gfp, bufp, bufpPos, gr, - masking_LR, masking_MS, pe[gr], pe_MS[gr], - tot_ener[gr], blocktype); - } else { - ret = psy.L3psycho_anal_ns(gfp, bufp, bufpPos, gr, - masking_LR, masking_MS, pe[gr], pe_MS[gr], - tot_ener[gr], blocktype); - } - if (ret != 0) - return -4; - - if (gfp.mode == MPEGMode.JOINT_STEREO) { - ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3]; - if (ms_ener_ratio[gr] > 0) - ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr]; - } - - /* block type flags */ - for (ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo cod_info = gfc.l3_side.tt[gr][ch]; - cod_info.block_type = blocktype[ch]; - cod_info.mixed_block_flag = 0; - } - } - } else { - /* no psy model */ - for (gr = 0; gr < gfc.mode_gr; gr++) - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.l3_side.tt[gr][ch].block_type = NORM_TYPE; - gfc.l3_side.tt[gr][ch].mixed_block_flag = 0; - pe_MS[gr][ch] = pe[gr][ch] = 700; - } - } - - /* auto-adjust of ATH, useful for low volume */ - adjust_ATH(gfc); - - /**************************************** - * Stage 2: MDCT * - ****************************************/ - - /* polyphase filtering / mdct */ - newMDCT.mdct_sub48(gfc, inbuf[0], inbuf[1]); - - /**************************************** - * Stage 3: MS/LR decision * - ****************************************/ - - /* Here will be selected MS or LR coding of the 2 stereo channels */ - gfc.mode_ext = MPG_MD_LR_LR; - - if (gfp.force_ms) { - gfc.mode_ext = MPG_MD_MS_LR; - } else if (gfp.mode == MPEGMode.JOINT_STEREO) { - /* - * ms_ratio = is scaled, for historical reasons, to look like a - * ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R - * uncorrelated - */ - - /** - * <PRE> - * [0] and [1] are the results for the two granules in MPEG-1, - * in MPEG-2 it's only a faked averaging of the same value - * _prev is the value of the last granule of the previous frame - * _next is the value of the first granule of the next frame - * </PRE> - */ - - float sum_pe_MS = 0; - float sum_pe_LR = 0; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - sum_pe_MS += pe_MS[gr][ch]; - sum_pe_LR += pe[gr][ch]; - } - } - - /* based on PE: M/S coding would not use much more bits than L/R */ - if (sum_pe_MS <= 1.00 * sum_pe_LR) { - - final GrInfo gi0[] = gfc.l3_side.tt[0]; - final GrInfo gi1[] = gfc.l3_side.tt[gfc.mode_gr - 1]; - - if (gi0[0].block_type == gi0[1].block_type - && gi1[0].block_type == gi1[1].block_type) { - - gfc.mode_ext = MPG_MD_MS_LR; - } - } - } - - /* bit and noise allocation */ - if (gfc.mode_ext == MPG_MD_MS_LR) { - masking = masking_MS; /* use MS masking */ - pe_use = pe_MS; - } else { - masking = masking_LR; /* use LR masking */ - pe_use = pe; - } - - /* copy data for MP3 frame analyzer */ - if (gfp.analysis && gfc.pinfo != null) { - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - gfc.pinfo.ms_ratio[gr] = gfc.ms_ratio[gr]; - gfc.pinfo.ms_ener_ratio[gr] = ms_ener_ratio[gr]; - gfc.pinfo.blocktype[gr][ch] = gfc.l3_side.tt[gr][ch].block_type; - gfc.pinfo.pe[gr][ch] = pe_use[gr][ch]; - System.arraycopy(gfc.l3_side.tt[gr][ch].xr, 0, - gfc.pinfo.xr[gr][ch], 0, 576); - /* - * in psymodel, LR and MS data was stored in pinfo. switch - * to MS data: - */ - if (gfc.mode_ext == MPG_MD_MS_LR) { - gfc.pinfo.ers[gr][ch] = gfc.pinfo.ers[gr][ch + 2]; - System.arraycopy(gfc.pinfo.energy[gr][ch + 2], 0, - gfc.pinfo.energy[gr][ch], 0, - gfc.pinfo.energy[gr][ch].length); - } - } - } - } - - /**************************************** - * Stage 4: quantization loop * - ****************************************/ - - if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr) { - - int i; - float f; - - for (i = 0; i < 18; i++) - gfc.nsPsy.pefirbuf[i] = gfc.nsPsy.pefirbuf[i + 1]; - - f = 0.0f; - for (gr = 0; gr < gfc.mode_gr; gr++) - for (ch = 0; ch < gfc.channels_out; ch++) - f += pe_use[gr][ch]; - gfc.nsPsy.pefirbuf[18] = f; - - f = gfc.nsPsy.pefirbuf[9]; - for (i = 0; i < 9; i++) - f += (gfc.nsPsy.pefirbuf[i] + gfc.nsPsy.pefirbuf[18 - i]) - * fircoef[i]; - - f = (670 * 5 * gfc.mode_gr * gfc.channels_out) / f; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - pe_use[gr][ch] *= f; - } - } - } - gfc.iteration_loop.iteration_loop(gfp, pe_use, ms_ener_ratio, masking); - - /**************************************** - * Stage 5: bitstream formatting * - ****************************************/ - - /* write the frame to the bitstream */ - bs.format_bitstream(gfp); - - /* copy mp3 bit buffer into array */ - mp3count = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 1); - - if (gfp.bWriteVbrTag) - vbr.addVbrFrame(gfp); - - if (gfp.analysis && gfc.pinfo != null) { - for (ch = 0; ch < gfc.channels_out; ch++) { - int j; - for (j = 0; j < FFTOFFSET; j++) - gfc.pinfo.pcmdata[ch][j] = gfc.pinfo.pcmdata[ch][j - + gfp.framesize]; - for (j = FFTOFFSET; j < 1600; j++) { - gfc.pinfo.pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET]; - } - } - qupvt.set_frame_pinfo(gfp, masking); - } - - updateStats(gfc); - - return mp3count; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FFT.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FFT.java deleted file mode 100644 index e06a1f794..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FFT.java +++ /dev/null @@ -1,267 +0,0 @@ -/* -** FFT and FHT routines -** Copyright 1988, 1993; Ron Mayer -** Copyright (c) 1999-2000 Takehiro Tominaga -** -** fht(fz,n); -** Does a hartley transform of "n" points in the array "fz". -** -** NOTE: This routine uses at least 2 patented algorithms, and may be -** under the restrictions of a bunch of different organizations. -** Although I wrote it completely myself; it is kind of a derivative -** of a routine I once authored and released under the GPL, so it -** may fall under the free software foundation's restrictions; -** it was worked on as a Stanford Univ project, so they claim -** some rights to it; it was further optimized at work here, so -** I think this company claims parts of it. The patents are -** held by R. Bracewell (the FHT algorithm) and O. Buneman (the -** trig generator), both at Stanford Univ. -** If it were up to me, I'd say go do whatever you want with it; -** but it would be polite to give credit to the following people -** if you use this anywhere: -** Euler - probable inventor of the fourier transform. -** Gauss - probable inventor of the FFT. -** Hartley - probable inventor of the hartley transform. -** Buneman - for a really cool trig generator -** Mayer(me) - for authoring this particular version and -** including all the optimizations in one package. -** Thanks, -** Ron Mayer; mayer@acuson.com -** and added some optimization by -** Mather - idea of using lookup table -** Takehiro - some dirty hack for speed up -*/ -package mp3; - - -public class FFT { - - private static float window[] = new float[Encoder.BLKSIZE], - window_s[] = new float[Encoder.BLKSIZE_s / 2]; - - private static final float costab[] = { - 9.238795325112867e-01f, 3.826834323650898e-01f, - 9.951847266721969e-01f, 9.801714032956060e-02f, - 9.996988186962042e-01f, 2.454122852291229e-02f, - 9.999811752826011e-01f, 6.135884649154475e-03f - }; - - private void fht(final float[] fz, final int fzPos, int n) { - int tri = 0; - int k4; - int fi; - int gi; - final int fn; - - n <<= 1; /* to get BLKSIZE, because of 3DNow! ASM routine */ - fn = fzPos + n; - k4 = 4; - do { - float s1, c1; - int i, k1, k2, k3, kx; - kx = k4 >> 1; - k1 = k4; - k2 = k4 << 1; - k3 = k2 + k1; - k4 = k2 << 1; - fi = fzPos; - gi = fi + kx; - do { - float f0, f1, f2, f3; - f1 = fz[fi + 0] - fz[fi + k1]; - f0 = fz[fi + 0] + fz[fi + k1]; - f3 = fz[fi + k2] - fz[fi + k3]; - f2 = fz[fi + k2] + fz[fi + k3]; - fz[fi + k2] = f0 - f2; - fz[fi + 0] = f0 + f2; - fz[fi + k3] = f1 - f3; - fz[fi + k1] = f1 + f3; - f1 = fz[gi + 0] - fz[gi + k1]; - f0 = fz[gi + 0] + fz[gi + k1]; - f3 = (float) (Util.SQRT2 * fz[gi + k3]); - f2 = (float) (Util.SQRT2 * fz[gi + k2]); - fz[gi + k2] = f0 - f2; - fz[gi + 0] = f0 + f2; - fz[gi + k3] = f1 - f3; - fz[gi + k1] = f1 + f3; - gi += k4; - fi += k4; - } while (fi < fn); - c1 = costab[tri + 0]; - s1 = costab[tri + 1]; - for (i = 1; i < kx; i++) { - float c2, s2; - c2 = 1 - (2 * s1) * s1; - s2 = (2 * s1) * c1; - fi = fzPos + i; - gi = fzPos + k1 - i; - do { - float a, b, g0, f0, f1, g1, f2, g2, f3, g3; - b = s2 * fz[fi + k1] - c2 * fz[gi + k1]; - a = c2 * fz[fi + k1] + s2 * fz[gi + k1]; - f1 = fz[fi + 0] - a; - f0 = fz[fi + 0] + a; - g1 = fz[gi + 0] - b; - g0 = fz[gi + 0] + b; - b = s2 * fz[fi + k3] - c2 * fz[gi + k3]; - a = c2 * fz[fi + k3] + s2 * fz[gi + k3]; - f3 = fz[fi + k2] - a; - f2 = fz[fi + k2] + a; - g3 = fz[gi + k2] - b; - g2 = fz[gi + k2] + b; - b = s1 * f2 - c1 * g3; - a = c1 * f2 + s1 * g3; - fz[fi + k2] = f0 - a; - fz[fi + 0] = f0 + a; - fz[gi + k3] = g1 - b; - fz[gi + k1] = g1 + b; - b = c1 * g2 - s1 * f3; - a = s1 * g2 + c1 * f3; - fz[gi + k2] = g0 - a; - fz[gi + 0] = g0 + a; - fz[fi + k3] = f1 - b; - fz[fi + k1] = f1 + b; - gi += k4; - fi += k4; - } while (fi < fn); - c2 = c1; - c1 = c2 * costab[tri + 0] - s1 * costab[tri + 1]; - s1 = c2 * costab[tri + 1] + s1 * costab[tri + 0]; - } - tri += 2; - } while (k4 < n); - } - - private static final byte rv_tbl[] = { 0x00, (byte) 0x80, 0x40, - (byte) 0xc0, 0x20, (byte) 0xa0, 0x60, (byte) 0xe0, 0x10, - (byte) 0x90, 0x50, (byte) 0xd0, 0x30, (byte) 0xb0, 0x70, - (byte) 0xf0, 0x08, (byte) 0x88, 0x48, (byte) 0xc8, 0x28, - (byte) 0xa8, 0x68, (byte) 0xe8, 0x18, (byte) 0x98, 0x58, - (byte) 0xd8, 0x38, (byte) 0xb8, 0x78, (byte) 0xf8, 0x04, - (byte) 0x84, 0x44, (byte) 0xc4, 0x24, (byte) 0xa4, 0x64, - (byte) 0xe4, 0x14, (byte) 0x94, 0x54, (byte) 0xd4, 0x34, - (byte) 0xb4, 0x74, (byte) 0xf4, 0x0c, (byte) 0x8c, 0x4c, - (byte) 0xcc, 0x2c, (byte) 0xac, 0x6c, (byte) 0xec, 0x1c, - (byte) 0x9c, 0x5c, (byte) 0xdc, 0x3c, (byte) 0xbc, 0x7c, - (byte) 0xfc, 0x02, (byte) 0x82, 0x42, (byte) 0xc2, 0x22, - (byte) 0xa2, 0x62, (byte) 0xe2, 0x12, (byte) 0x92, 0x52, - (byte) 0xd2, 0x32, (byte) 0xb2, 0x72, (byte) 0xf2, 0x0a, - (byte) 0x8a, 0x4a, (byte) 0xca, 0x2a, (byte) 0xaa, 0x6a, - (byte) 0xea, 0x1a, (byte) 0x9a, 0x5a, (byte) 0xda, 0x3a, - (byte) 0xba, 0x7a, (byte) 0xfa, 0x06, (byte) 0x86, 0x46, - (byte) 0xc6, 0x26, (byte) 0xa6, 0x66, (byte) 0xe6, 0x16, - (byte) 0x96, 0x56, (byte) 0xd6, 0x36, (byte) 0xb6, 0x76, - (byte) 0xf6, 0x0e, (byte) 0x8e, 0x4e, (byte) 0xce, 0x2e, - (byte) 0xae, 0x6e, (byte) 0xee, 0x1e, (byte) 0x9e, 0x5e, - (byte) 0xde, 0x3e, (byte) 0xbe, 0x7e, (byte) 0xfe }; - - public final void fft_short(final LameInternalFlags gfc, - final float x_real[][], final int chn, final float[] buffer[], - final int bufPos) { - for (int b = 0; b < 3; b++) { - int x = Encoder.BLKSIZE_s / 2; - final short k = (short) ((576 / 3) * (b + 1)); - int j = Encoder.BLKSIZE_s / 8 - 1; - do { - float f0, f1, f2, f3, w; - - int i = rv_tbl[j << 2] & 0xff; - - f0 = window_s[i] * buffer[chn][bufPos + i + k]; - w = window_s[0x7f - i] * buffer[chn][bufPos + i + k + 0x80]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window_s[i + 0x40] * buffer[chn][bufPos + i + k + 0x40]; - w = window_s[0x3f - i] * buffer[chn][bufPos + i + k + 0xc0]; - f3 = f2 - w; - f2 = f2 + w; - - x -= 4; - x_real[b][x + 0] = f0 + f2; - x_real[b][x + 2] = f0 - f2; - x_real[b][x + 1] = f1 + f3; - x_real[b][x + 3] = f1 - f3; - - f0 = window_s[i + 0x01] * buffer[chn][bufPos + i + k + 0x01]; - w = window_s[0x7e - i] * buffer[chn][bufPos + i + k + 0x81]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window_s[i + 0x41] * buffer[chn][bufPos + i + k + 0x41]; - w = window_s[0x3e - i] * buffer[chn][bufPos + i + k + 0xc1]; - f3 = f2 - w; - f2 = f2 + w; - - x_real[b][x + Encoder.BLKSIZE_s / 2 + 0] = f0 + f2; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 2] = f0 - f2; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 1] = f1 + f3; - x_real[b][x + Encoder.BLKSIZE_s / 2 + 3] = f1 - f3; - } while (--j >= 0); - - fht(x_real[b], x, Encoder.BLKSIZE_s / 2); - /* BLKSIZE_s/2 because of 3DNow! ASM routine */ - /* BLKSIZE/2 because of 3DNow! ASM routine */ - } - } - - public final void fft_long(final LameInternalFlags gfc, float y[], int chn, - final float[] buffer[], int bufPos) { - int jj = Encoder.BLKSIZE / 8 - 1; - int x = Encoder.BLKSIZE / 2; - - do { - float f0, f1, f2, f3, w; - - int i = rv_tbl[jj] & 0xff; - f0 = window[i] * buffer[chn][bufPos + i]; - w = window[i + 0x200] * buffer[chn][bufPos + i + 0x200]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window[i + 0x100] * buffer[chn][bufPos + i + 0x100]; - w = window[i + 0x300] * buffer[chn][bufPos + i + 0x300]; - f3 = f2 - w; - f2 = f2 + w; - - x -= 4; - y[x + 0] = f0 + f2; - y[x + 2] = f0 - f2; - y[x + 1] = f1 + f3; - y[x + 3] = f1 - f3; - - f0 = window[i + 0x001] * buffer[chn][bufPos + i + 0x001]; - w = window[i + 0x201] * buffer[chn][bufPos + i + 0x201]; - f1 = f0 - w; - f0 = f0 + w; - f2 = window[i + 0x101] * buffer[chn][bufPos + i + 0x101]; - w = window[i + 0x301] * buffer[chn][bufPos + i + 0x301]; - f3 = f2 - w; - f2 = f2 + w; - - y[x + Encoder.BLKSIZE / 2 + 0] = f0 + f2; - y[x + Encoder.BLKSIZE / 2 + 2] = f0 - f2; - y[x + Encoder.BLKSIZE / 2 + 1] = f1 + f3; - y[x + Encoder.BLKSIZE / 2 + 3] = f1 - f3; - } while (--jj >= 0); - - fht(y, x, Encoder.BLKSIZE / 2); - /* BLKSIZE/2 because of 3DNow! ASM routine */ - } - - public final void init_fft(final LameInternalFlags gfc) { - /* The type of window used here will make no real difference, but */ - /* - * in the interest of merging nspsytune stuff - switch to blackman - * window - */ - for (int i = 0; i < Encoder.BLKSIZE; i++) - /* blackman window */ - window[i] = (float) (0.42 - 0.5 * Math.cos(2 * Math.PI * (i + .5) - / Encoder.BLKSIZE) + 0.08 * Math.cos(4 * Math.PI * (i + .5) - / Encoder.BLKSIZE)); - - for (int i = 0; i < Encoder.BLKSIZE_s / 2; i++) - window_s[i] = (float) (0.5 * (1.0 - Math.cos(2.0 * Math.PI - * (i + 0.5) / Encoder.BLKSIZE_s))); - - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FrameDataNode.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FrameDataNode.java deleted file mode 100644 index 3512f51c5..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/FrameDataNode.java +++ /dev/null @@ -1,15 +0,0 @@ -package mp3; - -public final class FrameDataNode { - FrameDataNode nxt; - /** - * Frame Identifier - */ - int fid; - /** - * 3-character language descriptor - */ - String lng; - - Inf dsc = new Inf(), txt = new Inf(); -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GainAnalysis.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GainAnalysis.java deleted file mode 100644 index 48111e362..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GainAnalysis.java +++ /dev/null @@ -1,533 +0,0 @@ -/* - * ReplayGainAnalysis - analyzes input samples and give the recommended dB change - * Copyright (C) 2001 David Robinson and Glen Sawyer - * Improvements and optimizations added by Frank Klemm, and by Marcel Muller - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * concept and filter values by David Robinson (David@Robinson.org) - * -- blame him if you think the idea is flawed - * original coding by Glen Sawyer (mp3gain@hotmail.com) - * -- blame him if you think this runs too slowly, or the coding is otherwise flawed - * - * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ ) - * -- credit him for all the _good_ programming ;) - * - * - * For an explanation of the concepts and the basic algorithms involved, go to: - * http://www.replaygain.org/ - */ - -/* - * Here's the deal. Call - * - * InitGainAnalysis ( long samplefreq ); - * - * to initialize everything. Call - * - * AnalyzeSamples ( const Float_t* left_samples, - * const Float_t* right_samples, - * size_t num_samples, - * int num_channels ); - * - * as many times as you want, with as many or as few samples as you want. - * If mono, pass the sample buffer in through left_samples, leave - * right_samples NULL, and make sure num_channels = 1. - * - * GetTitleGain() - * - * will return the recommended dB level change for all samples analyzed - * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis(). - * - * GetAlbumGain() - * - * will return the recommended dB level change for all samples analyzed - * since InitGainAnalysis() was called and finalized with GetTitleGain(). - * - * Pseudo-code to process an album: - * - * Float_t l_samples [4096]; - * Float_t r_samples [4096]; - * size_t num_samples; - * unsigned int num_songs; - * unsigned int i; - * - * InitGainAnalysis ( 44100 ); - * for ( i = 1; i <= num_songs; i++ ) { - * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 ) - * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 ); - * fprintf ("Recommended dB change for song %2d: %+6.2f dB\n", i, GetTitleGain() ); - * } - * fprintf ("Recommended dB change for whole album: %+6.2f dB\n", GetAlbumGain() ); - */ - -/* - * So here's the main source of potential code confusion: - * - * The filters applied to the incoming samples are IIR filters, - * meaning they rely on up to <filter order> number of previous samples - * AND up to <filter order> number of previous filtered samples. - * - * I set up the AnalyzeSamples routine to minimize memory usage and interface - * complexity. The speed isn't compromised too much (I don't think), but the - * internal complexity is higher than it should be for such a relatively - * simple routine. - * - * Optimization/clarity suggestions are welcome. - */ -package mp3; - -import java.util.Arrays; - -public class GainAnalysis { - /** - * calibration value for 89dB - */ - private static final float PINK_REF = 64.82f; - - private static final int YULE_ORDER = 10; - /** - * percentile which is louder than the proposed level - */ - private static final float RMS_PERCENTILE = 0.95f; - /** - * maximum allowed sample frequency [Hz] - */ - private static final int MAX_SAMP_FREQ = 48000; - private static final int RMS_WINDOW_TIME_NUMERATOR = 1; - /** - * numerator / denominator = time slice size [s] - */ - private static final int RMS_WINDOW_TIME_DENOMINATOR = 20; - /** - * Table entries per dB - */ - static final float STEPS_per_dB = 100.f; - /** - * Table entries for 0...MAX_dB (normal max. values are 70...80 dB) - */ - static final float MAX_dB = 120.f; - - public static final int GAIN_NOT_ENOUGH_SAMPLES = -24601; - public static final int GAIN_ANALYSIS_ERROR = 0; - public static final int GAIN_ANALYSIS_OK = 1; - public static final int INIT_GAIN_ANALYSIS_ERROR = 0; - public static final int INIT_GAIN_ANALYSIS_OK = 1; - - static final int MAX_ORDER = YULE_ORDER; - /** - * max. Samples per Time slice - */ - static final int MAX_SAMPLES_PER_WINDOW = ((MAX_SAMP_FREQ * RMS_WINDOW_TIME_NUMERATOR) - / RMS_WINDOW_TIME_DENOMINATOR + 1); - - private static final float ABYule[][] = { - { 0.03857599435200f, -3.84664617118067f, -0.02160367184185f, - 7.81501653005538f, -0.00123395316851f, -11.34170355132042f, - -0.00009291677959f, 13.05504219327545f, -0.01655260341619f, - -12.28759895145294f, 0.02161526843274f, 9.48293806319790f, - -0.02074045215285f, -5.87257861775999f, 0.00594298065125f, - 2.75465861874613f, 0.00306428023191f, -0.86984376593551f, - 0.00012025322027f, 0.13919314567432f, 0.00288463683916f }, - { 0.05418656406430f, -3.47845948550071f, -0.02911007808948f, - 6.36317777566148f, -0.00848709379851f, -8.54751527471874f, - -0.00851165645469f, 9.47693607801280f, -0.00834990904936f, - -8.81498681370155f, 0.02245293253339f, 6.85401540936998f, - -0.02596338512915f, -4.39470996079559f, 0.01624864962975f, - 2.19611684890774f, -0.00240879051584f, -0.75104302451432f, - 0.00674613682247f, 0.13149317958808f, -0.00187763777362f }, - { 0.15457299681924f, -2.37898834973084f, -0.09331049056315f, - 2.84868151156327f, -0.06247880153653f, -2.64577170229825f, - 0.02163541888798f, 2.23697657451713f, -0.05588393329856f, - -1.67148153367602f, 0.04781476674921f, 1.00595954808547f, - 0.00222312597743f, -0.45953458054983f, 0.03174092540049f, - 0.16378164858596f, -0.01390589421898f, -0.05032077717131f, - 0.00651420667831f, 0.02347897407020f, -0.00881362733839f }, - { 0.30296907319327f, -1.61273165137247f, -0.22613988682123f, - 1.07977492259970f, -0.08587323730772f, -0.25656257754070f, - 0.03282930172664f, -0.16276719120440f, -0.00915702933434f, - -0.22638893773906f, -0.02364141202522f, 0.39120800788284f, - -0.00584456039913f, -0.22138138954925f, 0.06276101321749f, - 0.04500235387352f, -0.00000828086748f, 0.02005851806501f, - 0.00205861885564f, 0.00302439095741f, -0.02950134983287f }, - { 0.33642304856132f, -1.49858979367799f, -0.25572241425570f, - 0.87350271418188f, -0.11828570177555f, 0.12205022308084f, - 0.11921148675203f, -0.80774944671438f, -0.07834489609479f, - 0.47854794562326f, -0.00469977914380f, -0.12453458140019f, - -0.00589500224440f, -0.04067510197014f, 0.05724228140351f, - 0.08333755284107f, 0.00832043980773f, -0.04237348025746f, - -0.01635381384540f, 0.02977207319925f, -0.01760176568150f }, - { 0.44915256608450f, -0.62820619233671f, -0.14351757464547f, - 0.29661783706366f, -0.22784394429749f, -0.37256372942400f, - -0.01419140100551f, 0.00213767857124f, 0.04078262797139f, - -0.42029820170918f, -0.12398163381748f, 0.22199650564824f, - 0.04097565135648f, 0.00613424350682f, 0.10478503600251f, - 0.06747620744683f, -0.01863887810927f, 0.05784820375801f, - -0.03193428438915f, 0.03222754072173f, 0.00541907748707f }, - { 0.56619470757641f, -1.04800335126349f, -0.75464456939302f, - 0.29156311971249f, 0.16242137742230f, -0.26806001042947f, - 0.16744243493672f, 0.00819999645858f, -0.18901604199609f, - 0.45054734505008f, 0.30931782841830f, -0.33032403314006f, - -0.27562961986224f, 0.06739368333110f, 0.00647310677246f, - -0.04784254229033f, 0.08647503780351f, 0.01639907836189f, - -0.03788984554840f, 0.01807364323573f, -0.00588215443421f }, - { 0.58100494960553f, -0.51035327095184f, -0.53174909058578f, - -0.31863563325245f, -0.14289799034253f, -0.20256413484477f, - 0.17520704835522f, 0.14728154134330f, 0.02377945217615f, - 0.38952639978999f, 0.15558449135573f, -0.23313271880868f, - -0.25344790059353f, -0.05246019024463f, 0.01628462406333f, - -0.02505961724053f, 0.06920467763959f, 0.02442357316099f, - -0.03721611395801f, 0.01818801111503f, -0.00749618797172f }, - { 0.53648789255105f, -0.25049871956020f, -0.42163034350696f, - -0.43193942311114f, -0.00275953611929f, -0.03424681017675f, - 0.04267842219415f, -0.04678328784242f, -0.10214864179676f, - 0.26408300200955f, 0.14590772289388f, 0.15113130533216f, - -0.02459864859345f, -0.17556493366449f, -0.11202315195388f, - -0.18823009262115f, -0.04060034127000f, 0.05477720428674f, - 0.04788665548180f, 0.04704409688120f, -0.02217936801134f } }; - - private static final float ABButter[][] = { - { 0.98621192462708f, -1.97223372919527f, -1.97242384925416f, - 0.97261396931306f, 0.98621192462708f }, - { 0.98500175787242f, -1.96977855582618f, -1.97000351574484f, - 0.97022847566350f, 0.98500175787242f }, - { 0.97938932735214f, -1.95835380975398f, -1.95877865470428f, - 0.95920349965459f, 0.97938932735214f }, - { 0.97531843204928f, -1.95002759149878f, -1.95063686409857f, - 0.95124613669835f, 0.97531843204928f }, - { 0.97316523498161f, -1.94561023566527f, -1.94633046996323f, - 0.94705070426118f, 0.97316523498161f }, - { 0.96454515552826f, -1.92783286977036f, -1.92909031105652f, - 0.93034775234268f, 0.96454515552826f }, - { 0.96009142950541f, -1.91858953033784f, -1.92018285901082f, - 0.92177618768381f, 0.96009142950541f }, - { 0.95856916599601f, -1.91542108074780f, -1.91713833199203f, - 0.91885558323625f, 0.95856916599601f }, - { 0.94597685600279f, -1.88903307939452f, -1.89195371200558f, - 0.89487434461664f, 0.94597685600279f } }; - - - /** - * When calling this procedure, make sure that ip[-order] and op[-order] - * point to real data - */ - private void filterYule(final float[] input, int inputPos, float[] output, - int outputPos, int nSamples, final float[] kernel) { - - while ((nSamples--) != 0) { - /* 1e-10 is a hack to avoid slowdown because of denormals */ - output[outputPos] = 1e-10f + input[inputPos + 0] * kernel[0] - - output[outputPos - 1] * kernel[1] + input[inputPos - 1] - * kernel[2] - output[outputPos - 2] * kernel[3] - + input[inputPos - 2] * kernel[4] - output[outputPos - 3] - * kernel[5] + input[inputPos - 3] * kernel[6] - - output[outputPos - 4] * kernel[7] + input[inputPos - 4] - * kernel[8] - output[outputPos - 5] * kernel[9] - + input[inputPos - 5] * kernel[10] - output[outputPos - 6] - * kernel[11] + input[inputPos - 6] * kernel[12] - - output[outputPos - 7] * kernel[13] + input[inputPos - 7] - * kernel[14] - output[outputPos - 8] * kernel[15] - + input[inputPos - 8] * kernel[16] - output[outputPos - 9] - * kernel[17] + input[inputPos - 9] * kernel[18] - - output[outputPos - 10] * kernel[19] - + input[inputPos - 10] * kernel[20]; - ++outputPos; - ++inputPos; - } - } - - private void filterButter(final float[] input, int inputPos, - float[] output, int outputPos, int nSamples, final float[] kernel) { - - while ((nSamples--) != 0) { - output[outputPos] = input[inputPos + 0] * kernel[0] - - output[outputPos - 1] * kernel[1] + input[inputPos - 1] - * kernel[2] - output[outputPos - 2] * kernel[3] - + input[inputPos - 2] * kernel[4]; - ++outputPos; - ++inputPos; - } - } - - /** - * @return INIT_GAIN_ANALYSIS_OK if successful, INIT_GAIN_ANALYSIS_ERROR if - * not - */ - private int ResetSampleFrequency(final ReplayGain rgData, - final long samplefreq) { - /* zero out initial values */ - for (int i = 0; i < MAX_ORDER; i++) - rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.f; - - switch ((int) (samplefreq)) { - case 48000: - rgData.freqindex = 0; - break; - case 44100: - rgData.freqindex = 1; - break; - case 32000: - rgData.freqindex = 2; - break; - case 24000: - rgData.freqindex = 3; - break; - case 22050: - rgData.freqindex = 4; - break; - case 16000: - rgData.freqindex = 5; - break; - case 12000: - rgData.freqindex = 6; - break; - case 11025: - rgData.freqindex = 7; - break; - case 8000: - rgData.freqindex = 8; - break; - default: - return INIT_GAIN_ANALYSIS_ERROR; - } - - rgData.sampleWindow = (int) ((samplefreq * RMS_WINDOW_TIME_NUMERATOR - + RMS_WINDOW_TIME_DENOMINATOR - 1) / RMS_WINDOW_TIME_DENOMINATOR); - - rgData.lsum = 0.; - rgData.rsum = 0.; - rgData.totsamp = 0; - - Arrays.fill(rgData.A, 0); - - return INIT_GAIN_ANALYSIS_OK; - } - - public final int InitGainAnalysis(final ReplayGain rgData, - final long samplefreq) { - if (ResetSampleFrequency(rgData, samplefreq) != INIT_GAIN_ANALYSIS_OK) { - return INIT_GAIN_ANALYSIS_ERROR; - } - - rgData.linpre = MAX_ORDER; - rgData.rinpre = MAX_ORDER; - rgData.lstep = MAX_ORDER; - rgData.rstep = MAX_ORDER; - rgData.lout = MAX_ORDER; - rgData.rout = MAX_ORDER; - - Arrays.fill(rgData.B, 0); - - return INIT_GAIN_ANALYSIS_OK; - } - - /** - * square - */ - private double fsqr(final double d) { - return d * d; - } - - public final int AnalyzeSamples(final ReplayGain rgData, - final float[] left_samples, final int left_samplesPos, - float[] right_samples, int right_samplesPos, final int num_samples, - final int num_channels) { - int curleft; - float[] curleftBase; - int curright; - float[] currightBase; - int batchsamples; - int cursamples; - int cursamplepos; - - if (num_samples == 0) - return GAIN_ANALYSIS_OK; - - cursamplepos = 0; - batchsamples = num_samples; - - switch (num_channels) { - case 1: - right_samples = left_samples; - right_samplesPos = left_samplesPos; - break; - case 2: - break; - default: - return GAIN_ANALYSIS_ERROR; - } - - if (num_samples < MAX_ORDER) { - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER, num_samples); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER, num_samples); - } else { - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER, MAX_ORDER); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER, MAX_ORDER); - } - - while (batchsamples > 0) { - cursamples = batchsamples > rgData.sampleWindow - rgData.totsamp ? rgData.sampleWindow - - rgData.totsamp - : batchsamples; - if (cursamplepos < MAX_ORDER) { - curleft = rgData.linpre + cursamplepos; - curleftBase = rgData.linprebuf; - curright = rgData.rinpre + cursamplepos; - currightBase = rgData.rinprebuf; - if (cursamples > MAX_ORDER - cursamplepos) - cursamples = MAX_ORDER - cursamplepos; - } else { - curleft = left_samplesPos + cursamplepos; - curleftBase = left_samples; - curright = right_samplesPos + cursamplepos; - currightBase = right_samples; - } - - filterYule(curleftBase, curleft, rgData.lstepbuf, rgData.lstep - + rgData.totsamp, cursamples, ABYule[rgData.freqindex]); - filterYule(currightBase, curright, rgData.rstepbuf, rgData.rstep - + rgData.totsamp, cursamples, ABYule[rgData.freqindex]); - - filterButter(rgData.lstepbuf, rgData.lstep + rgData.totsamp, - rgData.loutbuf, rgData.lout + rgData.totsamp, cursamples, - ABButter[rgData.freqindex]); - filterButter(rgData.rstepbuf, rgData.rstep + rgData.totsamp, - rgData.routbuf, rgData.rout + rgData.totsamp, cursamples, - ABButter[rgData.freqindex]); - - curleft = rgData.lout + rgData.totsamp; - /* Get the squared values */ - curleftBase = rgData.loutbuf; - curright = rgData.rout + rgData.totsamp; - currightBase = rgData.routbuf; - - int i = cursamples % 8; - while ((i--) != 0) { - rgData.lsum += fsqr(curleftBase[curleft++]); - rgData.rsum += fsqr(currightBase[curright++]); - } - i = cursamples / 8; - while ((i--) != 0) { - rgData.lsum += fsqr(curleftBase[curleft + 0]) - + fsqr(curleftBase[curleft + 1]) - + fsqr(curleftBase[curleft + 2]) - + fsqr(curleftBase[curleft + 3]) - + fsqr(curleftBase[curleft + 4]) - + fsqr(curleftBase[curleft + 5]) - + fsqr(curleftBase[curleft + 6]) - + fsqr(curleftBase[curleft + 7]); - curleft += 8; - rgData.rsum += fsqr(currightBase[curright + 0]) - + fsqr(currightBase[curright + 1]) - + fsqr(currightBase[curright + 2]) - + fsqr(currightBase[curright + 3]) - + fsqr(currightBase[curright + 4]) - + fsqr(currightBase[curright + 5]) - + fsqr(currightBase[curright + 6]) - + fsqr(currightBase[curright + 7]); - curright += 8; - } - - batchsamples -= cursamples; - cursamplepos += cursamples; - rgData.totsamp += cursamples; - if (rgData.totsamp == rgData.sampleWindow) { - /* Get the Root Mean Square (RMS) for this set of samples */ - final double val = STEPS_per_dB - * 10. - * Math.log10((rgData.lsum + rgData.rsum) - / rgData.totsamp * 0.5 + 1.e-37); - int ival = (val <= 0) ? 0 : (int) val; - if (ival >= rgData.A.length) - ival = rgData.A.length - 1; - rgData.A[ival]++; - rgData.lsum = rgData.rsum = 0.; - - System.arraycopy(rgData.loutbuf, rgData.totsamp, - rgData.loutbuf, 0, MAX_ORDER); - System.arraycopy(rgData.routbuf, rgData.totsamp, - rgData.routbuf, 0, MAX_ORDER); - System.arraycopy(rgData.lstepbuf, rgData.totsamp, - rgData.lstepbuf, 0, MAX_ORDER); - System.arraycopy(rgData.rstepbuf, rgData.totsamp, - rgData.rstepbuf, 0, MAX_ORDER); - rgData.totsamp = 0; - } - if (rgData.totsamp > rgData.sampleWindow) { - /* - * somehow I really screwed up: Error in programming! Contact - * author about totsamp > sampleWindow - */ - return GAIN_ANALYSIS_ERROR; - } - } - if (num_samples < MAX_ORDER) { - System.arraycopy(rgData.linprebuf, num_samples, rgData.linprebuf, - 0, MAX_ORDER - num_samples); - System.arraycopy(rgData.rinprebuf, num_samples, rgData.rinprebuf, - 0, MAX_ORDER - num_samples); - System.arraycopy(left_samples, left_samplesPos, rgData.linprebuf, - MAX_ORDER - num_samples, num_samples); - System.arraycopy(right_samples, right_samplesPos, rgData.rinprebuf, - MAX_ORDER - num_samples, num_samples); - } else { - System.arraycopy(left_samples, left_samplesPos + num_samples - - MAX_ORDER, rgData.linprebuf, 0, MAX_ORDER); - System.arraycopy(right_samples, right_samplesPos + num_samples - - MAX_ORDER, rgData.rinprebuf, 0, MAX_ORDER); - } - - return GAIN_ANALYSIS_OK; - } - - private float analyzeResult(final int[] Array, final int len) { - int i; - - int elems = 0; - for (i = 0; i < len; i++) - elems += Array[i]; - if (elems == 0) - return GAIN_NOT_ENOUGH_SAMPLES; - - int upper = (int) Math.ceil(elems * (1. - RMS_PERCENTILE)); - for (i = len; i-- > 0;) { - if ((upper -= Array[i]) <= 0) - break; - } - - return (float) ((float) PINK_REF - (float) i / (float) STEPS_per_dB); - } - - public final float GetTitleGain(final ReplayGain rgData) { - float retval = analyzeResult(rgData.A, rgData.A.length); - - for (int i = 0; i < rgData.A.length; i++) { - rgData.B[i] += rgData.A[i]; - rgData.A[i] = 0; - } - - for (int i = 0; i < MAX_ORDER; i++) - rgData.linprebuf[i] = rgData.lstepbuf[i] = rgData.loutbuf[i] = rgData.rinprebuf[i] = rgData.rstepbuf[i] = rgData.routbuf[i] = 0.f; - - rgData.totsamp = 0; - rgData.lsum = rgData.rsum = 0.; - return retval; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GenreListHandler.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GenreListHandler.java deleted file mode 100644 index 15facf3c8..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GenreListHandler.java +++ /dev/null @@ -1,5 +0,0 @@ -package mp3; - -public interface GenreListHandler { - void genre_list_handler(int num, String name); -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GetAudio.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GetAudio.java deleted file mode 100644 index 6f40788bf..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GetAudio.java +++ /dev/null @@ -1,1327 +0,0 @@ -/* - * Get Audio routines source file - * - * Copyright (c) 1999 Albert L Faber - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: GetAudio.java,v 1.26 2011/08/27 18:57:12 kenchis Exp $ */ - -package mp3; - -import java.io.BufferedOutputStream; -import java.io.DataOutput; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.ByteOrder; -import java.nio.charset.Charset; -import java.util.Arrays; - -import mpg.MPGLib; - -public class GetAudio { - - Parse parse; - MPGLib mpg; - - public void setModules(Parse parse2, MPGLib mpg2) { - parse = parse2; - mpg = mpg2; - } - - public enum sound_file_format { - sf_unknown, sf_raw, sf_wave, sf_aiff, - /** - * MPEG Layer 1, aka mpg - */ - sf_mp1, - /** - * MPEG Layer 2 - */ - sf_mp2, - /** - * MPEG Layer 3 - */ - sf_mp3, - /** - * MPEG Layer 1,2 or 3; whatever .mp3, .mp2, .mp1 or .mpg contains - */ - sf_mp123, sf_ogg - } - - protected static final class BlockAlign { - int offset; - int blockSize; - } - - protected static final class IFF_AIFF { - short numChannels; - int numSampleFrames; - short sampleSize; - double sampleRate; - int sampleType; - BlockAlign blkAlgn = new BlockAlign(); - } - - private boolean count_samples_carefully; - private int pcmbitwidth; - private boolean pcmswapbytes; - private boolean pcm_is_unsigned_8bit; - private int num_samples_read; - private RandomAccessFile musicin; - private MPGLib.mpstr_tag hip; - - public DataOutput init_outfile(final String outPath) { - /* open the output file */ - DataOutput outf; - try { - new File(outPath).delete(); - outf = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(outPath), 1<<20)); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } - return outf; - } - - public final void init_infile(final LameGlobalFlags gfp, - final String inPath, final Enc enc) { - /* open the input file */ - count_samples_carefully = false; - num_samples_read = 0; - pcmbitwidth = parse.in_bitwidth; - pcmswapbytes = parse.swapbytes; - pcm_is_unsigned_8bit = !parse.in_signed; - musicin = OpenSndFile(gfp, inPath, enc); - } - - public final void close_infile() { - closeSndFile(parse.input_format, musicin); - } - - /** - * reads a frame of audio data from a file to the buffer, aligns the data - * for future processing, and separates the left and right channels - */ - public final int get_audio(final LameGlobalFlags gfp, int buffer[][]) { - return get_audio_common(gfp, buffer, null); - } - - /** - * behave as the original get_audio function, with a limited 16 bit per - * sample output - */ - public final int get_audio16(final LameGlobalFlags gfp, - final short buffer[][]) { - return (get_audio_common(gfp, null, buffer)); - } - - /** - * central functionality of get_audio* note: either buffer or buffer16 must - * be allocated upon call - * - * @param gfp - * global flags - * @param buffer - * buffer output to the int buffer or 16-bit buffer - * @param buffer16 - * 16-bit output (if buffer == NULL) - * @return samples read - */ - private int get_audio_common(final LameGlobalFlags gfp, - final int buffer[][], final short buffer16[][]) { - int num_channels = gfp.num_channels; - int insamp[] = new int[2 * 1152]; - short buf_tmp16[][] = new short[2][1152]; - int samples_read; - int framesize; - int samples_to_read; - int remaining, tmp_num_samples; - - /* - * NOTE: LAME can now handle arbritray size input data packets, so there - * is no reason to read the input data in chuncks of size "framesize". - * EXCEPT: the LAME graphical frame analyzer will get out of sync if we - * read more than framesize worth of data. - */ - - samples_to_read = framesize = gfp.framesize; - assert (framesize <= 1152); - - /* get num_samples */ - tmp_num_samples = gfp.num_samples; - - /* - * if this flag has been set, then we are carefull to read exactly - * num_samples and no more. This is useful for .wav and .aiff files - * which have id3 or other tags at the end. Note that if you are using - * LIBSNDFILE, this is not necessary - */ - if (count_samples_carefully) { - remaining = tmp_num_samples - - Math.min(tmp_num_samples, num_samples_read); - if (remaining < framesize && 0 != tmp_num_samples) - /* - * in case the input is a FIFO (at least it's reproducible with - * a FIFO) tmp_num_samples may be 0 and therefore remaining - * would be 0, but we need to read some samples, so don't change - * samples_to_read to the wrong value in this case - */ - samples_to_read = remaining; - } - - if (is_mpeg_file_format(parse.input_format)) { - if (buffer != null) - samples_read = read_samples_mp3(gfp, musicin, buf_tmp16); - else - samples_read = read_samples_mp3(gfp, musicin, buffer16); - if (samples_read < 0) { - return samples_read; - } - } else { /* convert from int; output to 16-bit buffer */ - samples_read = read_samples_pcm(musicin, insamp, num_channels - * samples_to_read); - if (samples_read < 0) { - return samples_read; - } - int p = samples_read; - samples_read /= num_channels; - if (buffer != null) { /* output to int buffer */ - if (num_channels == 2) { - for (int i = samples_read; --i >= 0;) { - buffer[1][i] = insamp[--p]; - buffer[0][i] = insamp[--p]; - } - } else if (num_channels == 1) { - Arrays.fill(buffer[1], 0, samples_read, 0); - for (int i = samples_read; --i >= 0;) { - buffer[0][i] = insamp[--p]; - } - } else - assert (false); - } else { /* convert from int; output to 16-bit buffer */ - if (num_channels == 2) { - for (int i = samples_read; --i >= 0;) { - buffer16[1][i] = (short) ((insamp[--p] >> 16) & 0xffff); - buffer16[0][i] = (short) ((insamp[--p] >> 16) & 0xffff); - } - } else if (num_channels == 1) { - Arrays.fill(buffer16[1], 0, samples_read, (short) 0); - for (int i = samples_read; --i >= 0;) { - buffer16[0][i] = (short) ((insamp[--p] >> 16) & 0xffff); - } - } else - assert (false); - } - } - - /* LAME mp3 output 16bit - convert to int, if necessary */ - if (is_mpeg_file_format(parse.input_format)) { - if (buffer != null) { - for (int i = samples_read; --i >= 0;) - buffer[0][i] = (buf_tmp16[0][i] & 0xffff) << 16; - if (num_channels == 2) { - for (int i = samples_read; --i >= 0;) - buffer[1][i] = (buf_tmp16[1][i] & 0xffff) << 16; - } else if (num_channels == 1) { - Arrays.fill(buffer[1], 0, samples_read, 0); - } else - assert (false); - } - } - - /* - * if num_samples = MAX_U_32_NUM, then it is considered infinitely long. - * Don't count the samples - */ - if (tmp_num_samples != Integer.MAX_VALUE) - num_samples_read += samples_read; - - return samples_read; - } - - private static final String type_name = "MP3 file"; - - int read_samples_mp3(final LameGlobalFlags gfp, RandomAccessFile musicin, - short mpg123pcm[][]) { - int out; - - out = lame_decode_fromfile(musicin, mpg123pcm[0], mpg123pcm[1], - parse.mp3input_data); - /* - * out < 0: error, probably EOF out = 0: not possible with - * lame_decode_fromfile() ??? out > 0: number of output samples - */ - if (out < 0) { - Arrays.fill(mpg123pcm[0], (short) 0); - Arrays.fill(mpg123pcm[1], (short) 0); - return 0; - } - - if (gfp.num_channels != parse.mp3input_data.stereo) { - if (parse.silent < 10) { - System.err - .printf("Error: number of channels has changed in %s - not supported\n", - type_name); - } - out = -1; - } - if (gfp.in_samplerate != parse.mp3input_data.samplerate) { - if (parse.silent < 10) { - System.err - .printf("Error: sample frequency has changed in %s - not supported\n", - type_name); - } - out = -1; - } - return out; - } - - public final int WriteWaveHeader(final DataOutput fp, - final int pcmbytes, final int freq, final int channels, - final int bits) { - try { - int bytes = (bits + 7) / 8; - - /* quick and dirty, but documented */ - fp.writeBytes("RIFF"); /* label */ - write32BitsLowHigh(fp, pcmbytes + 44 - 8); - /* length in bytes without header */ - fp.writeBytes("WAVEfmt "); - /* 2 labels */ - write32BitsLowHigh(fp, 2 + 2 + 4 + 4 + 2 + 2); - /* length of PCM format declaration area */ - write16BitsLowHigh(fp, 1); - /* is PCM? */ - write16BitsLowHigh(fp, channels); - /* number of channels */ - write32BitsLowHigh(fp, freq); - /* sample frequency in [Hz] */ - write32BitsLowHigh(fp, freq * channels * bytes); - /* bytes per second */ - write16BitsLowHigh(fp, channels * bytes); - /* bytes per sample time */ - write16BitsLowHigh(fp, bits); - /* bits per sample */ - fp.writeBytes("data"); - /* label */ - write32BitsLowHigh(fp, pcmbytes); - /* length in bytes of raw PCM data */ - } catch (IOException e) { - return -1; - } - return 0; - } - - /** - * read and unpack signed low-to-high byte or unsigned single byte input. - * (used for read_samples function) Output integers are stored in the native - * byte order (little or big endian). -jd - * - * @param swap_order - * set for high-to-low byte order input stream - * @param sample_buffer - * (must be allocated up to samples_to_read upon call) - * @return number of samples read - */ - private int unpack_read_samples(final int samples_to_read, - final int bytes_per_sample, final boolean swap_order, - final int[] sample_buffer, final RandomAccessFile pcm_in) - throws IOException { - byte[] bytes = new byte[bytes_per_sample * samples_to_read]; - pcm_in.readFully(bytes); - int samples_read = samples_to_read; - - int op = samples_read; - if (!swap_order) { - if (bytes_per_sample == 1) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) << 24; - if (bytes_per_sample == 2) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) << 16 - | (bytes[i + 1] & 0xff) << 24; - if (bytes_per_sample == 3) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) << 8 - | (bytes[i + 1] & 0xff) << 16 - | (bytes[i + 2] & 0xff) << 24; - if (bytes_per_sample == 4) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) - | (bytes[i + 1] & 0xff) << 8 - | (bytes[i + 2] & 0xff) << 16 - | (bytes[i + 3] & 0xff) << 24; - } else { - if (bytes_per_sample == 1) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = ((bytes[i] ^ 0x80) & 0xff) << 24 - | 0x7f << 16; /* convert from unsigned */ - if (bytes_per_sample == 2) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) << 24 - | (bytes[i + 1] & 0xff) << 16; - if (bytes_per_sample == 3) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) << 24 - | (bytes[i + 1] & 0xff) << 16 - | (bytes[i + 2] & 0xff) << 8; - if (bytes_per_sample == 4) - for (int i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >= 0;) - sample_buffer[--op] = (bytes[i] & 0xff) << 24 - | (bytes[i + 1] & 0xff) << 16 - | (bytes[i + 2] & 0xff) << 8 - | (bytes[i + 3] & 0xff); - } - return (samples_read); - } - - /** - * reads the PCM samples from a file to the buffer - * - * SEMANTICS: Reads #samples_read# number of shorts from #musicin# - * filepointer into #sample_buffer[]#. Returns the number of samples read. - */ - private int read_samples_pcm(final RandomAccessFile musicin, - final int sample_buffer[], final int samples_to_read) { - int samples_read = 0; - boolean swap_byte_order; - /* byte order of input stream */ - - try { - switch (pcmbitwidth) { - case 32: - case 24: - case 16: - if (!parse.in_signed) { - throw new RuntimeException("Unsigned input only supported with bitwidth 8"); - } - { - swap_byte_order = (parse.in_endian != ByteOrder.LITTLE_ENDIAN); - if (pcmswapbytes) { - swap_byte_order = !swap_byte_order; - } - samples_read = unpack_read_samples(samples_to_read, - pcmbitwidth / 8, swap_byte_order, sample_buffer, - musicin); - - } - break; - - case 8: { - samples_read = unpack_read_samples(samples_to_read, 1, - pcm_is_unsigned_8bit, sample_buffer, musicin); - } - break; - - default: { - throw new RuntimeException("Only 8, 16, 24 and 32 bit input files supported"); - } - } - } catch (IOException e) { - throw new RuntimeException("Error reading input file", e); - } - - return samples_read; - } - - /* AIFF Definitions */ - - /** - * "FORM" - */ - private static final int IFF_ID_FORM = 0x464f524d; - /** - * "AIFF" - */ - private static final int IFF_ID_AIFF = 0x41494646; - /** - * "AIFC" - */ - private static final int IFF_ID_AIFC = 0x41494643; - /** - * "COMM" - */ - private static final int IFF_ID_COMM = 0x434f4d4d; - /** - * "SSND" - */ - private static final int IFF_ID_SSND = 0x53534e44; - - /** - * "NONE" AIFF-C data format - */ - private static final int IFF_ID_NONE = 0x4e4f4e45; - /** - * "twos" AIFF-C data format - */ - private static final int IFF_ID_2CBE = 0x74776f73; - /** - * "sowt" AIFF-C data format - */ - private static final int IFF_ID_2CLE = 0x736f7774; - - /** - * "RIFF" - */ - private static final int WAV_ID_RIFF = 0x52494646; - /** - * "WAVE" - */ - private static final int WAV_ID_WAVE = 0x57415645; - /** - * "fmt " - */ - private static final int WAV_ID_FMT = 0x666d7420; - /** - * "data" - */ - private static final int WAV_ID_DATA = 0x64617461; - - private static final short WAVE_FORMAT_PCM = 0x0001; - private static final short WAVE_FORMAT_EXTENSIBLE = (short) 0xFFFE; - - /** - * Read Microsoft Wave headers - * - * By the time we get here the first 32-bits of the file have already been - * read, and we're pretty sure that we're looking at a WAV file. - */ - private int parse_wave_header(final LameGlobalFlags gfp, - final RandomAccessFile sf) { - int format_tag = 0; - int channels = 0; - int bits_per_sample = 0; - int samples_per_sec = 0; - - boolean is_wav = false; - int data_length = 0, subSize = 0; - int loop_sanity = 0; - - /* file_length = */Read32BitsHighLow(sf); - if (Read32BitsHighLow(sf) != WAV_ID_WAVE) - return -1; - - for (loop_sanity = 0; loop_sanity < 20; ++loop_sanity) { - int type = Read32BitsHighLow(sf); - - if (type == WAV_ID_FMT) { - subSize = Read32BitsLowHigh(sf); - if (subSize < 16) { - return -1; - } - - format_tag = Read16BitsLowHigh(sf); - subSize -= 2; - channels = Read16BitsLowHigh(sf); - subSize -= 2; - samples_per_sec = Read32BitsLowHigh(sf); - subSize -= 4; - /* avg_bytes_per_sec = */Read32BitsLowHigh(sf); - subSize -= 4; - /* block_align = */Read16BitsLowHigh(sf); - subSize -= 2; - bits_per_sample = Read16BitsLowHigh(sf); - subSize -= 2; - - /* WAVE_FORMAT_EXTENSIBLE support */ - if ((subSize > 9) && (format_tag == WAVE_FORMAT_EXTENSIBLE)) { - Read16BitsLowHigh(sf); /* cbSize */ - Read16BitsLowHigh(sf); /* ValidBitsPerSample */ - Read32BitsLowHigh(sf); /* ChannelMask */ - /* SubType coincident with format_tag for PCM int or float */ - format_tag = Read16BitsLowHigh(sf); - subSize -= 10; - } - - if (subSize > 0) { - try { - sf.skipBytes(subSize); - } catch (IOException e) { - return -1; - } - } - - } else if (type == WAV_ID_DATA) { - subSize = Read32BitsLowHigh(sf); - data_length = subSize; - is_wav = true; - /* We've found the audio data. Read no further! */ - break; - - } else { - subSize = Read32BitsLowHigh(sf); - try { - sf.skipBytes(subSize); - } catch (IOException e) { - return -1; - } - } - } - - if (is_wav) { - if (format_tag != WAVE_FORMAT_PCM) { - if (parse.silent < 10) { - System.err.printf("Unsupported data format: 0x%04X\n", - format_tag); - } - /* oh no! non-supported format */ - return 0; - } - - /* make sure the header is sane */ - if (-1 == (gfp.num_channels = channels)) { - if (parse.silent < 10) { - System.err.printf("Unsupported number of channels: %d\n", - channels); - } - return 0; - } - gfp.in_samplerate = samples_per_sec; - pcmbitwidth = bits_per_sample; - pcm_is_unsigned_8bit = true; - gfp.num_samples = data_length - / (channels * ((bits_per_sample + 7) / 8)); - return 1; - } - return -1; - } - - /** - * Checks AIFF header information to make sure it is valid. returns 0 on - * success, 1 on errors - */ - private int aiff_check2(final IFF_AIFF pcm_aiff_data) { - if (pcm_aiff_data.sampleType != IFF_ID_SSND) { - if (parse.silent < 10) { - System.err.printf("ERROR: input sound data is not PCM\n"); - } - return 1; - } - switch (pcm_aiff_data.sampleSize) { - case 32: - case 24: - case 16: - case 8: - break; - default: - if (parse.silent < 10) { - System.err - .printf("ERROR: input sound data is not 8, 16, 24 or 32 bits\n"); - } - return 1; - } - if (pcm_aiff_data.numChannels != 1 && pcm_aiff_data.numChannels != 2) { - if (parse.silent < 10) { - System.err - .printf("ERROR: input sound data is not mono or stereo\n"); - } - return 1; - } - if (pcm_aiff_data.blkAlgn.blockSize != 0) { - if (parse.silent < 10) { - System.err - .printf("ERROR: block size of input sound data is not 0 bytes\n"); - } - return 1; - } - return 0; - } - - private long make_even_number_of_bytes_in_length(final int x) { - if ((x & 0x01) != 0) { - return x + 1; - } - return x; - } - - /** - * Read Audio Interchange File Format (AIFF) headers. - * - * By the time we get here the first 32 bits of the file have already been - * read, and we're pretty sure that we're looking at an AIFF file. - */ - private int parse_aiff_header(final LameGlobalFlags gfp, - final RandomAccessFile sf) { - int subSize = 0, dataType = IFF_ID_NONE; - IFF_AIFF aiff_info = new IFF_AIFF(); - int seen_comm_chunk = 0, seen_ssnd_chunk = 0; - long pcm_data_pos = -1; - - int chunkSize = Read32BitsHighLow(sf); - - int typeID = Read32BitsHighLow(sf); - if ((typeID != IFF_ID_AIFF) && (typeID != IFF_ID_AIFC)) - return -1; - - while (chunkSize > 0) { - long ckSize; - int type = Read32BitsHighLow(sf); - chunkSize -= 4; - - /* don't use a switch here to make it easier to use 'break' for SSND */ - if (type == IFF_ID_COMM) { - seen_comm_chunk = seen_ssnd_chunk + 1; - subSize = Read32BitsHighLow(sf); - ckSize = make_even_number_of_bytes_in_length(subSize); - chunkSize -= ckSize; - - aiff_info.numChannels = (short) Read16BitsHighLow(sf); - ckSize -= 2; - aiff_info.numSampleFrames = Read32BitsHighLow(sf); - ckSize -= 4; - aiff_info.sampleSize = (short) Read16BitsHighLow(sf); - ckSize -= 2; - try { - aiff_info.sampleRate = readIeeeExtendedHighLow(sf); - } catch (IOException e1) { - return -1; - } - ckSize -= 10; - if (typeID == IFF_ID_AIFC) { - dataType = Read32BitsHighLow(sf); - ckSize -= 4; - } - try { - sf.skipBytes((int) ckSize); - } catch (IOException e) { - return -1; - } - } else if (type == IFF_ID_SSND) { - seen_ssnd_chunk = 1; - subSize = Read32BitsHighLow(sf); - ckSize = make_even_number_of_bytes_in_length(subSize); - chunkSize -= ckSize; - - aiff_info.blkAlgn.offset = Read32BitsHighLow(sf); - ckSize -= 4; - aiff_info.blkAlgn.blockSize = Read32BitsHighLow(sf); - ckSize -= 4; - - aiff_info.sampleType = IFF_ID_SSND; - - if (seen_comm_chunk > 0) { - try { - sf.skipBytes(aiff_info.blkAlgn.offset); - } catch (IOException e) { - return -1; - } - /* We've found the audio data. Read no further! */ - break; - } - try { - pcm_data_pos = sf.getFilePointer(); - } catch (IOException e) { - return -1; - } - if (pcm_data_pos >= 0) { - pcm_data_pos += aiff_info.blkAlgn.offset; - } - try { - sf.skipBytes((int) ckSize); - } catch (IOException e) { - return -1; - } - } else { - subSize = Read32BitsHighLow(sf); - ckSize = make_even_number_of_bytes_in_length(subSize); - chunkSize -= ckSize; - - try { - sf.skipBytes((int) ckSize); - } catch (IOException e) { - return -1; - } - } - } - if (dataType == IFF_ID_2CLE) { - pcmswapbytes = parse.swapbytes; - } else if (dataType == IFF_ID_2CBE) { - pcmswapbytes = !parse.swapbytes; - } else if (dataType == IFF_ID_NONE) { - pcmswapbytes = !parse.swapbytes; - } else { - return -1; - } - - if (seen_comm_chunk != 0 - && (seen_ssnd_chunk > 0 || aiff_info.numSampleFrames == 0)) { - /* make sure the header is sane */ - if (0 != aiff_check2(aiff_info)) - return 0; - if (-1 == (gfp.num_channels = aiff_info.numChannels)) { - if (parse.silent < 10) { - System.err.printf("Unsupported number of channels: %u\n", - aiff_info.numChannels); - } - return 0; - } - gfp.in_samplerate = (int) aiff_info.sampleRate; - gfp.num_samples = aiff_info.numSampleFrames; - pcmbitwidth = aiff_info.sampleSize; - pcm_is_unsigned_8bit = false; - - if (pcm_data_pos >= 0) { - try { - sf.seek(pcm_data_pos); - } catch (IOException e) { - if (parse.silent < 10) { - System.err - .printf("Can't rewind stream to audio data position\n"); - } - return 0; - } - } - - return 1; - } - return -1; - } - - /** - * Read the header from a bytestream. Try to determine whether it's a WAV - * file or AIFF without rewinding, since rewind doesn't work on pipes and - * there's a good chance we're reading from stdin (otherwise we'd probably - * be using libsndfile). - * - * When this function returns, the file offset will be positioned at the - * beginning of the sound data. - */ - private sound_file_format parse_file_header(final LameGlobalFlags gfp, - final RandomAccessFile sf) { - - int type = Read32BitsHighLow(sf); - count_samples_carefully = false; - pcm_is_unsigned_8bit = !parse.in_signed; - /* - * input_format = sf_raw; commented out, because it is better to fail - * here as to encode some hundreds of input files not supported by LAME - * If you know you have RAW PCM data, use the -r switch - */ - - if (type == WAV_ID_RIFF) { - /* It's probably a WAV file */ - int ret = parse_wave_header(gfp, sf); - if (ret > 0) { - count_samples_carefully = true; - return sound_file_format.sf_wave; - } - if (ret < 0) { - if (parse.silent < 10) { - System.err - .println("Warning: corrupt or unsupported WAVE format"); - } - } - } else if (type == IFF_ID_FORM) { - /* It's probably an AIFF file */ - int ret = parse_aiff_header(gfp, sf); - if (ret > 0) { - count_samples_carefully = true; - return sound_file_format.sf_aiff; - } - if (ret < 0) { - if (parse.silent < 10) { - System.err - .printf("Warning: corrupt or unsupported AIFF format\n"); - } - } - } else { - if (parse.silent < 10) { - System.err.println("Warning: unsupported audio format\n"); - } - } - return sound_file_format.sf_unknown; - } - - private void closeSndFile(final sound_file_format input, - final RandomAccessFile musicin) { - if (musicin != null) { - try { - musicin.close(); - } catch (IOException e) { - throw new RuntimeException("Could not close sound file", e); - } - } - } - - private RandomAccessFile OpenSndFile(final LameGlobalFlags gfp, - final String inPath, final Enc enc) { - - /* set the defaults from info in case we cannot determine them from file */ - gfp.num_samples = -1; - - try { - musicin = new RandomAccessFile(inPath, "r"); - } catch (FileNotFoundException e) { - throw new RuntimeException(String.format("Could not find \"%s\".", inPath), e); - } - - if (is_mpeg_file_format(parse.input_format)) { - if (-1 == lame_decode_initfile(musicin, parse.mp3input_data, enc)) { - throw new RuntimeException(String.format("Error reading headers in mp3 input file %s.", inPath)); - } - gfp.num_channels = parse.mp3input_data.stereo; - gfp.in_samplerate = parse.mp3input_data.samplerate; - gfp.num_samples = parse.mp3input_data.nsamp; - } else if (parse.input_format == sound_file_format.sf_ogg) { - throw new RuntimeException("sorry, vorbis support in LAME is deprecated."); - } else if (parse.input_format == sound_file_format.sf_raw) { - /* assume raw PCM */ - if (parse.silent < 10) { - System.out.println("Assuming raw pcm input file"); - if (parse.swapbytes) - System.out.printf(" : Forcing byte-swapping\n"); - else - System.out.printf("\n"); - } - pcmswapbytes = parse.swapbytes; - } else { - parse.input_format = parse_file_header(gfp, musicin); - } - if (parse.input_format == sound_file_format.sf_unknown) { - throw new RuntimeException("Unknown sound format!"); - } - - if (gfp.num_samples == -1) { - - double flen = new File(inPath).length(); - /* try to figure out num_samples */ - if (flen >= 0) { - /* try file size, assume 2 bytes per sample */ - if (is_mpeg_file_format(parse.input_format)) { - if (parse.mp3input_data.bitrate > 0) { - double totalseconds = (flen * 8.0 / (1000.0 * parse.mp3input_data.bitrate)); - int tmp_num_samples = (int) (totalseconds * gfp.in_samplerate); - - gfp.num_samples = tmp_num_samples; - parse.mp3input_data.nsamp = tmp_num_samples; - } - } else { - gfp.num_samples = (int) (flen / (2 * gfp.num_channels)); - } - } - } - return musicin; - } - - private static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); - - private boolean check_aid(final byte[] header) { - return new String(header, ISO_8859_1).startsWith("AiD\1"); - } - - private static final char abl2[] = { 0, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, 8, 8, - 8, 8, 8 }; - - /** - * Please check this and don't kill me if there's a bug This is a (nearly?) - * complete header analysis for a MPEG-1/2/2.5 Layer I, II or III data - * stream - */ - private boolean is_syncword_mp123(final byte[] headerptr) { - int p = 0; - - if ((headerptr[p + 0] & 0xFF) != 0xFF) { - /* first 8 bits must be '1' */ - return false; - } - if ((headerptr[p + 1] & 0xE0) != 0xE0) { - /* next 3 bits are also */ - return false; - } - if ((headerptr[p + 1] & 0x18) == 0x08) { - /* no MPEG-1, -2 or -2.5 */ - return false; - } - switch (headerptr[p + 1] & 0x06) { - default: - case 0x00: - /* illegal Layer */ - return false; - - case 0x02: - /* Layer3 */ - if (parse.input_format != sound_file_format.sf_mp3 - && parse.input_format != sound_file_format.sf_mp123) { - return false; - } - parse.input_format = sound_file_format.sf_mp3; - break; - - case 0x04: - /* Layer2 */ - if (parse.input_format != sound_file_format.sf_mp2 - && parse.input_format != sound_file_format.sf_mp123) { - return false; - } - parse.input_format = sound_file_format.sf_mp2; - break; - - case 0x06: - /* Layer1 */ - if (parse.input_format != sound_file_format.sf_mp1 - && parse.input_format != sound_file_format.sf_mp123) { - return false; - } - parse.input_format = sound_file_format.sf_mp1; - break; - } - if ((headerptr[p + 1] & 0x06) == 0x00) { - /* no Layer I, II and III */ - return false; - } - if ((headerptr[p + 2] & 0xF0) == 0xF0) { - /* bad bitrate */ - return false; - } - if ((headerptr[p + 2] & 0x0C) == 0x0C) { - /* no sample frequency with (32,44.1,48)/(1,2,4) */ - return false; - } - if ((headerptr[p + 1] & 0x18) == 0x18 - && (headerptr[p + 1] & 0x06) == 0x04 - && (abl2[(headerptr[p + 2] & 0xff) >> 4] & (1 << ((headerptr[p + 3] & 0xff) >> 6))) != 0) - return false; - if ((headerptr[p + 3] & 3) == 2) { - /* reserved enphasis mode */ - return false; - } - return true; - } - - private int lame_decode_initfile(final RandomAccessFile fd, - final MP3Data mp3data, final Enc enc) { - byte buf[] = new byte[100]; - short pcm_l[] = new short[1152], pcm_r[] = new short[1152]; - boolean freeformat = false; - - if (hip != null) { - mpg.hip_decode_exit(hip); - } - hip = mpg.hip_decode_init(); - - int len = 4; - try { - fd.readFully(buf, 0, len); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - if (buf[0] == 'I' && buf[1] == 'D' && buf[2] == '3') { - if (parse.silent < 10) { - System.out - .println("ID3v2 found. " - + "Be aware that the ID3 tag is currently lost when transcoding."); - } - len = 6; - try { - fd.readFully(buf, 0, len); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - buf[2] &= 127; - buf[3] &= 127; - buf[4] &= 127; - buf[5] &= 127; - len = (((((buf[2] << 7) + buf[3]) << 7) + buf[4]) << 7) + buf[5]; - try { - fd.skipBytes(len); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - len = 4; - try { - fd.readFully(buf, 0, len); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - } - if (check_aid(buf)) { - try { - fd.readFully(buf, 0, 2); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - int aid_header = (buf[0] & 0xff) + 256 * (buf[1] & 0xff); - if (parse.silent < 10) { - System.out.printf("Album ID found. length=%d \n", aid_header); - } - /* skip rest of AID, except for 6 bytes we have already read */ - try { - fd.skipBytes(aid_header - 6); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - - /* read 4 more bytes to set up buffer for MP3 header check */ - try { - fd.readFully(buf, 0, len); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - } - len = 4; - while (!is_syncword_mp123(buf)) { - int i; - for (i = 0; i < len - 1; i++) - buf[i] = buf[i + 1]; - try { - fd.readFully(buf, len - 1, 1); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - } - - if ((buf[2] & 0xf0) == 0) { - if (parse.silent < 10) { - System.out.println("Input file is freeformat."); - } - freeformat = true; - } - /* now parse the current buffer looking for MP3 headers. */ - /* (as of 11/00: mpglib modified so that for the first frame where */ - /* headers are parsed, no data will be decoded. */ - /* However, for freeformat, we need to decode an entire frame, */ - /* so mp3data->bitrate will be 0 until we have decoded the first */ - /* frame. Cannot decode first frame here because we are not */ - /* yet prepared to handle the output. */ - int ret = mpg.hip_decode1_headersB(hip, buf, len, pcm_l, pcm_r, - mp3data, enc); - if (-1 == ret) - return -1; - - /* repeat until we decode a valid mp3 header. */ - while (!mp3data.header_parsed) { - try { - fd.readFully(buf); - } catch (IOException e) { - e.printStackTrace(); - return -1; /* failed */ - } - ret = mpg.hip_decode1_headersB(hip, buf, buf.length, pcm_l, pcm_r, - mp3data, enc); - if (-1 == ret) - return -1; - } - - if (mp3data.bitrate == 0 && !freeformat) { - if (parse.silent < 10) { - System.err.println("fail to sync..."); - } - return lame_decode_initfile(fd, mp3data, enc); - } - - if (mp3data.totalframes > 0) { - /* mpglib found a Xing VBR header and computed nsamp & totalframes */ - } else { - /* - * set as unknown. Later, we will take a guess based on file size - * ant bitrate - */ - mp3data.nsamp = -1; - } - - return 0; - } - - /** - * @return -1 error n number of samples output. either 576 or 1152 depending - * on MP3 file. - */ - private int lame_decode_fromfile(final RandomAccessFile fd, - final short pcm_l[], final short pcm_r[], final MP3Data mp3data) { - int ret = 0; - int len = 0; - byte buf[] = new byte[1024]; - - /* first see if we still have data buffered in the decoder: */ - ret = -1; - ret = mpg.hip_decode1_headers(hip, buf, len, pcm_l, pcm_r, mp3data); - if (ret != 0) - return ret; - - /* read until we get a valid output frame */ - while (true) { - try { - len = fd.read(buf, 0, 1024); - } catch (IOException e) { - e.printStackTrace(); - return -1; - } - if (len <= 0) { - /* we are done reading the file, but check for buffered data */ - ret = mpg.hip_decode1_headers(hip, buf, 0, pcm_l, pcm_r, - mp3data); - if (ret <= 0) { - mpg.hip_decode_exit(hip); - /* release mp3decoder memory */ - hip = null; - return -1; /* done with file */ - } - break; - } - - ret = mpg.hip_decode1_headers(hip, buf, len, pcm_l, pcm_r, mp3data); - if (ret == -1) { - mpg.hip_decode_exit(hip); - /* release mp3decoder memory */ - hip = null; - return -1; - } - if (ret > 0) - break; - } - return ret; - } - - private boolean is_mpeg_file_format( - final sound_file_format input_file_format) { - switch (input_file_format) { - case sf_mp1: - case sf_mp2: - case sf_mp3: - case sf_mp123: - return true; - default: - break; - } - return false; - } - - // Rest of portableio.c: - - private int Read32BitsLowHigh(final RandomAccessFile fp) { - int first = 0xffff & Read16BitsLowHigh(fp); - int second = 0xffff & Read16BitsLowHigh(fp); - - int result = (second << 16) + first; - return (result); - } - - private int Read16BitsLowHigh(final RandomAccessFile fp) { - try { - int first = 0xff & fp.read(); - int second = 0xff & fp.read(); - - int result = (second << 8) + first; - return (result); - } catch (IOException e) { - e.printStackTrace(); - return 0; - } - } - - private int Read16BitsHighLow(final RandomAccessFile fp) { - try { - int high = fp.readUnsignedByte(); - int low = fp.readUnsignedByte(); - - return (high << 8) | low; - } catch (IOException e) { - e.printStackTrace(); - return 0; - } - } - - private int Read32BitsHighLow(final RandomAccessFile fp) { - int first = 0xffff & Read16BitsHighLow(fp); - int second = 0xffff & Read16BitsHighLow(fp); - - int result = (first << 16) + second; - return (result); - } - - private double unsignedToFloat(final double u) { - return ((double) ((long) (u - 2147483647L - 1))) + 2147483648.0; - } - - private double ldexp(final double x, final double exp) { - return x * Math.pow(2, exp); - } - - /** - * Extended precision IEEE floating-point conversion routines - */ - private double convertFromIeeeExtended(final byte[] bytes) { - double f; - long expon = ((bytes[0] & 0x7F) << 8) | (bytes[1] & 0xFF); - long hiMant = ((long) (bytes[2] & 0xFF) << 24) - | ((long) (bytes[3] & 0xFF) << 16) - | ((long) (bytes[4] & 0xFF) << 8) | ((long) (bytes[5] & 0xFF)); - long loMant = ((long) (bytes[6] & 0xFF) << 24) - | ((long) (bytes[7] & 0xFF) << 16) - | ((long) (bytes[8] & 0xFF) << 8) | ((long) (bytes[9] & 0xFF)); - - /* - * This case should also be called if the number is below the smallest - * positive double variable - */ - if (expon == 0 && hiMant == 0 && loMant == 0) { - f = 0; - } else { - /* - * This case should also be called if the number is too large to fit - * into a double variable - */ - - if (expon == 0x7FFF) { /* Infinity or NaN */ - f = Double.POSITIVE_INFINITY; - } else { - expon -= 16383; - - f = ldexp(unsignedToFloat(hiMant), (int) (expon -= 31)); - f += ldexp(unsignedToFloat(loMant), (int) (expon -= 32)); - } - } - - if ((bytes[0] & 0x80) != 0) - return -f; - else - return f; - } - - private double readIeeeExtendedHighLow(final RandomAccessFile fp) - throws IOException { - byte bytes[] = new byte[10]; - - fp.readFully(bytes); - return convertFromIeeeExtended(bytes); - } - - private void write32BitsLowHigh(final DataOutput fp, final int i) - throws IOException { - write16BitsLowHigh(fp, (int) (i & 0xffffL)); - write16BitsLowHigh(fp, (int) ((i >> 16) & 0xffffL)); - } - - public final void write16BitsLowHigh(final DataOutput fp, final int i) - throws IOException { - fp.write(i & 0xff); - fp.write((i >> 8) & 0xff); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GrInfo.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GrInfo.java deleted file mode 100644 index df5654802..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/GrInfo.java +++ /dev/null @@ -1,78 +0,0 @@ -package mp3; - -public final class GrInfo { - float xr[] = new float[576]; - int l3_enc[] = new int[576]; - int scalefac[] = new int[L3Side.SFBMAX]; - float xrpow_max; - - int part2_3_length; - int big_values; - int count1; - int global_gain; - int scalefac_compress; - int block_type; - int mixed_block_flag; - int table_select[] = new int[3]; - int subblock_gain[] = new int[3 + 1]; - int region0_count; - int region1_count; - int preflag; - int scalefac_scale; - int count1table_select; - - int part2_length; - int sfb_lmax; - int sfb_smin; - int psy_lmax; - int sfbmax; - int psymax; - int sfbdivide; - int width[] = new int[L3Side.SFBMAX]; - int window[] = new int[L3Side.SFBMAX]; - int count1bits; - /** - * added for LSF - */ - int[] sfb_partition_table; - int slen[] = new int[4]; - - int max_nonzero_coeff; - - public final void assign(final GrInfo other) { - xr = other.xr.clone(); - l3_enc = other.l3_enc.clone(); - scalefac = other.scalefac.clone(); - xrpow_max = other.xrpow_max; - - part2_3_length = other.part2_3_length; - big_values = other.big_values; - count1 = other.count1; - global_gain = other.global_gain; - scalefac_compress = other.scalefac_compress; - block_type = other.block_type; - mixed_block_flag = other.mixed_block_flag; - table_select = other.table_select.clone(); - subblock_gain = other.subblock_gain.clone(); - region0_count = other.region0_count; - region1_count = other.region1_count; - preflag = other.preflag; - scalefac_scale = other.scalefac_scale; - count1table_select = other.count1table_select; - - part2_length = other.part2_length; - sfb_lmax = other.sfb_lmax; - sfb_smin = other.sfb_smin; - psy_lmax = other.psy_lmax; - sfbmax = other.sfbmax; - psymax = other.psymax; - sfbdivide = other.sfbdivide; - width = other.width.clone(); - window = other.window.clone(); - count1bits = other.count1bits; - - sfb_partition_table = other.sfb_partition_table.clone(); - slen = other.slen.clone(); - max_nonzero_coeff = other.max_nonzero_coeff; - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/HuffCodeTab.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/HuffCodeTab.java deleted file mode 100644 index fda29b575..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/HuffCodeTab.java +++ /dev/null @@ -1,27 +0,0 @@ -package mp3; - -public class HuffCodeTab { - public HuffCodeTab(final int len, final int max, final int[] tab, final int[] hl) { - xlen = len; - linmax = max; - table = tab; - hlen = hl; - } - - /** - * max. x-index+ - */ - final int xlen; - /** - * max number to be stored in linbits - */ - final int linmax; - /** - * pointer to array[xlen][ylen] - */ - final int[] table; - /** - * pointer to array[xlen][ylen] - */ - final int[] hlen; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3Tag.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3Tag.java deleted file mode 100644 index 35469327f..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3Tag.java +++ /dev/null @@ -1,1205 +0,0 @@ -/* - * id3tag.c -- Write ID3 version 1 and 2 tags. - * - * Copyright (C) 2000 Don Melton. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -/* - * HISTORY: This source file is part of LAME (see http://www.mp3dev.org) - * and was originally adapted by Conrad Sanderson <c.sanderson@me.gu.edu.au> - * from mp3info by Ricardo Cerqueira <rmc@rccn.net> to write only ID3 version 1 - * tags. Don Melton <don@blivet.com> COMPLETELY rewrote it to support version - * 2 tags and be more conformant to other standards while remaining flexible. - * - * NOTE: See http://id3.org/ for more information about ID3 tag formats. - */ -package mp3; - -import java.nio.charset.Charset; -import java.util.Arrays; - -public class ID3Tag { - - BitStream bits; - Version ver; - - public final void setModules(BitStream bits, Version ver) { - this.bits = bits; - this.ver = ver; - } - - private static final int CHANGED_FLAG = (1 << 0); - private static final int ADD_V2_FLAG = (1 << 1); - private static final int V1_ONLY_FLAG = (1 << 2); - private static final int V2_ONLY_FLAG = (1 << 3); - private static final int SPACE_V1_FLAG = (1 << 4); - private static final int PAD_V2_FLAG = (1 << 5); - - enum MimeType { - MIMETYPE_NONE, MIMETYPE_JPEG, MIMETYPE_PNG, MIMETYPE_GIF, - }; - - private static final String genre_names[] = { - /* - * NOTE: The spelling of these genre names is identical to those found in - * Winamp and mp3info. - */ - "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", - "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", - "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial", - "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", - "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", - "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", - "Game", "Sound Clip", "Gospel", "Noise", "Alternative Rock", - "Bass", "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", - "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", - "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", - "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", - "Christian Rap", "Pop/Funk", "Jungle", "Native US", "Cabaret", - "New Wave", "Psychedelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", - "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", - "Rock & Roll", "Hard Rock", "Folk", "Folk-Rock", "National Folk", - "Swing", "Fast Fusion", "Bebob", "Latin", "Revival", "Celtic", - "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", - "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", - "Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", - "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", - "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", - "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", - "Rhythmic Soul", "Freestyle", "Duet", "Punk Rock", "Drum Solo", - "A Cappella", "Euro-House", "Dance Hall", "Goa", "Drum & Bass", - "Club-House", "Hardcore", "Terror", "Indie", "BritPop", - "Negerpunk", "Polsk Punk", "Beat", "Christian Gangsta", - "Heavy Metal", "Black Metal", "Crossover", - "Contemporary Christian", "Christian Rock", "Merengue", "Salsa", - "Thrash Metal", "Anime", "JPop", "SynthPop" }; - - private static final int genre_alpha_map[] = { 123, 34, 74, 73, 99, 20, 40, - 26, 145, 90, 116, 41, 135, 85, 96, 138, 89, 0, 107, 132, 65, 88, - 104, 102, 97, 136, 61, 141, 32, 1, 112, 128, 57, 140, 2, 139, 58, - 3, 125, 50, 22, 4, 55, 127, 122, 120, 98, 52, 48, 54, 124, 25, 84, - 80, 115, 81, 119, 5, 30, 36, 59, 126, 38, 49, 91, 6, 129, 79, 137, - 7, 35, 100, 131, 19, 33, 46, 47, 8, 29, 146, 63, 86, 71, 45, 142, - 9, 77, 82, 64, 133, 10, 66, 39, 11, 103, 12, 75, 134, 13, 53, 62, - 109, 117, 23, 108, 92, 67, 93, 43, 121, 15, 68, 14, 16, 76, 87, - 118, 17, 78, 143, 114, 110, 69, 21, 111, 95, 105, 42, 37, 24, 56, - 44, 101, 83, 94, 106, 147, 113, 18, 51, 130, 144, 60, 70, 31, 72, - 27, 28 }; - - private static final int GENRE_INDEX_OTHER = 12; - - private static int FRAME_ID(char a, char b, char c, char d) { - return ((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) - | ((d & 0xff) << 0); - } - - private static final int ID_TITLE = (FRAME_ID('T', 'I', 'T', '2')); - private static final int ID_ARTIST = (FRAME_ID('T', 'P', 'E', '1')); - private static final int ID_ALBUM = (FRAME_ID('T', 'A', 'L', 'B')); - private static final int ID_GENRE = (FRAME_ID('T', 'C', 'O', 'N')); - private static final int ID_ENCODER = (FRAME_ID('T', 'S', 'S', 'E')); - private static final int ID_PLAYLENGTH = (FRAME_ID('T', 'L', 'E', 'N')); - private static final int ID_COMMENT = (FRAME_ID('C', 'O', 'M', 'M')); - - /** - * "ddMM" - */ - private static final int ID_DATE = (FRAME_ID('T', 'D', 'A', 'T')); - /** - * "hhmm" - */ - private static final int ID_TIME = (FRAME_ID('T', 'I', 'M', 'E')); - /** - * '0'-'9' and '/' allowed - */ - private static final int ID_TPOS = (FRAME_ID('T', 'P', 'O', 'S')); - /** - * '0'-'9' and '/' allowed - */ - private static final int ID_TRACK = (FRAME_ID('T', 'R', 'C', 'K')); - /** - * "yyyy" - */ - private static final int ID_YEAR = (FRAME_ID('T', 'Y', 'E', 'R')); - - private static final int ID_TXXX = (FRAME_ID('T', 'X', 'X', 'X')); - private static final int ID_WXXX = (FRAME_ID('W', 'X', 'X', 'X')); - private static final int ID_SYLT = (FRAME_ID('S', 'Y', 'L', 'T')); - private static final int ID_APIC = (FRAME_ID('A', 'P', 'I', 'C')); - private static final int ID_GEOB = (FRAME_ID('G', 'E', 'O', 'B')); - private static final int ID_PCNT = (FRAME_ID('P', 'C', 'N', 'T')); - private static final int ID_AENC = (FRAME_ID('A', 'E', 'N', 'C')); - private static final int ID_LINK = (FRAME_ID('L', 'I', 'N', 'K')); - private static final int ID_ENCR = (FRAME_ID('E', 'N', 'C', 'R')); - private static final int ID_GRID = (FRAME_ID('G', 'R', 'I', 'D')); - private static final int ID_PRIV = (FRAME_ID('P', 'R', 'I', 'V')); - - private void copyV1ToV2(final LameGlobalFlags gfp, final int frame_id, - final String s) { - LameInternalFlags gfc = gfp.internal_flags; - int flags = gfc.tag_spec.flags; - id3v2_add_latin1(gfp, frame_id, null, null, s); - gfc.tag_spec.flags = flags; - } - - private void id3v2AddLameVersion(final LameGlobalFlags gfp) { - String buffer; - String b = ver.getLameOsBitness(); - String v = ver.getLameVersion(); - String u = ver.getLameUrl(); - final int lenb = b.length(); - - if (lenb > 0) { - buffer = String.format("LAME %s version %s (%s)", b, v, u); - } else { - buffer = String.format("LAME version %s (%s)", v, u); - } - copyV1ToV2(gfp, ID_ENCODER, buffer); - } - - private void id3v2AddAudioDuration(final LameGlobalFlags gfp) { - if (gfp.num_samples != -1) { - String buffer; - double max_ulong = Integer.MAX_VALUE; - double ms = gfp.num_samples; - long playlength_ms; - - ms *= 1000; - ms /= gfp.in_samplerate; - if (ms > Integer.MAX_VALUE) { - playlength_ms = (long) max_ulong; - } else if (ms < 0) { - playlength_ms = 0; - } else { - playlength_ms = (long) ms; - } - buffer = String.format("%d", playlength_ms); - copyV1ToV2(gfp, ID_PLAYLENGTH, buffer); - } - } - - public final void id3tag_genre_list(final GenreListHandler handler) { - if (handler != null) { - for (int i = 0; i < genre_names.length; ++i) { - if (i < genre_alpha_map.length) { - int j = genre_alpha_map[i]; - handler.genre_list_handler(j, genre_names[j]); - } - } - } - } - - private static final int GENRE_NUM_UNKNOWN = 255; - private static final Charset ASCII = Charset.forName("US-ASCII"); - - public final void id3tag_init(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - gfc.tag_spec = new ID3TagSpec(); - gfc.tag_spec.genre_id3v1 = GENRE_NUM_UNKNOWN; - gfc.tag_spec.padding_size = 128; - id3v2AddLameVersion(gfp); - } - - public final void id3tag_add_v2(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - gfc.tag_spec.flags &= ~V1_ONLY_FLAG; - gfc.tag_spec.flags |= ADD_V2_FLAG; - } - - public final void id3tag_v1_only(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - gfc.tag_spec.flags &= ~(ADD_V2_FLAG | V2_ONLY_FLAG); - gfc.tag_spec.flags |= V1_ONLY_FLAG; - } - - public final void id3tag_v2_only(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - gfc.tag_spec.flags &= ~V1_ONLY_FLAG; - gfc.tag_spec.flags |= V2_ONLY_FLAG; - } - - public final void id3tag_space_v1(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - gfc.tag_spec.flags &= ~V2_ONLY_FLAG; - gfc.tag_spec.flags |= SPACE_V1_FLAG; - } - - public final void id3tag_pad_v2(final LameGlobalFlags gfp) { - id3tag_set_pad(gfp, 128); - } - - public final void id3tag_set_pad(final LameGlobalFlags gfp, final int n) { - LameInternalFlags gfc = gfp.internal_flags; - gfc.tag_spec.flags &= ~V1_ONLY_FLAG; - gfc.tag_spec.flags |= PAD_V2_FLAG; - gfc.tag_spec.flags |= ADD_V2_FLAG; - gfc.tag_spec.padding_size = n; - } - - /** - * <PRE> - * Some existing options for ID3 tag can be specified by --tv option - * as follows. - * --tt <value>, --tv TIT2=value - * --ta <value>, --tv TPE1=value - * --tl <value>, --tv TALB=value - * --ty <value>, --tv TYER=value - * --tn <value>, --tv TRCK=value - * --tg <value>, --tv TCON=value - * (although some are not exactly same) - * </PRE> - */ - - public final boolean id3tag_set_albumart(final LameGlobalFlags gfp, - final byte[] image, final int size) { - MimeType mimetype = MimeType.MIMETYPE_NONE; - byte[] data = image; - LameInternalFlags gfc = gfp.internal_flags; - - /* make sure the image size is no larger than the maximum value */ - if (Lame.LAME_MAXALBUMART < size) { - return false; - } - /* determine MIME type from the actual image data */ - if (2 < size && data[0] == (byte) 0xFF && data[1] == (byte) 0xD8) { - mimetype = MimeType.MIMETYPE_JPEG; - } else if (4 < size && data[0] == 0x89 - && new String(data, 1, 3, ASCII).startsWith("PNG")) { - mimetype = MimeType.MIMETYPE_PNG; - } else if (4 < size && new String(data, 1, 3, ASCII).startsWith("GIF8")) { - mimetype = MimeType.MIMETYPE_GIF; - } else { - return false; - } - if (gfc.tag_spec.albumart != null) { - gfc.tag_spec.albumart = null; - gfc.tag_spec.albumart_size = 0; - gfc.tag_spec.albumart_mimetype = MimeType.MIMETYPE_NONE; - } - if (size < 1) { - return true; - } - gfc.tag_spec.albumart = new byte[size]; - if (gfc.tag_spec.albumart != null) { - System.arraycopy(image, 0, gfc.tag_spec.albumart, 0, size); - gfc.tag_spec.albumart_size = size; - gfc.tag_spec.albumart_mimetype = mimetype; - gfc.tag_spec.flags |= CHANGED_FLAG; - id3tag_add_v2(gfp); - } - return true; - } - - private int set_4_byte_value(final byte[] bytes, final int bytesPos, - int value) { - int i; - for (i = 3; i >= 0; --i) { - bytes[bytesPos + i] = (byte) (value & 0xff); - value >>= 8; - } - return bytesPos + 4; - } - - private int toID3v2TagId(final String s) { - int i, x = 0; - if (s == null) { - return 0; - } - for (i = 0; i < 4 && i < s.length(); ++i) { - char c = s.charAt(i); - int u = 0x0ff & c; - x <<= 8; - x |= u; - if (c < 'A' || 'Z' < c) { - if (c < '0' || '9' < c) { - return 0; - } - } - } - return x; - } - - private boolean isNumericString(final int frame_id) { - if (frame_id == ID_DATE || frame_id == ID_TIME || frame_id == ID_TPOS - || frame_id == ID_TRACK || frame_id == ID_YEAR) { - return true; - } - return false; - } - - private boolean isMultiFrame(final int frame_id) { - if (frame_id == ID_TXXX || frame_id == ID_WXXX - || frame_id == ID_COMMENT || frame_id == ID_SYLT - || frame_id == ID_APIC || frame_id == ID_GEOB - || frame_id == ID_PCNT || frame_id == ID_AENC - || frame_id == ID_LINK || frame_id == ID_ENCR - || frame_id == ID_GRID || frame_id == ID_PRIV) { - return true; - } - return false; - } - - private boolean hasUcs2ByteOrderMarker(final char bom) { - if (bom == 0xFFFE || bom == 0xFEFF) { - return true; - } - return false; - } - - private FrameDataNode findNode(final ID3TagSpec tag, final int frame_id, - final FrameDataNode last) { - FrameDataNode node = last != null ? last.nxt : tag.v2_head; - while (node != null) { - if (node.fid == frame_id) { - return node; - } - node = node.nxt; - } - return null; - } - - private void appendNode(final ID3TagSpec tag, final FrameDataNode node) { - if (tag.v2_tail == null || tag.v2_head == null) { - tag.v2_head = node; - tag.v2_tail = node; - } else { - tag.v2_tail.nxt = node; - tag.v2_tail = node; - } - } - - private String setLang(final String src) { - int i; - if (src == null || src.length() == 0) { - return "XXX"; - } else { - StringBuilder dst = new StringBuilder(); - if (src != null) { - dst.append(src.substring(0, 3)); - } - for (i = dst.length(); i < 3; ++i) { - dst.append(' '); - } - return dst.toString(); - } - } - - private boolean isSameLang(final String l1, final String l2) { - String d = setLang(l2); - for (int i = 0; i < 3; ++i) { - char a = Character.toLowerCase(l1.charAt(i)); - char b = Character.toLowerCase(d.charAt(i)); - if (a < ' ') - a = ' '; - if (b < ' ') - b = ' '; - if (a != b) { - return false; - } - } - return true; - } - - private boolean isSameDescriptor(final FrameDataNode node, final String dsc) { - if (node.dsc.enc == 1 && node.dsc.dim > 0) { - return false; - } - for (int i = 0; i < node.dsc.dim; ++i) { - if (null == dsc || node.dsc.l.charAt(i) != dsc.charAt(i)) { - return false; - } - } - return true; - } - - private boolean isSameDescriptorUcs2(final FrameDataNode node, - final String dsc) { - if (node.dsc.enc != 1 && node.dsc.dim > 0) { - return false; - } - for (int i = 0; i < node.dsc.dim; ++i) { - if (null == dsc || node.dsc.l.charAt(i) != dsc.charAt(i)) { - return false; - } - } - return true; - } - - private void id3v2_add_ucs2(final LameGlobalFlags gfp, final int frame_id, - final String lang, final String desc, final String text) { - LameInternalFlags gfc = gfp.internal_flags; - if (gfc != null) { - FrameDataNode node = findNode(gfc.tag_spec, frame_id, null); - if (isMultiFrame(frame_id)) { - while (node != null) { - if (isSameLang(node.lng, lang)) { - if (isSameDescriptorUcs2(node, desc)) { - break; - } - } - node = findNode(gfc.tag_spec, frame_id, node); - } - } - if (node == null) { - node = new FrameDataNode(); - appendNode(gfc.tag_spec, node); - } - node.fid = frame_id; - node.lng = setLang(lang); - node.dsc.l = desc; - node.dsc.dim = desc != null ? desc.length() : 0; - node.dsc.enc = 1; - node.txt.l = text; - node.txt.dim = text != null ? text.length() : 0; - node.txt.enc = 1; - gfc.tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); - } - } - - private void id3v2_add_latin1(final LameGlobalFlags gfp, - final int frame_id, final String lang, final String desc, - final String text) { - LameInternalFlags gfc = gfp.internal_flags; - if (gfc != null) { - FrameDataNode node; - node = findNode(gfc.tag_spec, frame_id, null); - if (isMultiFrame(frame_id)) { - while (node != null) { - if (isSameLang(node.lng, lang)) { - if (isSameDescriptor(node, desc)) { - break; - } - } - node = findNode(gfc.tag_spec, frame_id, node); - } - } - if (node == null) { - node = new FrameDataNode(); - appendNode(gfc.tag_spec, node); - } - node.fid = frame_id; - node.lng = setLang(lang); - node.dsc.l = desc; - node.dsc.dim = desc != null ? desc.length() : 0; - node.dsc.enc = 0; - node.txt.l = text; - node.txt.dim = text != null ? text.length() : 0; - node.txt.enc = 0; - gfc.tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); - } - } - - public final int id3tag_set_textinfo_ucs2(final LameGlobalFlags gfp, - final String id, final String text) { - long t_mask = FRAME_ID('T', (char) 0, (char) 0, (char) 0); - int frame_id = toID3v2TagId(id); - if (frame_id == 0) { - return -1; - } - if ((frame_id & t_mask) == t_mask) { - if (isNumericString(frame_id)) { - return -2; /* must be Latin-1 encoded */ - } - if (text == null) { - return 0; - } - if (!hasUcs2ByteOrderMarker(text.charAt(0))) { - return -3; /* BOM missing */ - } - if (gfp != null) { - id3v2_add_ucs2(gfp, frame_id, null, null, text); - return 0; - } - } - return -255; /* not supported by now */ - } - - private int id3tag_set_textinfo_latin1(final LameGlobalFlags gfp, - final String id, final String text) { - long t_mask = FRAME_ID('T', (char) 0, (char) 0, (char) 0); - int frame_id = toID3v2TagId(id); - if (frame_id == 0) { - return -1; - } - if ((frame_id & t_mask) == t_mask) { - if (text == null) { - return 0; - } - if (gfp != null) { - id3v2_add_latin1(gfp, frame_id, null, null, text); - return 0; - } - } - return -255; /* not supported by now */ - } - - public final int id3tag_set_comment(final LameGlobalFlags gfp, - final String lang, final String desc, final String text, - final int textPos) { - if (gfp != null) { - id3v2_add_latin1(gfp, ID_COMMENT, lang, desc, text); - return 0; - } - return -255; - } - - public final void id3tag_set_title(final LameGlobalFlags gfp, - final String title) { - LameInternalFlags gfc = gfp.internal_flags; - if (title != null && title.length() != 0) { - gfc.tag_spec.title = title; - gfc.tag_spec.flags |= CHANGED_FLAG; - copyV1ToV2(gfp, ID_TITLE, title); - } - } - - public final void id3tag_set_artist(final LameGlobalFlags gfp, - final String artist) { - LameInternalFlags gfc = gfp.internal_flags; - if (artist != null && artist.length() != 0) { - gfc.tag_spec.artist = artist; - gfc.tag_spec.flags |= CHANGED_FLAG; - copyV1ToV2(gfp, ID_ARTIST, artist); - } - } - - public final void id3tag_set_album(final LameGlobalFlags gfp, - final String album) { - LameInternalFlags gfc = gfp.internal_flags; - if (album != null && album.length() != 0) { - gfc.tag_spec.album = album; - gfc.tag_spec.flags |= CHANGED_FLAG; - copyV1ToV2(gfp, ID_ALBUM, album); - } - } - - public final void id3tag_set_year(final LameGlobalFlags gfp, - final String year) { - LameInternalFlags gfc = gfp.internal_flags; - if (year != null && year.length() != 0) { - int num = Integer.valueOf(year); - if (num < 0) { - num = 0; - } - /* limit a year to 4 digits so it fits in a version 1 tag */ - if (num > 9999) { - num = 9999; - } - if (num != 0) { - gfc.tag_spec.year = num; - gfc.tag_spec.flags |= CHANGED_FLAG; - } - copyV1ToV2(gfp, ID_YEAR, year); - } - } - - public final void id3tag_set_comment(final LameGlobalFlags gfp, - final String comment) { - LameInternalFlags gfc = gfp.internal_flags; - if (comment != null && comment.length() != 0) { - gfc.tag_spec.comment = comment; - gfc.tag_spec.flags |= CHANGED_FLAG; - { - int flags = gfc.tag_spec.flags; - id3v2_add_latin1(gfp, ID_COMMENT, "XXX", "", comment); - gfc.tag_spec.flags = flags; - } - } - } - - public final int id3tag_set_track(final LameGlobalFlags gfp, - final String track) { - LameInternalFlags gfc = gfp.internal_flags; - int ret = 0; - - if (track != null && track.length() != 0) { - int trackcount = track.indexOf('/'); - int num; - if (trackcount != -1) { - num = Integer.parseInt(track.substring(0, trackcount)); - } else { - num = Integer.parseInt(track); - } - /* check for valid ID3v1 track number range */ - if (num < 1 || num > 255) { - num = 0; - ret = -1; - /* track number out of ID3v1 range, ignored for ID3v1 */ - gfc.tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); - } - if (num != 0) { - gfc.tag_spec.track_id3v1 = num; - gfc.tag_spec.flags |= CHANGED_FLAG; - } - /* Look for the total track count after a "/", same restrictions */ - if (trackcount != -1) { - gfc.tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); - } - copyV1ToV2(gfp, ID_TRACK, track); - } - return ret; - } - - private int nextUpperAlpha(final String p, int pPos, final char x) { - for (char c = Character.toUpperCase(p.charAt(pPos)); pPos < p.length(); c = Character - .toUpperCase(p.charAt(pPos++))) { - if ('A' <= c && c <= 'Z') { - if (c != x) { - return pPos; - } - } - } - return pPos; - } - - private boolean sloppyCompared(final String p, final String q) { - int pPos = nextUpperAlpha(p, 0, (char) 0); - int qPos = nextUpperAlpha(q, 0, (char) 0); - char cp = pPos < p.length() ? Character.toUpperCase(p.charAt(pPos)) : 0; - char cq = Character.toUpperCase(q.charAt(qPos)); - while (cp == cq) { - if (cp == 0) { - return true; - } - if (p.charAt(1) == '.') { /* some abbrevation */ - while (qPos < q.length() && q.charAt(qPos++) != ' ') { - } - } - pPos = nextUpperAlpha(p, pPos, cp); - qPos = nextUpperAlpha(q, qPos, cq); - cp = pPos < p.length() ? Character.toUpperCase(p.charAt(pPos)) : 0; - cq = Character.toUpperCase(q.charAt(qPos)); - } - return false; - } - - private int sloppySearchGenre(final String genre) { - for (int i = 0; i < genre_names.length; ++i) { - if (sloppyCompared(genre, genre_names[i])) { - return i; - } - } - return genre_names.length; - } - - private int searchGenre(final String genre) { - for (int i = 0; i < genre_names.length; ++i) { - if (genre_names[i].equals(genre)) { - return i; - } - } - return genre_names.length; - } - - public final int id3tag_set_genre(final LameGlobalFlags gfp, String genre) { - LameInternalFlags gfc = gfp.internal_flags; - int ret = 0; - if (genre != null && genre.length() != 0) { - int num; - try { - num = Integer.parseInt(genre); - if ((num < 0) || (num >= genre_names.length)) { - return -1; - } - genre = genre_names[num]; - } catch (NumberFormatException e) { - /* is the input a string or a valid number? */ - num = searchGenre(genre); - if (num == genre_names.length) { - num = sloppySearchGenre(genre); - } - if (num == genre_names.length) { - num = GENRE_INDEX_OTHER; - ret = -2; - } else { - genre = genre_names[num]; - } - } - gfc.tag_spec.genre_id3v1 = num; - gfc.tag_spec.flags |= CHANGED_FLAG; - if (ret != 0) { - gfc.tag_spec.flags |= ADD_V2_FLAG; - } - copyV1ToV2(gfp, ID_GENRE, genre); - } - return ret; - } - - private int set_frame_custom(final byte[] frame, int framePos, - final char[] fieldvalue) { - if (fieldvalue != null && fieldvalue[0] != 0) { - int value = 5; - int length = new String(fieldvalue, value, fieldvalue.length - - value).length(); - frame[framePos++] = (byte) fieldvalue[0]; - frame[framePos++] = (byte) fieldvalue[1]; - frame[framePos++] = (byte) fieldvalue[2]; - frame[framePos++] = (byte) fieldvalue[3]; - framePos = set_4_byte_value(frame, value, (new String(fieldvalue, - value, fieldvalue.length - value).length() + 1)); - /* clear 2-byte header flags */ - frame[framePos++] = 0; - frame[framePos++] = 0; - /* clear 1 encoding descriptor byte to indicate ISO-8859-1 format */ - frame[framePos++] = 0; - while (length-- != 0) { - frame[framePos++] = (byte) fieldvalue[value++]; - } - } - return framePos; - } - - private int sizeOfNode(final FrameDataNode node) { - int n = 0; - if (node != null) { - n = 10; - /* header size */ - n += 1; - /* text encoding flag */ - switch (node.txt.enc) { - default: - case 0: - n += node.txt.dim; - break; - case 1: - n += node.txt.dim * 2; - break; - } - } - return n; - } - - private int sizeOfCommentNode(final FrameDataNode node) { - int n = 0; - if (node != null) { - n = 10; - /* header size */ - n += 1; - /* text encoding flag */ - n += 3; - /* language */ - switch (node.dsc.enc) { - default: - case 0: - n += 1 + node.dsc.dim; - break; - case 1: - n += 2 + node.dsc.dim * 2; - break; - } - switch (node.txt.enc) { - default: - case 0: - n += node.txt.dim; - break; - case 1: - n += node.txt.dim * 2; - break; - } - } - return n; - } - - private int writeChars(final byte[] frame, int framePos, final String str, - int strPos, int n) { - while (n-- != 0) { - frame[framePos++] = (byte) str.charAt(strPos++); - } - return framePos; - } - - private int writeUcs2s(final byte[] frame, int framePos, final String str, - int strPos, int n) { - while (n-- != 0) { - frame[framePos++] = (byte) (0xff & (str.charAt(strPos) >> 8)); - frame[framePos++] = (byte) (0xff & (str.charAt(strPos++))); - } - return framePos; - } - - private int set_frame_comment(final byte[] frame, int framePos, - final FrameDataNode node) { - int n = sizeOfCommentNode(node); - if (n > 10) { - framePos = set_4_byte_value(frame, framePos, ID_COMMENT); - framePos = set_4_byte_value(frame, framePos, (int) (n - 10)); - /* clear 2-byte header flags */ - frame[framePos++] = 0; - frame[framePos++] = 0; - /* encoding descriptor byte */ - frame[framePos++] = node.txt.enc == 1 ? (byte) 1 : (byte) 0; - /* 3 bytes language */ - frame[framePos++] = (byte) (node.lng.charAt(0)); - frame[framePos++] = (byte) node.lng.charAt(1); - frame[framePos++] = (byte) node.lng.charAt(2); - /* descriptor with zero byte(s) separator */ - if (node.dsc.enc != 1) { - framePos = writeChars(frame, framePos, node.dsc.l, 0, - node.dsc.dim); - frame[framePos++] = 0; - } else { - framePos = writeUcs2s(frame, framePos, node.dsc.l, 0, - node.dsc.dim); - frame[framePos++] = 0; - frame[framePos++] = 0; - } - /* comment full text */ - if (node.txt.enc != 1) { - framePos = writeChars(frame, framePos, node.txt.l, 0, - node.txt.dim); - } else { - framePos = writeUcs2s(frame, framePos, node.txt.l, 0, - node.txt.dim); - } - } - return framePos; - } - - private int set_frame_custom2(final byte[] frame, int framePos, - final FrameDataNode node) { - int n = sizeOfNode(node); - if (n > 10) { - framePos = set_4_byte_value(frame, framePos, node.fid); - framePos = set_4_byte_value(frame, framePos, (n - 10)); - /* clear 2-byte header flags */ - frame[framePos++] = 0; - frame[framePos++] = 0; - /* clear 1 encoding descriptor byte to indicate ISO-8859-1 format */ - frame[framePos++] = node.txt.enc == 1 ? (byte) 1 : (byte) 0; - if (node.txt.enc != 1) { - framePos = writeChars(frame, framePos, node.txt.l, 0, - node.txt.dim); - } else { - framePos = writeUcs2s(frame, framePos, node.txt.l, 0, - node.txt.dim); - } - } - return framePos; - } - - private int set_frame_apic(final byte[] frame, int framePos, - final char[] mimetype, final byte[] data, int size) { - /** - * <PRE> - * ID3v2.3 standard APIC frame: - * <Header for 'Attached picture', ID: "APIC"> - * Text encoding $xx - * MIME type <text string> $00 - * Picture type $xx - * Description <text string according to encoding> $00 (00) - * Picture data <binary data> - * </PRE> - */ - if (mimetype != null && data != null && size != 0) { - framePos = set_4_byte_value(frame, framePos, - FRAME_ID('A', 'P', 'I', 'C')); - framePos = set_4_byte_value(frame, framePos, - (4 + (mimetype.length) + size)); - /* clear 2-byte header flags */ - frame[framePos++] = 0; - frame[framePos++] = 0; - /* clear 1 encoding descriptor byte to indicate ISO-8859-1 format */ - frame[framePos++] = 0; - /* copy mime_type */ - int mimetypePos = 0; - while (mimetypePos < mimetype.length) { - frame[framePos++] = (byte) mimetype[mimetypePos++]; - } - frame[framePos++] = 0; - /* set picture type to 0 */ - frame[framePos++] = 0; - /* empty description field */ - frame[framePos++] = 0; - /* copy the image data */ - int dataPos = 0; - while (size-- != 0) { - frame[framePos++] = data[dataPos++]; - } - } - return framePos; - } - - public final int id3tag_set_fieldvalue(final LameGlobalFlags gfp, - final String fieldvalue) { - LameInternalFlags gfc = gfp.internal_flags; - if (fieldvalue != null && fieldvalue.length() != 0) { - int frame_id = toID3v2TagId(fieldvalue); - if (fieldvalue.length() < 5 || fieldvalue.charAt(4) != '=') { - return -1; - } - if (frame_id != 0) { - if (id3tag_set_textinfo_latin1(gfp, fieldvalue, - fieldvalue.substring(5)) != 0) { - gfc.tag_spec.values.add(fieldvalue); - gfc.tag_spec.num_values++; - } - } - gfc.tag_spec.flags |= CHANGED_FLAG; - } - id3tag_add_v2(gfp); - return 0; - } - - private static final String mime_jpeg = "image/jpeg"; - private static final String mime_png = "image/png"; - private static final String mime_gif = "image/gif"; - - public final int lame_get_id3v2_tag(final LameGlobalFlags gfp, - final byte[] buffer, final int size) { - LameInternalFlags gfc; - if (gfp == null) { - return 0; - } - gfc = gfp.internal_flags; - if (gfc == null) { - return 0; - } - if ((gfc.tag_spec.flags & V1_ONLY_FLAG) != 0) { - return 0; - } - { - /* calculate length of four fields which may not fit in verion 1 tag */ - int title_length = gfc.tag_spec.title != null ? gfc.tag_spec.title - .length() : 0; - int artist_length = gfc.tag_spec.artist != null ? gfc.tag_spec.artist - .length() : 0; - int album_length = gfc.tag_spec.album != null ? gfc.tag_spec.album - .length() : 0; - int comment_length = gfc.tag_spec.comment != null ? gfc.tag_spec.comment - .length() : 0; - /* write tag if explicitly requested or if fields overflow */ - if ((gfc.tag_spec.flags & (ADD_V2_FLAG | V2_ONLY_FLAG)) != 0 - || (title_length > 30) || (artist_length > 30) - || (album_length > 30) || (comment_length > 30) - || (gfc.tag_spec.track_id3v1 != 0 && (comment_length > 28))) { - int tag_size; - int p; - int adjusted_tag_size; - int i; - String albumart_mime = null; - - id3v2AddAudioDuration(gfp); - - /* calulate size of tag starting with 10-byte tag header */ - tag_size = 10; - for (i = 0; i < gfc.tag_spec.num_values; ++i) { - tag_size += 6 + gfc.tag_spec.values.get(i).length(); - } - if (gfc.tag_spec.albumart != null - && gfc.tag_spec.albumart_size != 0) { - switch (gfc.tag_spec.albumart_mimetype) { - case MIMETYPE_JPEG: - albumart_mime = mime_jpeg; - break; - case MIMETYPE_PNG: - albumart_mime = mime_png; - break; - case MIMETYPE_GIF: - albumart_mime = mime_gif; - break; - } - if (albumart_mime != null) { - tag_size += 10 + 4 + albumart_mime.length() - + gfc.tag_spec.albumart_size; - } - } - { - ID3TagSpec tag = gfc.tag_spec; - if (tag.v2_head != null) { - FrameDataNode node; - for (node = tag.v2_head; node != null; node = node.nxt) { - if (node.fid == ID_COMMENT) { - tag_size += sizeOfCommentNode(node); - } else { - tag_size += sizeOfNode(node); - } - } - } - } - if ((gfc.tag_spec.flags & PAD_V2_FLAG) != 0) { - /* add some bytes of padding */ - tag_size += gfc.tag_spec.padding_size; - } - if (size < tag_size) { - return tag_size; - } - if (buffer == null) { - return 0; - } - p = 0; - /* set tag header starting with file identifier */ - buffer[p++] = 'I'; - buffer[p++] = 'D'; - buffer[p++] = '3'; - /* set version number word */ - buffer[p++] = 3; - buffer[p++] = 0; - /* clear flags byte */ - buffer[p++] = 0; - /* calculate and set tag size = total size - header size */ - adjusted_tag_size = tag_size - 10; - /* - * encode adjusted size into four bytes where most significant - * bit is clear in each byte, for 28-bit total - */ - buffer[p++] = (byte) ((adjusted_tag_size >> 21) & 0x7f); - buffer[p++] = (byte) ((adjusted_tag_size >> 14) & 0x7f); - buffer[p++] = (byte) ((adjusted_tag_size >> 7) & 0x7f); - buffer[p++] = (byte) (adjusted_tag_size & 0x7f); - - /* - * NOTE: The remainder of the tag (frames and padding, if any) - * are not "unsynchronized" to prevent false MPEG audio headers - * from appearing in the bitstream. Why? Well, most players and - * utilities know how to skip the ID3 version 2 tag by now even - * if they don't read its contents, and it's actually very - * unlikely that such a false "sync" pattern would occur in just - * the simple text frames added here. - */ - - /* set each frame in tag */ - { - ID3TagSpec tag = gfc.tag_spec; - if (tag.v2_head != null) { - FrameDataNode node; - for (node = tag.v2_head; node != null; node = node.nxt) { - if (node.fid == ID_COMMENT) { - p = set_frame_comment(buffer, p, node); - } else { - p = set_frame_custom2(buffer, p, node); - } - } - } - } - for (i = 0; i < gfc.tag_spec.num_values; ++i) { - p = set_frame_custom(buffer, p, gfc.tag_spec.values.get(i) - .toCharArray()); - } - if (albumart_mime != null) { - p = set_frame_apic(buffer, p, albumart_mime.toCharArray(), - gfc.tag_spec.albumart, gfc.tag_spec.albumart_size); - } - /* clear any padding bytes */ - Arrays.fill(buffer, p, tag_size, (byte) 0); - return tag_size; - } - } - return 0; - } - - public final int id3tag_write_v2(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - if ((gfc.tag_spec.flags & CHANGED_FLAG) != 0 - && 0 == (gfc.tag_spec.flags & V1_ONLY_FLAG)) { - byte[] tag = null; - int tag_size, n; - - n = lame_get_id3v2_tag(gfp, null, 0); - tag = new byte[n]; - tag_size = lame_get_id3v2_tag(gfp, tag, n); - if (tag_size > n) { - return -1; - } else { - /* write tag directly into bitstream at current position */ - for (int i = 0; i < tag_size; ++i) { - bits.add_dummy_byte(gfp, tag[i] & 0xff, 1); - } - } - return (int) tag_size; - /* ok, tag should not exceed 2GB */ - } - return 0; - } - - private int set_text_field(final byte[] field, int fieldPos, - final String text, int size, final int pad) { - int textPos = 0; - while (size-- != 0) { - if (text != null && textPos < text.length()) { - field[fieldPos++] = (byte) text.charAt(textPos++); - } else { - field[fieldPos++] = (byte) pad; - } - } - return fieldPos; - } - - public final int lame_get_id3v1_tag(final LameGlobalFlags gfp, - final byte[] buffer, final int size) { - int tag_size = 128; - LameInternalFlags gfc; - - if (gfp == null) { - return 0; - } - if (size < tag_size) { - return tag_size; - } - gfc = gfp.internal_flags; - if (gfc == null) { - return 0; - } - if (buffer == null) { - return 0; - } - if ((gfc.tag_spec.flags & CHANGED_FLAG) != 0 - && 0 == (gfc.tag_spec.flags & V2_ONLY_FLAG)) { - int p = 0; - int pad = (gfc.tag_spec.flags & SPACE_V1_FLAG) != 0 ? ' ' : 0; - String year; - - /* set tag identifier */ - buffer[p++] = 'T'; - buffer[p++] = 'A'; - buffer[p++] = 'G'; - /* set each field in tag */ - p = set_text_field(buffer, p, gfc.tag_spec.title, 30, pad); - p = set_text_field(buffer, p, gfc.tag_spec.artist, 30, pad); - p = set_text_field(buffer, p, gfc.tag_spec.album, 30, pad); - year = String.format("%d", Integer.valueOf(gfc.tag_spec.year)); - p = set_text_field(buffer, p, gfc.tag_spec.year != 0 ? year : null, - 4, pad); - /* limit comment field to 28 bytes if a track is specified */ - p = set_text_field(buffer, p, gfc.tag_spec.comment, - gfc.tag_spec.track_id3v1 != 0 ? 28 : 30, pad); - if (gfc.tag_spec.track_id3v1 != 0) { - /* clear the next byte to indicate a version 1.1 tag */ - buffer[p++] = 0; - buffer[p++] = (byte) gfc.tag_spec.track_id3v1; - } - buffer[p++] = (byte) gfc.tag_spec.genre_id3v1; - return tag_size; - } - return 0; - } - - public final int id3tag_write_v1(final LameGlobalFlags gfp) { - byte tag[] = new byte[128]; - - int m = tag.length; - int n = lame_get_id3v1_tag(gfp, tag, m); - if (n > m) { - return 0; - } - /* write tag directly into bitstream at current position */ - for (int i = 0; i < n; ++i) { - bits.add_dummy_byte(gfp, tag[i] & 0xff, 1); - } - return (int) n; /* ok, tag has fixed size of 128 bytes, well below 2GB */ - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3TagSpec.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3TagSpec.java deleted file mode 100644 index 5790ebdf0..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ID3TagSpec.java +++ /dev/null @@ -1,23 +0,0 @@ -package mp3; - -import java.util.ArrayList; - -import mp3.ID3Tag.MimeType; - -public final class ID3TagSpec { - int flags; - int year; - String title; - String artist; - String album; - String comment; - int track_id3v1; - int genre_id3v1; - byte[] albumart; - int albumart_size; - int padding_size; - MimeType albumart_mimetype; - ArrayList<String> values = new ArrayList<String>(); - int num_values; - FrameDataNode v2_head, v2_tail; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIISideInfo.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIISideInfo.java deleted file mode 100644 index affbdae81..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIISideInfo.java +++ /dev/null @@ -1,18 +0,0 @@ -package mp3; - -public class IIISideInfo { - public IIISideInfo() { - for (int gr = 0; gr < 2; gr++) { - for (int ch = 0; ch < 2; ch++) { - tt[gr][ch] = new GrInfo(); - } - } - } - - GrInfo tt[][] = new GrInfo[2][2]; - int main_data_begin; - int private_bits; - int resvDrain_pre; - int resvDrain_post; - int scfsi[][] = new int[2][4]; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_ratio.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_ratio.java deleted file mode 100644 index 729c557b4..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_ratio.java +++ /dev/null @@ -1,6 +0,0 @@ -package mp3; - -public final class III_psy_ratio { - III_psy_xmin thm = new III_psy_xmin(); - III_psy_xmin en = new III_psy_xmin(); -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_xmin.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_xmin.java deleted file mode 100644 index 02318f1fe..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/III_psy_xmin.java +++ /dev/null @@ -1,15 +0,0 @@ -package mp3; - -public final class III_psy_xmin { - float[] l = new float[Encoder.SBMAX_l]; - float[][] s = new float[Encoder.SBMAX_s][3]; - - public void assign(III_psy_xmin iii_psy_xmin) { - System.arraycopy(iii_psy_xmin.l, 0, l, 0, Encoder.SBMAX_l); - for (int i = 0; i < Encoder.SBMAX_s; i++) { - for (int j = 0; j < 3; j++) { - s[i][j] = iii_psy_xmin.s[i][j]; - } - } - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIterationLoop.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIterationLoop.java deleted file mode 100644 index d7e294c9a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/IIterationLoop.java +++ /dev/null @@ -1,12 +0,0 @@ -package mp3; - -/** - * Global Type Definitions - * - * @author Ken - * - */ -public interface IIterationLoop { - void iteration_loop(final LameGlobalFlags gfp, float pe[][], - float ms_ratio[], III_psy_ratio ratio[][]); -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Inf.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Inf.java deleted file mode 100644 index 98a47b690..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Inf.java +++ /dev/null @@ -1,10 +0,0 @@ -package mp3; - -public final class Inf { - String l; - int dim; - /** - * 0:Latin-1, 1:UCS-2, 2:RAW - */ - int enc; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/L3Side.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/L3Side.java deleted file mode 100644 index de1485621..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/L3Side.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Layer 3 side include file - * - * Copyright (c) 1999 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package mp3; - -public class L3Side { - - /** - * max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8) - */ - public static final int SFBMAX = (Encoder.SBMAX_s * 3); - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Lame.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Lame.java deleted file mode 100644 index 78e5517f9..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Lame.java +++ /dev/null @@ -1,2373 +0,0 @@ -/* - * LAME MP3 encoding engine - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 2000-2005 Takehiro Tominaga - * Copyright (c) 2000-2005 Robert Hegemann - * Copyright (c) 2000-2005 Gabriel Bouvigne - * Copyright (c) 2000-2004 Alexander Leidinger - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Lame.java,v 1.38 2011/05/24 21:15:54 kenchis Exp $ */ - -package mp3; - -import mpg.MPGLib; - -public class Lame { - GainAnalysis ga; - BitStream bs; - Presets p; - QuantizePVT qupvt; - Quantize qu; - PsyModel psy = new PsyModel(); - VBRTag vbr; - Version ver; - ID3Tag id3; - MPGLib mpglib; - public Encoder enc = new Encoder(); - - public final void setModules(GainAnalysis ga, BitStream bs, Presets p, - QuantizePVT qupvt, Quantize qu, VBRTag vbr, Version ver, - ID3Tag id3, MPGLib mpglib) { - this.ga = ga; - this.bs = bs; - this.p = p; - this.qupvt = qupvt; - this.qu = qu; - this.vbr = vbr; - this.ver = ver; - this.id3 = id3; - this.mpglib = mpglib; - this.enc.setModules(bs, psy, qupvt, vbr); - } - - public static final long LAME_ID = 0xFFF88E3B; - - /* presets */ - /* values from 8 to 320 should be reserved for abr bitrates */ - /* for abr I'd suggest to directly use the targeted bitrate as a value */ - - public static final int V9 = 410; - public static final int V8 = 420; - public static final int V7 = 430; - public static final int V6 = 440; - public static final int V5 = 450; - public static final int V4 = 460; - public static final int V3 = 470; - public static final int V2 = 480; - public static final int V1 = 490; - public static final int V0 = 500; - - /* still there for compatibility */ - - public static final int R3MIX = 1000; - public static final int STANDARD = 1001; - public static final int EXTREME = 1002; - public static final int INSANE = 1003; - public static final int STANDARD_FAST = 1004; - public static final int EXTREME_FAST = 1005; - public static final int MEDIUM = 1006; - public static final int MEDIUM_FAST = 1007; - - /** - * maximum size of albumart image (128KB), which affects LAME_MAXMP3BUFFER - * as well since lame_encode_buffer() also returns ID3v2 tag data - */ - static final int LAME_MAXALBUMART = (128 * 1024); - - /** - * maximum size of mp3buffer needed if you encode at most 1152 samples for - * each call to lame_encode_buffer. see lame_encode_buffer() below - * (LAME_MAXMP3BUFFER is now obsolete) - */ - public static final int LAME_MAXMP3BUFFER = (16384 + LAME_MAXALBUMART); - - private static final int LAME_DEFAULT_QUALITY = 3; - - private float filter_coef(final float x) { - if (x > 1.0) - return 0.0f; - if (x <= 0.0) - return 1.0f; - - return (float) Math.cos(Math.PI / 2 * x); - } - - private void lame_init_params_ppflt(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - /***************************************************************/ - /* compute info needed for polyphase filter (filter type==0, default) */ - /***************************************************************/ - - int lowpass_band = 32; - int highpass_band = -1; - - if (gfc.lowpass1 > 0) { - int minband = 999; - for (int band = 0; band <= 31; band++) { - float freq = (float) (band / 31.0); - /* this band and above will be zeroed: */ - if (freq >= gfc.lowpass2) { - lowpass_band = Math.min(lowpass_band, band); - } - if (gfc.lowpass1 < freq && freq < gfc.lowpass2) { - minband = Math.min(minband, band); - } - } - - /* - * compute the *actual* transition band implemented by the polyphase - * filter - */ - if (minband == 999) { - gfc.lowpass1 = (lowpass_band - .75f) / 31.0f; - } else { - gfc.lowpass1 = (minband - .75f) / 31.0f; - } - gfc.lowpass2 = lowpass_band / 31.0f; - } - - /* - * make sure highpass filter is within 90% of what the effective - * highpass frequency will be - */ - if (gfc.highpass2 > 0) { - if (gfc.highpass2 < .9 * (.75 / 31.0)) { - gfc.highpass1 = 0; - gfc.highpass2 = 0; - System.err.println("Warning: highpass filter disabled. " - + "highpass frequency too small\n"); - } - } - - if (gfc.highpass2 > 0) { - int maxband = -1; - for (int band = 0; band <= 31; band++) { - float freq = band / 31.0f; - /* this band and below will be zereod */ - if (freq <= gfc.highpass1) { - highpass_band = Math.max(highpass_band, band); - } - if (gfc.highpass1 < freq && freq < gfc.highpass2) { - maxband = Math.max(maxband, band); - } - } - /* - * compute the *actual* transition band implemented by the polyphase - * filter - */ - gfc.highpass1 = highpass_band / 31.0f; - if (maxband == -1) { - gfc.highpass2 = (highpass_band + .75f) / 31.0f; - } else { - gfc.highpass2 = (maxband + .75f) / 31.0f; - } - } - - for (int band = 0; band < 32; band++) { - double fc1, fc2; - float freq = band / 31.0f; - if (gfc.highpass2 > gfc.highpass1) { - fc1 = filter_coef((gfc.highpass2 - freq) - / (gfc.highpass2 - gfc.highpass1 + 1e-20f)); - } else { - fc1 = 1.0; - } - if (gfc.lowpass2 > gfc.lowpass1) { - fc2 = filter_coef((freq - gfc.lowpass1) - / (gfc.lowpass2 - gfc.lowpass1 + 1e-20f)); - } else { - fc2 = 1.0; - } - gfc.amp_filter[band] = (float) (fc1 * fc2); - } - } - - protected static class LowPassHighPass { - double lowerlimit; - } - - private static class BandPass { - public BandPass(int bitrate, int lPass) { - lowpass = lPass; - } - - public int lowpass; - } - - private void optimum_bandwidth(final LowPassHighPass lh, final int bitrate) { - /** - * <PRE> - * Input: - * bitrate total bitrate in kbps - * - * Output: - * lowerlimit: best lowpass frequency limit for input filter in Hz - * upperlimit: best highpass frequency limit for input filter in Hz - * </PRE> - */ - final BandPass freq_map[] = new BandPass[] { new BandPass(8, 2000), - new BandPass(16, 3700), new BandPass(24, 3900), - new BandPass(32, 5500), new BandPass(40, 7000), - new BandPass(48, 7500), new BandPass(56, 10000), - new BandPass(64, 11000), new BandPass(80, 13500), - new BandPass(96, 15100), new BandPass(112, 15600), - new BandPass(128, 17000), new BandPass(160, 17500), - new BandPass(192, 18600), new BandPass(224, 19400), - new BandPass(256, 19700), new BandPass(320, 20500) }; - - int table_index = nearestBitrateFullIndex(bitrate); - lh.lowerlimit = freq_map[table_index].lowpass; - } - - private int optimum_samplefreq(final int lowpassfreq, - final int input_samplefreq) { - /* - * Rules: - * - * - if possible, sfb21 should NOT be used - */ - int suggested_samplefreq = 44100; - - if (input_samplefreq >= 48000) - suggested_samplefreq = 48000; - else if (input_samplefreq >= 44100) - suggested_samplefreq = 44100; - else if (input_samplefreq >= 32000) - suggested_samplefreq = 32000; - else if (input_samplefreq >= 24000) - suggested_samplefreq = 24000; - else if (input_samplefreq >= 22050) - suggested_samplefreq = 22050; - else if (input_samplefreq >= 16000) - suggested_samplefreq = 16000; - else if (input_samplefreq >= 12000) - suggested_samplefreq = 12000; - else if (input_samplefreq >= 11025) - suggested_samplefreq = 11025; - else if (input_samplefreq >= 8000) - suggested_samplefreq = 8000; - - if (lowpassfreq == -1) - return suggested_samplefreq; - - if (lowpassfreq <= 15960) - suggested_samplefreq = 44100; - if (lowpassfreq <= 15250) - suggested_samplefreq = 32000; - if (lowpassfreq <= 11220) - suggested_samplefreq = 24000; - if (lowpassfreq <= 9970) - suggested_samplefreq = 22050; - if (lowpassfreq <= 7230) - suggested_samplefreq = 16000; - if (lowpassfreq <= 5420) - suggested_samplefreq = 12000; - if (lowpassfreq <= 4510) - suggested_samplefreq = 11025; - if (lowpassfreq <= 3970) - suggested_samplefreq = 8000; - - if (input_samplefreq < suggested_samplefreq) { - /* - * choose a valid MPEG sample frequency above the input sample - * frequency to avoid SFB21/12 bitrate bloat rh 061115 - */ - if (input_samplefreq > 44100) { - return 48000; - } - if (input_samplefreq > 32000) { - return 44100; - } - if (input_samplefreq > 24000) { - return 32000; - } - if (input_samplefreq > 22050) { - return 24000; - } - if (input_samplefreq > 16000) { - return 22050; - } - if (input_samplefreq > 12000) { - return 16000; - } - if (input_samplefreq > 11025) { - return 12000; - } - if (input_samplefreq > 8000) { - return 11025; - } - return 8000; - } - return suggested_samplefreq; - } - - /** - * set internal feature flags. USER should not access these since some - * combinations will produce strange results - */ - private void lame_init_qval(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - - switch (gfp.quality) { - default: - case 9: /* no psymodel, no noise shaping */ - gfc.psymodel = 0; - gfc.noise_shaping = 0; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 8: - gfp.quality = 7; - //$FALL-THROUGH$ - case 7: - /* - * use psymodel (for short block and m/s switching), but no noise - * shapping - */ - gfc.psymodel = 1; - gfc.noise_shaping = 0; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 6: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 5: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 0; - gfc.full_outer_loop = 0; - break; - - case 4: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 0; - gfc.noise_shaping_stop = 0; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 3: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - gfc.noise_shaping_amp = 1; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 2: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 1; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; /* inner loop */ - gfc.full_outer_loop = 0; - break; - - case 1: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 2; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - gfc.full_outer_loop = 0; - break; - - case 0: - gfc.psymodel = 1; - if (gfc.noise_shaping == 0) - gfc.noise_shaping = 1; - if (gfc.substep_shaping == 0) - gfc.substep_shaping = 2; - gfc.noise_shaping_amp = 2; - gfc.noise_shaping_stop = 1; - if (gfc.subblock_gain == -1) - gfc.subblock_gain = 1; - gfc.use_best_huffman = 1; - /* - * type 2 disabled because of it slowness, in favor of full outer - * loop search - */ - gfc.full_outer_loop = 0; - /* - * full outer loop search disabled because of audible distortions it - * may generate rh 060629 - */ - break; - } - - } - - private double linear_int(final double a, final double b, final double m) { - return a + m * (b - a); - } - - /** - * @param bRate - * legal rates from 8 to 320 - */ - private int FindNearestBitrate(final int bRate, int version, - final int samplerate) { - /* MPEG-1 or MPEG-2 LSF */ - if (samplerate < 16000) - version = 2; - - int bitrate = Tables.bitrate_table[version][1]; - - for (int i = 2; i <= 14; i++) { - if (Tables.bitrate_table[version][i] > 0) { - if (Math.abs(Tables.bitrate_table[version][i] - bRate) < Math - .abs(bitrate - bRate)) - bitrate = Tables.bitrate_table[version][i]; - } - } - return bitrate; - } - - /** - * Used to find table index when we need bitrate-based values determined - * using tables - * - * bitrate in kbps - * - * Gabriel Bouvigne 2002-11-03 - */ - public final int nearestBitrateFullIndex(final int bitrate) { - /* borrowed from DM abr presets */ - - final int full_bitrate_table[] = { 8, 16, 24, 32, 40, 48, 56, 64, 80, - 96, 112, 128, 160, 192, 224, 256, 320 }; - - int lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0; - - /* We assume specified bitrate will be 320kbps */ - upper_range_kbps = full_bitrate_table[16]; - upper_range = 16; - lower_range_kbps = full_bitrate_table[16]; - lower_range = 16; - - /* - * Determine which significant bitrates the value specified falls - * between, if loop ends without breaking then we were correct above - * that the value was 320 - */ - for (int b = 0; b < 16; b++) { - if ((Math.max(bitrate, full_bitrate_table[b + 1])) != bitrate) { - upper_range_kbps = full_bitrate_table[b + 1]; - upper_range = b + 1; - lower_range_kbps = full_bitrate_table[b]; - lower_range = (b); - break; /* We found upper range */ - } - } - - /* Determine which range the value specified is closer to */ - if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) { - return lower_range; - } - return upper_range; - } - - /** - * map frequency to a valid MP3 sample frequency - * - * Robert Hegemann 2000-07-01 - */ - private int map2MP3Frequency(final int freq) { - if (freq <= 8000) - return 8000; - if (freq <= 11025) - return 11025; - if (freq <= 12000) - return 12000; - if (freq <= 16000) - return 16000; - if (freq <= 22050) - return 22050; - if (freq <= 24000) - return 24000; - if (freq <= 32000) - return 32000; - if (freq <= 44100) - return 44100; - - return 48000; - } - - /** - * convert samp freq in Hz to index - */ - private int SmpFrqIndex(final int sample_freq, final LameGlobalFlags gpf) { - switch (sample_freq) { - case 44100: - gpf.version = 1; - return 0; - case 48000: - gpf.version = 1; - return 1; - case 32000: - gpf.version = 1; - return 2; - case 22050: - gpf.version = 0; - return 0; - case 24000: - gpf.version = 0; - return 1; - case 16000: - gpf.version = 0; - return 2; - case 11025: - gpf.version = 0; - return 0; - case 12000: - gpf.version = 0; - return 1; - case 8000: - gpf.version = 0; - return 2; - default: - gpf.version = 0; - return -1; - } - } - - /** - * @param bRate - * legal rates from 32 to 448 kbps - * @param version - * MPEG-1 or MPEG-2/2.5 LSF - */ - public final int BitrateIndex(final int bRate, int version, - final int samplerate) { - /* convert bitrate in kbps to index */ - if (samplerate < 16000) - version = 2; - for (int i = 0; i <= 14; i++) { - if (Tables.bitrate_table[version][i] > 0) { - if (Tables.bitrate_table[version][i] == bRate) { - return i; - } - } - } - return -1; - } - - /** - * Resampling via FIR filter, blackman window. - */ - private float blackman(float x, final float fcn, final int l) { - /* - * This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C - * S.D. Stearns and R.A. David, Prentice-Hall, 1992 - */ - float wcn = (float) (Math.PI * fcn); - - x /= l; - if (x < 0) - x = 0; - if (x > 1) - x = 1; - float x2 = x - .5f; - - float bkwn = 0.42f - 0.5f * (float) Math.cos(2 * x * Math.PI) + 0.08f - * (float) Math.cos(4 * x * Math.PI); - if (Math.abs(x2) < 1e-9) - return (float) (wcn / Math.PI); - else - return (float) (bkwn * Math.sin(l * wcn * x2) / (Math.PI * l * x2)); - } - - /** - * Greatest common divisor. - * - * Joint work of Euclid and M. Hendry - */ - private int gcd(final int i, final int j) { - return j != 0 ? gcd(j, i % j) : i; - } - - protected static class NumUsed { - int num_used; - } - - private int fill_buffer_resample(final LameGlobalFlags gfp, - final float[] outbuf, final int outbufPos, final int desired_len, - final float[] inbuf, final int in_bufferPos, final int len, - final NumUsed num_used, final int ch) { - final LameInternalFlags gfc = gfp.internal_flags; - int i, j = 0, k; - /* number of convolution functions to pre-compute */ - int bpc = gfp.out_samplerate - / gcd(gfp.out_samplerate, gfp.in_samplerate); - if (bpc > LameInternalFlags.BPC) - bpc = LameInternalFlags.BPC; - - float intratio = (Math.abs(gfc.resample_ratio - - Math.floor(.5 + gfc.resample_ratio)) < .0001) ? 1 : 0; - float fcn = 1.00f / (float) gfc.resample_ratio; - if (fcn > 1.00) - fcn = 1.00f; - int filter_l = 31; - if (0 == filter_l % 2) - --filter_l; /* must be odd */ - filter_l += intratio; /* unless resample_ratio=int, it must be even */ - - int BLACKSIZE = filter_l + 1; /* size of data needed for FIR */ - - if (gfc.fill_buffer_resample_init == 0) { - gfc.inbuf_old[0] = new float[BLACKSIZE]; - gfc.inbuf_old[1] = new float[BLACKSIZE]; - for (i = 0; i <= 2 * bpc; ++i) - gfc.blackfilt[i] = new float[BLACKSIZE]; - - gfc.itime[0] = 0; - gfc.itime[1] = 0; - - /* precompute blackman filter coefficients */ - for (j = 0; j <= 2 * bpc; j++) { - float sum = 0.f; - float offset = (j - bpc) / (2.f * bpc); - for (i = 0; i <= filter_l; i++) - sum += gfc.blackfilt[j][i] = blackman(i - offset, fcn, - filter_l); - for (i = 0; i <= filter_l; i++) - gfc.blackfilt[j][i] /= sum; - } - gfc.fill_buffer_resample_init = 1; - } - - float[] inbuf_old = gfc.inbuf_old[ch]; - - /* time of j'th element in inbuf = itime + j/ifreq; */ - /* time of k'th element in outbuf = j/ofreq */ - for (k = 0; k < desired_len; k++) { - double time0; - int joff; - - time0 = k * gfc.resample_ratio; /* time of k'th output sample */ - j = (int) Math.floor(time0 - gfc.itime[ch]); - - /* check if we need more input data */ - if ((filter_l + j - filter_l / 2) >= len) - break; - - /* blackman filter. by default, window centered at j+.5(filter_l%2) */ - /* but we want a window centered at time0. */ - float offset = (float) (time0 - gfc.itime[ch] - (j + .5 * (filter_l % 2))); - assert (Math.abs(offset) <= .501); - - /* find the closest precomputed window for this offset: */ - joff = (int) Math.floor((offset * 2 * bpc) + bpc + .5); - - float xvalue = 0.f; - for (i = 0; i <= filter_l; ++i) { - int j2 = i + j - filter_l / 2; - float y; - assert (j2 < len); - assert (j2 + BLACKSIZE >= 0); - y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[in_bufferPos - + j2]; - xvalue += y * gfc.blackfilt[joff][i]; - } - outbuf[outbufPos + k] = xvalue; - } - - /* k = number of samples added to outbuf */ - /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */ - - /* how many samples of input data were used: */ - num_used.num_used = Math.min(len, filter_l + j - filter_l / 2); - - /* - * adjust our input time counter. Incriment by the number of samples - * used, then normalize so that next output sample is at time 0, next - * input buffer is at time itime[ch] - */ - gfc.itime[ch] += num_used.num_used - k * gfc.resample_ratio; - - /* save the last BLACKSIZE samples into the inbuf_old buffer */ - if (num_used.num_used >= BLACKSIZE) { - for (i = 0; i < BLACKSIZE; i++) - inbuf_old[i] = inbuf[in_bufferPos + num_used.num_used + i - - BLACKSIZE]; - } else { - /* shift in num_used.num_used samples into inbuf_old */ - int n_shift = BLACKSIZE - num_used.num_used; /* - * number of samples to - * shift - */ - - /* - * shift n_shift samples by num_used.num_used, to make room for the - * num_used new samples - */ - for (i = 0; i < n_shift; ++i) - inbuf_old[i] = inbuf_old[i + num_used.num_used]; - - /* shift in the num_used.num_used samples */ - for (j = 0; i < BLACKSIZE; ++i, ++j) - inbuf_old[i] = inbuf[in_bufferPos + j]; - - assert (j == num_used.num_used); - } - return k; /* return the number samples created at the new samplerate */ - } - - /* - * copy in new samples from in_buffer into mfbuf, with resampling if - * necessary. n_in = number of samples from the input buffer that were used. - * n_out = number of samples copied into mfbuf - */ - - private void fill_buffer(final LameGlobalFlags gfp, float mfbuf[][], - final float in_buffer[][], final int in_bufferPos, - final int nsamples, final InOut io) { - final LameInternalFlags gfc = gfp.internal_flags; - - /* copy in new samples into mfbuf, with resampling if necessary */ - if ((gfc.resample_ratio < .9999) || (gfc.resample_ratio > 1.0001)) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - NumUsed numUsed = new NumUsed(); - io.n_out = fill_buffer_resample(gfp, mfbuf[ch], gfc.mf_size, - gfp.framesize, in_buffer[ch], in_bufferPos, nsamples, - numUsed, ch); - io.n_in = numUsed.num_used; - } - } else { - io.n_out = Math.min(gfp.framesize, nsamples); - io.n_in = io.n_out; - for (int i = 0; i < io.n_out; ++i) { - mfbuf[0][gfc.mf_size + i] = in_buffer[0][in_bufferPos + i]; - if (gfc.channels_out == 2) - mfbuf[1][gfc.mf_size + i] = in_buffer[1][in_bufferPos + i]; - } - } - } - - /******************************************************************** - * initialize internal params based on data in gf (globalflags struct filled - * in by calling program) - * - * OUTLINE: - * - * We first have some complex code to determine bitrate, output samplerate - * and mode. It is complicated by the fact that we allow the user to set - * some or all of these parameters, and need to determine best possible - * values for the rest of them: - * - * 1. set some CPU related flags 2. check if we are mono.mono, stereo.mono - * or stereo.stereo 3. compute bitrate and output samplerate: user may have - * set compression ratio user may have set a bitrate user may have set a - * output samplerate 4. set some options which depend on output samplerate - * 5. compute the actual compression ratio 6. set mode based on compression - * ratio - * - * The remaining code is much simpler - it just sets options based on the - * mode & compression ratio: - * - * set allow_diff_short based on mode select lowpass filter based on - * compression ratio & mode set the bitrate index, and min/max bitrates for - * VBR modes disable VBR tag if it is not appropriate initialize the - * bitstream initialize scalefac_band data set sideinfo_len (based on - * channels, CRC, out_samplerate) write an id3v2 tag into the bitstream - * write VBR tag into the bitstream set mpeg1/2 flag estimate the number of - * frames (based on a lot of data) - * - * now we set more flags: nspsytune: see code VBR modes see code CBR/ABR see - * code - * - * Finally, we set the algorithm flags based on the gfp.quality value - * lame_init_qval(gfp); - * - ********************************************************************/ - public final int lame_init_params(final LameGlobalFlags gfp) { - LameInternalFlags gfc = gfp.internal_flags; - - gfc.Class_ID = 0; - if (gfc.ATH == null) - gfc.ATH = new ATH(); - if (gfc.PSY == null) - gfc.PSY = new PSY(); - if (gfc.rgdata == null) - gfc.rgdata = new ReplayGain(); - - gfc.channels_in = gfp.num_channels; - if (gfc.channels_in == 1) - gfp.mode = MPEGMode.MONO; - gfc.channels_out = (gfp.mode == MPEGMode.MONO) ? 1 : 2; - gfc.mode_ext = Encoder.MPG_MD_MS_LR; - if (gfp.mode == MPEGMode.MONO) - gfp.force_ms = false; - /* - * don't allow forced mid/side stereo for mono output - */ - - if (gfp.VBR == VbrMode.vbr_off && gfp.VBR_mean_bitrate_kbps != 128 - && gfp.brate == 0) - gfp.brate = gfp.VBR_mean_bitrate_kbps; - - if (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_mtrh - || gfp.VBR == VbrMode.vbr_mt) { - /* these modes can handle free format condition */ - } else { - gfp.free_format = false; /* mode can't be mixed with free format */ - } - - if (gfp.VBR == VbrMode.vbr_off && gfp.brate == 0) { - /* no bitrate or compression ratio specified, use 11.025 */ - if (BitStream.EQ(gfp.compression_ratio, 0)) - gfp.compression_ratio = 11.025f; - /* - * rate to compress a CD down to exactly 128000 bps - */ - } - - /* find bitrate if user specify a compression ratio */ - if (gfp.VBR == VbrMode.vbr_off && gfp.compression_ratio > 0) { - - if (gfp.out_samplerate == 0) - gfp.out_samplerate = map2MP3Frequency((int) (0.97 * gfp.in_samplerate)); - /* - * round up with a margin of 3 % - */ - - /* - * choose a bitrate for the output samplerate which achieves - * specified compression ratio - */ - gfp.brate = (int) (gfp.out_samplerate * 16 * gfc.channels_out / (1.e3f * gfp.compression_ratio)); - - /* we need the version for the bitrate table look up */ - gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp); - - if (!gfp.free_format) /* - * for non Free Format find the nearest allowed - * bitrate - */ - gfp.brate = FindNearestBitrate(gfp.brate, gfp.version, - gfp.out_samplerate); - } - - if (gfp.out_samplerate != 0) { - if (gfp.out_samplerate < 16000) { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 8); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 64); - } else if (gfp.out_samplerate < 32000) { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 8); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 160); - } else { - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, - 32); - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, - 320); - } - } - - /****************************************************************/ - /* if a filter has not been enabled, see if we should add one: */ - /****************************************************************/ - if (gfp.lowpassfreq == 0) { - double lowpass = 16000; - - switch (gfp.VBR) { - case vbr_off: { - LowPassHighPass lh = new LowPassHighPass(); - optimum_bandwidth(lh, gfp.brate); - lowpass = lh.lowerlimit; - break; - } - case vbr_abr: { - LowPassHighPass lh = new LowPassHighPass(); - optimum_bandwidth(lh, gfp.VBR_mean_bitrate_kbps); - lowpass = lh.lowerlimit; - break; - } - case vbr_rh: { - final int x[] = { 19500, 19000, 18600, 18000, 17500, 16000, - 15600, 14900, 12500, 10000, 3950 }; - if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) { - double a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac; - lowpass = linear_int(a, b, m); - } else { - lowpass = 19500; - } - break; - } - default: { - final int x[] = { 19500, 19000, 18500, 18000, 17500, 16500, - 15500, 14500, 12500, 9500, 3950 }; - if (0 <= gfp.VBR_q && gfp.VBR_q <= 9) { - double a = x[gfp.VBR_q], b = x[gfp.VBR_q + 1], m = gfp.VBR_q_frac; - lowpass = linear_int(a, b, m); - } else { - lowpass = 19500; - } - } - } - if (gfp.mode == MPEGMode.MONO - && (gfp.VBR == VbrMode.vbr_off || gfp.VBR == VbrMode.vbr_abr)) - lowpass *= 1.5; - - gfp.lowpassfreq = (int) lowpass; - } - - if (gfp.out_samplerate == 0) { - if (2 * gfp.lowpassfreq > gfp.in_samplerate) { - gfp.lowpassfreq = gfp.in_samplerate / 2; - } - gfp.out_samplerate = optimum_samplefreq((int) gfp.lowpassfreq, - gfp.in_samplerate); - } - - gfp.lowpassfreq = Math.min(20500, gfp.lowpassfreq); - gfp.lowpassfreq = Math.min(gfp.out_samplerate / 2, gfp.lowpassfreq); - - if (gfp.VBR == VbrMode.vbr_off) { - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3f * gfp.brate); - } - if (gfp.VBR == VbrMode.vbr_abr) { - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3f * gfp.VBR_mean_bitrate_kbps); - } - - /* - * do not compute ReplayGain values and do not find the peak sample if - * we can't store them - */ - if (!gfp.bWriteVbrTag) { - gfp.findReplayGain = false; - gfp.decode_on_the_fly = false; - gfc.findPeakSample = false; - } - gfc.findReplayGain = gfp.findReplayGain; - gfc.decode_on_the_fly = gfp.decode_on_the_fly; - - if (gfc.decode_on_the_fly) - gfc.findPeakSample = true; - - if (gfc.findReplayGain) { - if (ga.InitGainAnalysis(gfc.rgdata, gfp.out_samplerate) == GainAnalysis.INIT_GAIN_ANALYSIS_ERROR) { - gfp.internal_flags = null; - return -6; - } - } - - if (gfc.decode_on_the_fly && !gfp.decode_only) { - if (gfc.hip != null) { - mpglib.hip_decode_exit(gfc.hip); - } - gfc.hip = mpglib.hip_decode_init(); - } - - gfc.mode_gr = gfp.out_samplerate <= 24000 ? 1 : 2; - /* - * Number of granules per frame - */ - gfp.framesize = 576 * gfc.mode_gr; - gfp.encoder_delay = Encoder.ENCDELAY; - - gfc.resample_ratio = (double) gfp.in_samplerate / gfp.out_samplerate; - - /** - * <PRE> - * sample freq bitrate compression ratio - * [kHz] [kbps/channel] for 16 bit input - * 44.1 56 12.6 - * 44.1 64 11.025 - * 44.1 80 8.82 - * 22.05 24 14.7 - * 22.05 32 11.025 - * 22.05 40 8.82 - * 16 16 16.0 - * 16 24 10.667 - * </PRE> - */ - /** - * <PRE> - * For VBR, take a guess at the compression_ratio. - * For example: - * - * VBR_q compression like - * - 4.4 320 kbps/44 kHz - * 0...1 5.5 256 kbps/44 kHz - * 2 7.3 192 kbps/44 kHz - * 4 8.8 160 kbps/44 kHz - * 6 11 128 kbps/44 kHz - * 9 14.7 96 kbps - * - * for lower bitrates, downsample with --resample - * </PRE> - */ - switch (gfp.VBR) { - case vbr_mt: - case vbr_rh: - case vbr_mtrh: { - /* numbers are a bit strange, but they determine the lowpass value */ - final float cmp[] = { 5.7f, 6.5f, 7.3f, 8.2f, 10f, 11.9f, 13f, 14f, - 15f, 16.5f }; - gfp.compression_ratio = cmp[gfp.VBR_q]; - } - break; - case vbr_abr: - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3f * gfp.VBR_mean_bitrate_kbps); - break; - default: - gfp.compression_ratio = gfp.out_samplerate * 16 * gfc.channels_out - / (1.e3f * gfp.brate); - break; - } - - /* - * mode = -1 (not set by user) or mode = MONO (because of only 1 input - * channel). If mode has not been set, then select J-STEREO - */ - if (gfp.mode == MPEGMode.NOT_SET) { - gfp.mode = MPEGMode.JOINT_STEREO; - } - - /* apply user driven high pass filter */ - if (gfp.highpassfreq > 0) { - gfc.highpass1 = 2.f * gfp.highpassfreq; - - if (gfp.highpasswidth >= 0) - gfc.highpass2 = 2.f * (gfp.highpassfreq + gfp.highpasswidth); - else - /* 0% above on default */ - gfc.highpass2 = (1 + 0.00f) * 2.f * gfp.highpassfreq; - - gfc.highpass1 /= gfp.out_samplerate; - gfc.highpass2 /= gfp.out_samplerate; - } else { - gfc.highpass1 = 0; - gfc.highpass2 = 0; - } - /* apply user driven low pass filter */ - if (gfp.lowpassfreq > 0) { - gfc.lowpass2 = 2.f * gfp.lowpassfreq; - if (gfp.lowpasswidth >= 0) { - gfc.lowpass1 = 2.f * (gfp.lowpassfreq - gfp.lowpasswidth); - if (gfc.lowpass1 < 0) /* has to be >= 0 */ - gfc.lowpass1 = 0; - } else { /* 0% below on default */ - gfc.lowpass1 = (1 - 0.00f) * 2.f * gfp.lowpassfreq; - } - gfc.lowpass1 /= gfp.out_samplerate; - gfc.lowpass2 /= gfp.out_samplerate; - } else { - gfc.lowpass1 = 0; - gfc.lowpass2 = 0; - } - - /**********************************************************************/ - /* compute info needed for polyphase filter (filter type==0, default) */ - /**********************************************************************/ - lame_init_params_ppflt(gfp); - - /******************************************************* - * samplerate and bitrate index - *******************************************************/ - gfc.samplerate_index = SmpFrqIndex(gfp.out_samplerate, gfp); - if (gfc.samplerate_index < 0) { - gfp.internal_flags = null; - return -1; - } - - if (gfp.VBR == VbrMode.vbr_off) { - if (gfp.free_format) { - gfc.bitrate_index = 0; - } else { - gfp.brate = FindNearestBitrate(gfp.brate, gfp.version, - gfp.out_samplerate); - gfc.bitrate_index = BitrateIndex(gfp.brate, gfp.version, - gfp.out_samplerate); - if (gfc.bitrate_index <= 0) { - gfp.internal_flags = null; - return -1; - } - } - } else { - gfc.bitrate_index = 1; - } - - /* for CBR, we will write an "info" tag. */ - - if (gfp.analysis) - gfp.bWriteVbrTag = false; - - /* some file options not allowed if output is: not specified or stdout */ - if (gfc.pinfo != null) - gfp.bWriteVbrTag = false; /* disable Xing VBR tag */ - - bs.init_bit_stream_w(gfc); - - int j = gfc.samplerate_index + (3 * gfp.version) + 6 - * (gfp.out_samplerate < 16000 ? 1 : 0); - for (int i = 0; i < Encoder.SBMAX_l + 1; i++) - gfc.scalefac_band.l[i] = qupvt.sfBandIndex[j].l[i]; - - for (int i = 0; i < Encoder.PSFB21 + 1; i++) { - final int size = (gfc.scalefac_band.l[22] - gfc.scalefac_band.l[21]) - / Encoder.PSFB21; - final int start = gfc.scalefac_band.l[21] + i * size; - gfc.scalefac_band.psfb21[i] = start; - } - gfc.scalefac_band.psfb21[Encoder.PSFB21] = 576; - - for (int i = 0; i < Encoder.SBMAX_s + 1; i++) - gfc.scalefac_band.s[i] = qupvt.sfBandIndex[j].s[i]; - - for (int i = 0; i < Encoder.PSFB12 + 1; i++) { - final int size = (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]) - / Encoder.PSFB12; - final int start = gfc.scalefac_band.s[12] + i * size; - gfc.scalefac_band.psfb12[i] = start; - } - gfc.scalefac_band.psfb12[Encoder.PSFB12] = 192; - - /* determine the mean bitrate for main data */ - if (gfp.version == 1) /* MPEG 1 */ - gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 17 : 4 + 32; - else - /* MPEG 2 */ - gfc.sideinfo_len = (gfc.channels_out == 1) ? 4 + 9 : 4 + 17; - - if (gfp.error_protection) - gfc.sideinfo_len += 2; - - lame_init_bitstream(gfp); - - gfc.Class_ID = LAME_ID; - - { - int k; - - for (k = 0; k < 19; k++) - gfc.nsPsy.pefirbuf[k] = 700 * gfc.mode_gr * gfc.channels_out; - - if (gfp.ATHtype == -1) - gfp.ATHtype = 4; - } - - assert (gfp.VBR_q <= 9); - assert (gfp.VBR_q >= 0); - - switch (gfp.VBR) { - - case vbr_mt: - gfp.VBR = VbrMode.vbr_mtrh; - //$FALL-THROUGH$ - case vbr_mtrh: { - if (gfp.useTemporal == null) { - gfp.useTemporal = false; /* off by default for this VBR mode */ - } - - p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0); - /** - * <PRE> - * The newer VBR code supports only a limited - * subset of quality levels: - * 9-5=5 are the same, uses x^3/4 quantization - * 4-0=0 are the same 5 plus best huffman divide code - * </PRE> - */ - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - if (gfp.quality < 5) - gfp.quality = 0; - if (gfp.quality > 5) - gfp.quality = 5; - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - /* - * sfb21 extra only with MPEG-1 at higher sampling rates - */ - if (gfp.experimentalY) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = (gfp.out_samplerate > 44000); - - gfc.iteration_loop = new VBRNewIterationLoop(qu); - break; - - } - case vbr_rh: { - - p.apply_preset(gfp, 500 - (gfp.VBR_q * 10), 0); - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - /* - * sfb21 extra only with MPEG-1 at higher sampling rates - */ - if (gfp.experimentalY) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = (gfp.out_samplerate > 44000); - - /* - * VBR needs at least the output of GPSYCHO, so we have to garantee - * that by setting a minimum quality level, actually level 6 does - * it. down to level 6 - */ - if (gfp.quality > 6) - gfp.quality = 6; - - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - - gfc.iteration_loop = new VBROldIterationLoop(qu); - break; - } - - default: /* cbr/abr */{ - VbrMode vbrmode; - - /* - * no sfb21 extra with CBR code - */ - gfc.sfb21_extra = false; - - if (gfp.quality < 0) - gfp.quality = LAME_DEFAULT_QUALITY; - - vbrmode = gfp.VBR; - if (vbrmode == VbrMode.vbr_off) - gfp.VBR_mean_bitrate_kbps = gfp.brate; - /* second, set parameters depending on bitrate */ - p.apply_preset(gfp, gfp.VBR_mean_bitrate_kbps, 0); - gfp.VBR = vbrmode; - - gfc.PSY.mask_adjust = gfp.maskingadjust; - gfc.PSY.mask_adjust_short = gfp.maskingadjust_short; - - if (vbrmode == VbrMode.vbr_off) { - gfc.iteration_loop = new CBRNewIterationLoop(qu); - } else { - gfc.iteration_loop = new ABRIterationLoop(qu); - } - break; - } - } - - /* initialize default values common for all modes */ - - if (gfp.VBR != VbrMode.vbr_off) { /* choose a min/max bitrate for VBR */ - /* if the user didn't specify VBR_max_bitrate: */ - gfc.VBR_min_bitrate = 1; - /* - * default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1) - */ - gfc.VBR_max_bitrate = 14; - /* - * default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1) - */ - if (gfp.out_samplerate < 16000) - gfc.VBR_max_bitrate = 8; /* default: allow 64 kbps (MPEG-2.5) */ - if (gfp.VBR_min_bitrate_kbps != 0) { - gfp.VBR_min_bitrate_kbps = FindNearestBitrate( - gfp.VBR_min_bitrate_kbps, gfp.version, - gfp.out_samplerate); - gfc.VBR_min_bitrate = BitrateIndex(gfp.VBR_min_bitrate_kbps, - gfp.version, gfp.out_samplerate); - if (gfc.VBR_min_bitrate < 0) - return -1; - } - if (gfp.VBR_max_bitrate_kbps != 0) { - gfp.VBR_max_bitrate_kbps = FindNearestBitrate( - gfp.VBR_max_bitrate_kbps, gfp.version, - gfp.out_samplerate); - gfc.VBR_max_bitrate = BitrateIndex(gfp.VBR_max_bitrate_kbps, - gfp.version, gfp.out_samplerate); - if (gfc.VBR_max_bitrate < 0) - return -1; - } - gfp.VBR_min_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate]; - gfp.VBR_max_bitrate_kbps = Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate]; - gfp.VBR_mean_bitrate_kbps = Math.min( - Tables.bitrate_table[gfp.version][gfc.VBR_max_bitrate], - gfp.VBR_mean_bitrate_kbps); - gfp.VBR_mean_bitrate_kbps = Math.max( - Tables.bitrate_table[gfp.version][gfc.VBR_min_bitrate], - gfp.VBR_mean_bitrate_kbps); - } - - /* just another daily changing developer switch */ - if (gfp.tune) { - gfc.PSY.mask_adjust += gfp.tune_value_a; - gfc.PSY.mask_adjust_short += gfp.tune_value_a; - } - - /* initialize internal qval settings */ - lame_init_qval(gfp); - - /* - * automatic ATH adjustment on - */ - if (gfp.athaa_type < 0) - gfc.ATH.useAdjust = 3; - else - gfc.ATH.useAdjust = gfp.athaa_type; - - /* initialize internal adaptive ATH settings -jd */ - gfc.ATH.aaSensitivityP = (float) Math.pow(10.0, gfp.athaa_sensitivity - / -10.0); - - if (gfp.short_blocks == null) { - gfp.short_blocks = ShortBlock.short_block_allowed; - } - - /* - * Note Jan/2003: Many hardware decoders cannot handle short blocks in - * regular stereo mode unless they are coupled (same type in both - * channels) it is a rare event (1 frame per min. or so) that LAME would - * use uncoupled short blocks, so lets turn them off until we decide how - * to handle this. No other encoders allow uncoupled short blocks, even - * though it is in the standard. - */ - /* - * rh 20040217: coupling makes no sense for mono and dual-mono streams - */ - if (gfp.short_blocks == ShortBlock.short_block_allowed - && (gfp.mode == MPEGMode.JOINT_STEREO || gfp.mode == MPEGMode.STEREO)) { - gfp.short_blocks = ShortBlock.short_block_coupled; - } - - if (gfp.quant_comp < 0) - gfp.quant_comp = 1; - if (gfp.quant_comp_short < 0) - gfp.quant_comp_short = 0; - - if (gfp.msfix < 0) - gfp.msfix = 0; - - /* select psychoacoustic model */ - gfp.exp_nspsytune = gfp.exp_nspsytune | 1; - - if (gfp.internal_flags.nsPsy.attackthre < 0) - gfp.internal_flags.nsPsy.attackthre = PsyModel.NSATTACKTHRE; - if (gfp.internal_flags.nsPsy.attackthre_s < 0) - gfp.internal_flags.nsPsy.attackthre_s = PsyModel.NSATTACKTHRE_S; - - if (gfp.scale < 0) - gfp.scale = 1; - - if (gfp.ATHtype < 0) - gfp.ATHtype = 4; - - if (gfp.ATHcurve < 0) - gfp.ATHcurve = 4; - - if (gfp.athaa_loudapprox < 0) - gfp.athaa_loudapprox = 2; - - if (gfp.interChRatio < 0) - gfp.interChRatio = 0; - - if (gfp.useTemporal == null) - gfp.useTemporal = true; /* on by default */ - - /* - * padding method as described in - * "MPEG-Layer3 / Bitstream Syntax and Decoding" by Martin Sieler, Ralph - * Sperschneider - * - * note: there is no padding for the very first frame - * - * Robert Hegemann 2000-06-22 - */ - gfc.slot_lag = gfc.frac_SpF = 0; - if (gfp.VBR == VbrMode.vbr_off) - gfc.slot_lag = gfc.frac_SpF = (int) (((gfp.version + 1) * 72000L * gfp.brate) % gfp.out_samplerate); - - qupvt.iteration_init(gfp); - psy.psymodel_init(gfp); - - return 0; - } - - /** - * Prints some selected information about the coding parameters via the - * macro command MSGF(), which is currently mapped to lame_errorf (reports - * via a error function?), which is a printf-like function for <stderr>. - */ - public final void lame_print_config(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - double out_samplerate = gfp.out_samplerate; - double in_samplerate = gfp.out_samplerate * gfc.resample_ratio; - - System.out.printf("LAME %s %s (%s)\n", ver.getLameVersion(), - ver.getLameOsBitness(), ver.getLameUrl()); - - if (gfp.num_channels == 2 && gfc.channels_out == 1 /* mono */) { - System.out - .printf("Autoconverting from stereo to mono. Setting encoding to mono mode.\n"); - } - - if (BitStream.NEQ((float) gfc.resample_ratio, 1.f)) { - System.out.printf("Resampling: input %g kHz output %g kHz\n", - 1.e-3 * in_samplerate, 1.e-3 * out_samplerate); - } - - if (gfc.highpass2 > 0.) { - System.out - .printf("Using polyphase highpass filter, transition band: %5.0f Hz - %5.0f Hz\n", - 0.5 * gfc.highpass1 * out_samplerate, 0.5 - * gfc.highpass2 * out_samplerate); - } - if (0. < gfc.lowpass1 || 0. < gfc.lowpass2) { - System.out - .printf("Using polyphase lowpass filter, transition band: %5.0f Hz - %5.0f Hz\n", - 0.5 * gfc.lowpass1 * out_samplerate, 0.5 - * gfc.lowpass2 * out_samplerate); - } else { - System.out.printf("polyphase lowpass filter disabled\n"); - } - - if (gfp.free_format) { - System.err - .printf("Warning: many decoders cannot handle free format bitstreams\n"); - if (gfp.brate > 320) { - System.err - .printf("Warning: many decoders cannot handle free format bitrates >320 kbps (see documentation)\n"); - } - } - } - - /** - * rh: some pretty printing is very welcome at this point! so, if someone is - * willing to do so, please do it! add more, if you see more... - */ - public final void lame_print_internals(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - - /* - * compiler/processor optimizations, operational, etc. - */ - System.err.printf("\nmisc:\n\n"); - - System.err.printf("\tscaling: %g\n", gfp.scale); - System.err.printf("\tch0 (left) scaling: %g\n", gfp.scale_left); - System.err.printf("\tch1 (right) scaling: %g\n", gfp.scale_right); - String pc; - switch (gfc.use_best_huffman) { - default: - pc = "normal"; - break; - case 1: - pc = "best (outside loop)"; - break; - case 2: - pc = "best (inside loop, slow)"; - break; - } - System.err.printf("\thuffman search: %s\n", pc); - System.err.printf("\texperimental Y=%d\n", gfp.experimentalY); - System.err.printf("\t...\n"); - - /* - * everything controlling the stream format - */ - System.err.printf("\nstream format:\n\n"); - switch (gfp.version) { - case 0: - pc = "2.5"; - break; - case 1: - pc = "1"; - break; - case 2: - pc = "2"; - break; - default: - pc = "?"; - break; - } - System.err.printf("\tMPEG-%s Layer 3\n", pc); - switch (gfp.mode) { - case JOINT_STEREO: - pc = "joint stereo"; - break; - case STEREO: - pc = "stereo"; - break; - case DUAL_CHANNEL: - pc = "dual channel"; - break; - case MONO: - pc = "mono"; - break; - case NOT_SET: - pc = "not set (error)"; - break; - default: - pc = "unknown (error)"; - break; - } - System.err.printf("\t%d channel - %s\n", gfc.channels_out, pc); - - switch (gfp.VBR) { - case vbr_off: - pc = "off"; - break; - default: - pc = "all"; - break; - } - System.err.printf("\tpadding: %s\n", pc); - - if (VbrMode.vbr_default == gfp.VBR) - pc = "(default)"; - else if (gfp.free_format) - pc = "(free format)"; - else - pc = ""; - switch (gfp.VBR) { - case vbr_off: - System.err.printf("\tconstant bitrate - CBR %s\n", pc); - break; - case vbr_abr: - System.err.printf("\tvariable bitrate - ABR %s\n", pc); - break; - case vbr_rh: - System.err.printf("\tvariable bitrate - VBR rh %s\n", pc); - break; - case vbr_mt: - System.err.printf("\tvariable bitrate - VBR mt %s\n", pc); - break; - case vbr_mtrh: - System.err.printf("\tvariable bitrate - VBR mtrh %s\n", pc); - break; - default: - System.err.printf("\t ?? oops, some new one ?? \n"); - break; - } - if (gfp.bWriteVbrTag) { - System.err.printf("\tusing LAME Tag\n"); - } - System.err.printf("\t...\n"); - - /* - * everything controlling psychoacoustic settings, like ATH, etc. - */ - System.err.printf("\npsychoacoustic:\n\n"); - - switch (gfp.short_blocks) { - default: - pc = "?"; - break; - case short_block_allowed: - pc = "allowed"; - break; - case short_block_coupled: - pc = "channel coupled"; - break; - case short_block_dispensed: - pc = "dispensed"; - break; - case short_block_forced: - pc = "forced"; - break; - } - System.err.printf("\tusing short blocks: %s\n", pc); - System.err.printf("\tsubblock gain: %d\n", gfc.subblock_gain); - System.err.printf("\tadjust masking: %g dB\n", gfc.PSY.mask_adjust); - System.err.printf("\tadjust masking short: %g dB\n", - gfc.PSY.mask_adjust_short); - System.err.printf("\tquantization comparison: %d\n", gfp.quant_comp); - System.err.printf("\t ^ comparison short blocks: %d\n", - gfp.quant_comp_short); - System.err.printf("\tnoise shaping: %d\n", gfc.noise_shaping); - System.err.printf("\t ^ amplification: %d\n", gfc.noise_shaping_amp); - System.err.printf("\t ^ stopping: %d\n", gfc.noise_shaping_stop); - - pc = "using"; - if (gfp.ATHshort) - pc = "the only masking for short blocks"; - if (gfp.ATHonly) - pc = "the only masking"; - if (gfp.noATH) - pc = "not used"; - System.err.printf("\tATH: %s\n", pc); - System.err.printf("\t ^ type: %d\n", gfp.ATHtype); - System.err.printf("\t ^ shape: %g%s\n", gfp.ATHcurve, - " (only for type 4)"); - System.err.printf("\t ^ level adjustement: %g\n", gfp.ATHlower); - System.err.printf("\t ^ adjust type: %d\n", gfc.ATH.useAdjust); - System.err.printf("\t ^ adjust sensitivity power: %f\n", - gfc.ATH.aaSensitivityP); - System.err.printf("\t ^ adapt threshold type: %d\n", - gfp.athaa_loudapprox); - - System.err.printf("\texperimental psy tunings by Naoki Shibata\n"); - System.err - .printf("\t adjust masking bass=%g dB, alto=%g dB, treble=%g dB, sfb21=%g dB\n", - 10 * Math.log10(gfc.nsPsy.longfact[0]), - 10 * Math.log10(gfc.nsPsy.longfact[7]), - 10 * Math.log10(gfc.nsPsy.longfact[14]), - 10 * Math.log10(gfc.nsPsy.longfact[21])); - - pc = gfp.useTemporal ? "yes" : "no"; - System.err.printf("\tusing temporal masking effect: %s\n", pc); - System.err.printf("\tinterchannel masking ratio: %g\n", - gfp.interChRatio); - System.err.printf("\t...\n"); - - /* - * that's all ? - */ - System.err.printf("\n"); - } - - /** - * routine to feed exactly one frame (gfp.framesize) worth of data to the - * encoding engine. All buffering, resampling, etc, handled by calling - * program. - */ - private int lame_encode_frame(final LameGlobalFlags gfp, - final float inbuf_l[], final float inbuf_r[], final byte[] mp3buf, - final int mp3bufPos, final int mp3buf_size) { - int ret = enc.lame_encode_mp3_frame(gfp, inbuf_l, inbuf_r, mp3buf, - mp3bufPos, mp3buf_size); - gfp.frameNum++; - return ret; - } - - private void update_inbuffer_size(final LameInternalFlags gfc, - final int nsamples) { - if (gfc.in_buffer_0 == null || gfc.in_buffer_nsamples < nsamples) { - gfc.in_buffer_0 = new float[nsamples]; - gfc.in_buffer_1 = new float[nsamples]; - gfc.in_buffer_nsamples = nsamples; - } - } - - private int calcNeeded(final LameGlobalFlags gfp) { - int mf_needed = Encoder.BLKSIZE + gfp.framesize - Encoder.FFTOFFSET; - /* - * amount needed for FFT - */ - mf_needed = Math.max(mf_needed, 512 + gfp.framesize - 32); - assert (LameInternalFlags.MFSIZE >= mf_needed); - - return mf_needed; - } - - protected static class InOut { - int n_in; - int n_out; - } - - /** - * <PRE> - * THE MAIN LAME ENCODING INTERFACE - * mt 3/00 - * - * input pcm data, output (maybe) mp3 frames. - * This routine handles all buffering, resampling and filtering for you. - * The required mp3buffer_size can be computed from num_samples, - * samplerate and encoding rate, but here is a worst case estimate: - * - * mp3buffer_size in bytes = 1.25*num_samples + 7200 - * - * return code = number of bytes output in mp3buffer. can be 0 - * - * NOTE: this routine uses LAME's internal PCM data representation, - * 'sample_t'. It should not be used by any application. - * applications should use lame_encode_buffer(), - * lame_encode_buffer_float() - * lame_encode_buffer_int() - * etc... depending on what type of data they are working with. - * </PRE> - */ - private int lame_encode_buffer_sample(final LameGlobalFlags gfp, - final float buffer_l[], final float buffer_r[], int nsamples, - final byte[] mp3buf, int mp3bufPos, final int mp3buf_size) { - final LameInternalFlags gfc = gfp.internal_flags; - int mp3size = 0, ret, i, ch, mf_needed; - int mp3out; - float mfbuf[][] = new float[2][]; - float in_buffer[][] = new float[2][]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - /* copy out any tags that may have been written into bitstream */ - mp3out = bs.copy_buffer(gfc, mp3buf, mp3bufPos, mp3buf_size, 0); - if (mp3out < 0) - return mp3out; /* not enough buffer space */ - mp3bufPos += mp3out; - mp3size += mp3out; - - in_buffer[0] = buffer_l; - in_buffer[1] = buffer_r; - - /* Apply user defined re-scaling */ - - /* user selected scaling of the samples */ - if (BitStream.NEQ(gfp.scale, 0) && BitStream.NEQ(gfp.scale, 1.0f)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] *= gfp.scale; - if (gfc.channels_out == 2) - in_buffer[1][i] *= gfp.scale; - } - } - - /* user selected scaling of the channel 0 (left) samples */ - if (BitStream.NEQ(gfp.scale_left, 0) - && BitStream.NEQ(gfp.scale_left, 1.0f)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] *= gfp.scale_left; - } - } - - /* user selected scaling of the channel 1 (right) samples */ - if (BitStream.NEQ(gfp.scale_right, 0) - && BitStream.NEQ(gfp.scale_right, 1.0f)) { - for (i = 0; i < nsamples; ++i) { - in_buffer[1][i] *= gfp.scale_right; - } - } - - /* Downsample to Mono if 2 channels in and 1 channel out */ - if (gfp.num_channels == 2 && gfc.channels_out == 1) { - for (i = 0; i < nsamples; ++i) { - in_buffer[0][i] = 0.5f * ((float) in_buffer[0][i] + in_buffer[1][i]); - in_buffer[1][i] = 0.0f; - } - } - - mf_needed = calcNeeded(gfp); - - mfbuf[0] = gfc.mfbuf[0]; - mfbuf[1] = gfc.mfbuf[1]; - - int in_bufferPos = 0; - while (nsamples > 0) { - final float in_buffer_ptr[][] = new float[2][]; - int n_in = 0; /* number of input samples processed with fill_buffer */ - int n_out = 0; /* number of samples output with fill_buffer */ - /* n_in <> n_out if we are resampling */ - - in_buffer_ptr[0] = in_buffer[0]; - in_buffer_ptr[1] = in_buffer[1]; - /* copy in new samples into mfbuf, with resampling */ - InOut inOut = new InOut(); - fill_buffer(gfp, mfbuf, in_buffer_ptr, in_bufferPos, nsamples, - inOut); - n_in = inOut.n_in; - n_out = inOut.n_out; - - /* compute ReplayGain of resampled input if requested */ - if (gfc.findReplayGain && !gfc.decode_on_the_fly) - if (ga.AnalyzeSamples(gfc.rgdata, mfbuf[0], gfc.mf_size, - mfbuf[1], gfc.mf_size, n_out, gfc.channels_out) == GainAnalysis.GAIN_ANALYSIS_ERROR) - return -6; - - /* update in_buffer counters */ - nsamples -= n_in; - in_bufferPos += n_in; - if (gfc.channels_out == 2) - ;// in_bufferPos += n_in; - - /* update mfbuf[] counters */ - gfc.mf_size += n_out; - assert (gfc.mf_size <= LameInternalFlags.MFSIZE); - - /* - * lame_encode_flush may have set gfc.mf_sample_to_encode to 0 so we - * have to reinitialize it here when that happened. - */ - if (gfc.mf_samples_to_encode < 1) { - gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY; - } - gfc.mf_samples_to_encode += n_out; - - if (gfc.mf_size >= mf_needed) { - /* encode the frame. */ - /* mp3buf = pointer to current location in buffer */ - /* mp3buf_size = size of original mp3 output buffer */ - /* = 0 if we should not worry about the */ - /* buffer size because calling program is */ - /* to lazy to compute it */ - /* mp3size = size of data written to buffer so far */ - /* mp3buf_size-mp3size = amount of space avalable */ - - int buf_size = mp3buf_size - mp3size; - if (mp3buf_size == 0) - buf_size = 0; - - ret = lame_encode_frame(gfp, mfbuf[0], mfbuf[1], mp3buf, - mp3bufPos, buf_size); - - if (ret < 0) - return ret; - mp3bufPos += ret; - mp3size += ret; - - /* shift out old samples */ - gfc.mf_size -= gfp.framesize; - gfc.mf_samples_to_encode -= gfp.framesize; - for (ch = 0; ch < gfc.channels_out; ch++) - for (i = 0; i < gfc.mf_size; i++) - mfbuf[ch][i] = mfbuf[ch][i + gfp.framesize]; - } - } - assert (nsamples == 0); - - return mp3size; - } - - private int lame_encode_buffer(final LameGlobalFlags gfp, - final short buffer_l[], final short buffer_r[], final int nsamples, - final byte[] mp3buf, final int mp3bufPos, final int mp3buf_size) { - final LameInternalFlags gfc = gfp.internal_flags; - float in_buffer[][] = new float[2][]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - update_inbuffer_size(gfc, nsamples); - - in_buffer[0] = gfc.in_buffer_0; - in_buffer[1] = gfc.in_buffer_1; - - /* make a copy of input buffer, changing type to sample_t */ - for (int i = 0; i < nsamples; i++) { - in_buffer[0][i] = buffer_l[i]; - if (gfc.channels_in > 1) - in_buffer[1][i] = buffer_r[i]; - } - - return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1], - nsamples, mp3buf, mp3bufPos, mp3buf_size); - } - - public int lame_encode_buffer_int(final LameGlobalFlags gfp, - final int buffer_l[], final int buffer_r[], final int nsamples, - byte[] mp3buf, int mp3bufPos, final int mp3buf_size) { - final LameInternalFlags gfc = gfp.internal_flags; - float[][] in_buffer = new float[2][]; - - if (gfc.Class_ID != LAME_ID) - return -3; - - if (nsamples == 0) - return 0; - - update_inbuffer_size(gfc, nsamples); - - in_buffer[0] = gfc.in_buffer_0; - in_buffer[1] = gfc.in_buffer_1; - - /* make a copy of input buffer, changing type to sample_t */ - for (int i = 0; i < nsamples; i++) { - /* internal code expects +/- 32768.0 */ - in_buffer[0][i] = buffer_l[i]; - if (gfc.channels_in > 1) - in_buffer[1][i] = buffer_r[i]; - } - - return lame_encode_buffer_sample(gfp, in_buffer[0], in_buffer[1], - nsamples, mp3buf, mp3bufPos, mp3buf_size); - } - - /** - * Flush mp3 buffer, pad with ancillary data so last frame is complete. - * Reset reservoir size to 0 but keep all PCM samples and MDCT data in - * memory This option is used to break a large file into several mp3 files - * that when concatenated together will decode with no gaps Because we set - * the reservoir=0, they will also decode seperately with no errors. - */ - public final int lame_encode_flush_nogap(final LameGlobalFlags gfp, - final byte[] mp3buffer, final int mp3buffer_size) { - final LameInternalFlags gfc = gfp.internal_flags; - bs.flush_bitstream(gfp); - return bs.copy_buffer(gfc, mp3buffer, 0, mp3buffer_size, 1); - } - - /* - * called by lame_init_params. You can also call this after flush_nogap if - * you want to write new id3v2 and Xing VBR tags into the bitstream - */ - public final void lame_init_bitstream(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - gfp.frameNum = 0; - - if (gfp.write_id3tag_automatic) { - id3.id3tag_write_v2(gfp); - } - /* initialize histogram data optionally used by frontend */ - - gfc.bitrate_stereoMode_Hist = new int[16][4 + 1]; - gfc.bitrate_blockType_Hist = new int[16][4 + 1 + 1]; - - gfc.PeakSample = 0.0f; - - /* Write initial VBR Header to bitstream and init VBR data */ - if (gfp.bWriteVbrTag) - vbr.InitVbrTag(gfp); - } - - /** - * flush internal PCM sample buffers, then mp3 buffers then write id3 v1 - * tags into bitstream. - */ - public final int lame_encode_flush(final LameGlobalFlags gfp, - final byte[] mp3buffer, int mp3bufferPos, final int mp3buffer_size) { - final LameInternalFlags gfc = gfp.internal_flags; - short buffer[][] = new short[2][1152]; - int imp3 = 0, mp3count, mp3buffer_size_remaining; - - /* - * we always add POSTDELAY=288 padding to make sure granule with real - * data can be complety decoded (because of 50% overlap with next - * granule - */ - int end_padding; - int frames_left; - int samples_to_encode = gfc.mf_samples_to_encode - Encoder.POSTDELAY; - int mf_needed = calcNeeded(gfp); - - /* Was flush already called? */ - if (gfc.mf_samples_to_encode < 1) { - return 0; - } - mp3count = 0; - - if (gfp.in_samplerate != gfp.out_samplerate) { - /* - * delay due to resampling; needs to be fixed, if resampling code - * gets changed - */ - samples_to_encode += 16. * gfp.out_samplerate / gfp.in_samplerate; - } - end_padding = gfp.framesize - (samples_to_encode % gfp.framesize); - if (end_padding < 576) - end_padding += gfp.framesize; - gfp.encoder_padding = end_padding; - - frames_left = (samples_to_encode + end_padding) / gfp.framesize; - - /* - * send in a frame of 0 padding until all internal sample buffers are - * flushed - */ - while (frames_left > 0 && imp3 >= 0) { - int bunch = mf_needed - gfc.mf_size; - int frame_num = gfp.frameNum; - - bunch *= gfp.in_samplerate; - bunch /= gfp.out_samplerate; - if (bunch > 1152) - bunch = 1152; - if (bunch < 1) - bunch = 1; - - mp3buffer_size_remaining = mp3buffer_size - mp3count; - - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - imp3 = lame_encode_buffer(gfp, buffer[0], buffer[1], bunch, - mp3buffer, mp3bufferPos, mp3buffer_size_remaining); - - mp3bufferPos += imp3; - mp3count += imp3; - frames_left -= (frame_num != gfp.frameNum) ? 1 : 0; - } - /* - * Set gfc.mf_samples_to_encode to 0, so we may detect and break loops - * calling it more than once in a row. - */ - gfc.mf_samples_to_encode = 0; - - if (imp3 < 0) { - /* some type of fatal error */ - return imp3; - } - - mp3buffer_size_remaining = mp3buffer_size - mp3count; - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - /* mp3 related stuff. bit buffer might still contain some mp3 data */ - bs.flush_bitstream(gfp); - imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos, - mp3buffer_size_remaining, 1); - if (imp3 < 0) { - /* some type of fatal error */ - return imp3; - } - mp3bufferPos += imp3; - mp3count += imp3; - mp3buffer_size_remaining = mp3buffer_size - mp3count; - /* if user specifed buffer size = 0, dont check size */ - if (mp3buffer_size == 0) - mp3buffer_size_remaining = 0; - - if (gfp.write_id3tag_automatic) { - /* write a id3 tag to the bitstream */ - id3.id3tag_write_v1(gfp); - - imp3 = bs.copy_buffer(gfc, mp3buffer, mp3bufferPos, - mp3buffer_size_remaining, 0); - - if (imp3 < 0) { - return imp3; - } - mp3count += imp3; - } - return mp3count; - } - - /** - * frees internal buffers - */ - public final int lame_close(final LameGlobalFlags gfp) { - int ret = 0; - if (gfp != null && gfp.class_id == LAME_ID) { - final LameInternalFlags gfc = gfp.internal_flags; - gfp.class_id = 0; - if (null == gfc || gfc.Class_ID != LAME_ID) { - ret = -3; - } - gfc.Class_ID = 0; - gfp.internal_flags = null; - gfp.lame_allocated_gfp = 0; - } - return ret; - } - - private int lame_init_old(final LameGlobalFlags gfp) { - LameInternalFlags gfc; - - gfp.class_id = LAME_ID; - - gfc = gfp.internal_flags = new LameInternalFlags(); - - /* Global flags. set defaults here for non-zero values */ - /* see lame.h for description */ - /* - * set integer values to -1 to mean that LAME will compute the best - * value, UNLESS the calling program as set it (and the value is no - * longer -1) - */ - - gfp.mode = MPEGMode.NOT_SET; - gfp.original = 1; - gfp.in_samplerate = 44100; - gfp.num_channels = 2; - gfp.num_samples = -1; - - gfp.bWriteVbrTag = true; - gfp.quality = -1; - gfp.short_blocks = null; - gfc.subblock_gain = -1; - - gfp.lowpassfreq = 0; - gfp.highpassfreq = 0; - gfp.lowpasswidth = -1; - gfp.highpasswidth = -1; - - gfp.VBR = VbrMode.vbr_off; - gfp.VBR_q = 4; - gfp.ATHcurve = -1; - gfp.VBR_mean_bitrate_kbps = 128; - gfp.VBR_min_bitrate_kbps = 0; - gfp.VBR_max_bitrate_kbps = 0; - gfp.VBR_hard_min = 0; - gfc.VBR_min_bitrate = 1; /* not 0 ????? */ - gfc.VBR_max_bitrate = 13; /* not 14 ????? */ - - gfp.quant_comp = -1; - gfp.quant_comp_short = -1; - - gfp.msfix = -1; - - gfc.resample_ratio = 1; - - gfc.OldValue[0] = 180; - gfc.OldValue[1] = 180; - gfc.CurrentStep[0] = 4; - gfc.CurrentStep[1] = 4; - gfc.masking_lower = 1; - gfc.nsPsy.attackthre = -1; - gfc.nsPsy.attackthre_s = -1; - - gfp.scale = -1; - - gfp.athaa_type = -1; - gfp.ATHtype = -1; /* default = -1 = set in lame_init_params */ - gfp.athaa_loudapprox = -1; /* 1 = flat loudness approx. (total energy) */ - /* 2 = equal loudness curve */ - gfp.athaa_sensitivity = 0.0f; /* no offset */ - gfp.useTemporal = null; - gfp.interChRatio = -1; - - /* - * The reason for int mf_samples_to_encode = ENCDELAY + POSTDELAY; - * ENCDELAY = internal encoder delay. And then we have to add - * POSTDELAY=288 because of the 50% MDCT overlap. A 576 MDCT granule - * decodes to 1152 samples. To synthesize the 576 samples centered under - * this granule we need the previous granule for the first 288 samples - * (no problem), and the next granule for the next 288 samples (not - * possible if this is last granule). So we need to pad with 288 samples - * to make sure we can encode the 576 samples we are interested in. - */ - gfc.mf_samples_to_encode = Encoder.ENCDELAY + Encoder.POSTDELAY; - gfp.encoder_padding = 0; - gfc.mf_size = Encoder.ENCDELAY - Encoder.MDCTDELAY; - /* - * we pad input with this many 0's - */ - - gfp.findReplayGain = false; - gfp.decode_on_the_fly = false; - - gfc.decode_on_the_fly = false; - gfc.findReplayGain = false; - gfc.findPeakSample = false; - - gfc.RadioGain = 0; - gfc.AudiophileGain = 0; - gfc.noclipGainChange = 0; - gfc.noclipScale = -1.0f; - - gfp.preset = 0; - - gfp.write_id3tag_automatic = true; - return 0; - } - - public final LameGlobalFlags lame_init() { - LameGlobalFlags gfp = new LameGlobalFlags(); - - int ret = lame_init_old(gfp); - if (ret != 0) { - return null; - } - - gfp.lame_allocated_gfp = 1; - return gfp; - } - - /*********************************************************************** - * - * some simple statistics - * - * Robert Hegemann 2000-10-11 - * - ***********************************************************************/ - - /** - * <PRE> - * histogram of used bitrate indexes: - * One has to weight them to calculate the average bitrate in kbps - * - * bitrate indices: - * there are 14 possible bitrate indices, 0 has the special meaning - * "free format" which is not possible to mix with VBR and 15 is forbidden - * anyway. - * - * stereo modes: - * 0: LR number of left-right encoded frames - * 1: LR-I number of left-right and intensity encoded frames - * 2: MS number of mid-side encoded frames - * 3: MS-I number of mid-side and intensity encoded frames - * - * 4: number of encoded frames - * </PRE> - */ - public final void lame_bitrate_kbps(final LameGlobalFlags gfp, - final int bitrate_kbps[]) { - final LameInternalFlags gfc; - - if (null == bitrate_kbps) - return; - if (null == gfp) - return; - gfc = gfp.internal_flags; - if (null == gfc) - return; - - if (gfp.free_format) { - for (int i = 0; i < 14; i++) - bitrate_kbps[i] = -1; - bitrate_kbps[0] = gfp.brate; - } else { - for (int i = 0; i < 14; i++) - bitrate_kbps[i] = Tables.bitrate_table[gfp.version][i + 1]; - } - } - - public final void lame_bitrate_hist(final LameGlobalFlags gfp, - final int bitrate_count[]) { - - if (null == bitrate_count) - return; - if (null == gfp) - return; - final LameInternalFlags gfc = gfp.internal_flags; - if (null == gfc) - return; - - if (gfp.free_format) { - for (int i = 0; i < 14; i++) - bitrate_count[i] = 0; - bitrate_count[0] = gfc.bitrate_stereoMode_Hist[0][4]; - } else { - for (int i = 0; i < 14; i++) - bitrate_count[i] = gfc.bitrate_stereoMode_Hist[i + 1][4]; - } - } - - public final void lame_stereo_mode_hist(final LameGlobalFlags gfp, - final int stmode_count[]) { - if (null == stmode_count) - return; - if (null == gfp) - return; - final LameInternalFlags gfc = gfp.internal_flags; - if (null == gfc) - return; - - for (int i = 0; i < 4; i++) { - stmode_count[i] = gfc.bitrate_stereoMode_Hist[15][i]; - } - } - - public final void lame_bitrate_stereo_mode_hist(final LameGlobalFlags gfp, - final int bitrate_stmode_count[][]) { - if (null == bitrate_stmode_count) - return; - if (null == gfp) - return; - final LameInternalFlags gfc = gfp.internal_flags; - if (null == gfc) - return; - - if (gfp.free_format) { - for (int j = 0; j < 14; j++) - for (int i = 0; i < 4; i++) - bitrate_stmode_count[j][i] = 0; - for (int i = 0; i < 4; i++) - bitrate_stmode_count[0][i] = gfc.bitrate_stereoMode_Hist[0][i]; - } else { - for (int j = 0; j < 14; j++) - for (int i = 0; i < 4; i++) - bitrate_stmode_count[j][i] = gfc.bitrate_stereoMode_Hist[j + 1][i]; - } - } - - public final void lame_block_type_hist(final LameGlobalFlags gfp, - final int btype_count[]) { - if (null == btype_count) - return; - if (null == gfp) - return; - final LameInternalFlags gfc = gfp.internal_flags; - if (null == gfc) - return; - - for (int i = 0; i < 6; ++i) { - btype_count[i] = gfc.bitrate_blockType_Hist[15][i]; - } - } - - public final void lame_bitrate_block_type_hist(final LameGlobalFlags gfp, - final int bitrate_btype_count[][]) { - if (null == bitrate_btype_count) - return; - if (null == gfp) - return; - final LameInternalFlags gfc = gfp.internal_flags; - if (null == gfc) - return; - - if (gfp.free_format) { - for (int j = 0; j < 14; ++j) - for (int i = 0; i < 6; ++i) - bitrate_btype_count[j][i] = 0; - for (int i = 0; i < 6; ++i) - bitrate_btype_count[0][i] = gfc.bitrate_blockType_Hist[0][i]; - } else { - for (int j = 0; j < 14; ++j) - for (int i = 0; i < 6; ++i) - bitrate_btype_count[j][i] = gfc.bitrate_blockType_Hist[j + 1][i]; - } - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameGlobalFlags.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameGlobalFlags.java deleted file mode 100644 index 975e7e30a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameGlobalFlags.java +++ /dev/null @@ -1,275 +0,0 @@ -package mp3; - -/** - * Control Parameters set by User. These parameters are here for backwards - * compatibility with the old, non-shared lib API. Please use the - * lame_set_variablename() functions below - * - * @author Ken - * - */ -public class LameGlobalFlags { - - public long class_id; - - /* input description */ - - /** - * number of samples. default=-1 - */ - public int num_samples; - /** - * input number of channels. default=2 - */ - public int num_channels; - /** - * input_samp_rate in Hz. default=44.1 kHz - */ - public int in_samplerate; - /** - * output_samp_rate. default: LAME picks best value at least not used for - * MP3 decoding: Remember 44.1 kHz MP3s and AC97 - */ - public int out_samplerate; - /** - * scale input by this amount before encoding at least not used for MP3 - * decoding - */ - public float scale; - /** - * scale input of channel 0 (left) by this amount before encoding - */ - public float scale_left; - /** - * scale input of channel 1 (right) by this amount before encoding - */ - public float scale_right; - - /* general control params */ - /** - * collect data for a MP3 frame analyzer? - */ - public boolean analysis; - /** - * add Xing VBR tag? - */ - public boolean bWriteVbrTag; - /** - * use lame/mpglib to convert mp3 to wav - */ - public boolean decode_only; - /** - * quality setting 0=best, 9=worst default=5 - */ - public int quality; - /** - * see enum default = LAME picks best value - */ - public MPEGMode mode = MPEGMode.STEREO; - /** - * force M/S mode. requires mode=1 - */ - public boolean force_ms; - /** - * use free format? default=0 - */ - public boolean free_format; - /** - * find the RG value? default=0 - */ - public boolean findReplayGain; - /** - * decode on the fly? default=0 - */ - public boolean decode_on_the_fly; - /** - * 1 (default) writes ID3 tags, 0 not - */ - public boolean write_id3tag_automatic; - - /* - * set either brate>0 or compression_ratio>0, LAME will compute the value of - * the variable not set. Default is compression_ratio = 11.025 - */ - /** - * bitrate - */ - public int brate; - /** - * sizeof(wav file)/sizeof(mp3 file) - */ - public float compression_ratio; - - /* frame params */ - /** - * mark as copyright. default=0 - */ - public int copyright; - /** - * mark as original. default=1 - */ - public int original; - /** - * the MP3 'private extension' bit. Meaningless - */ - public int extension; - /** - * Input PCM is emphased PCM (for instance from one of the rarely emphased - * CDs), it is STRONGLY not recommended to use this, because psycho does not - * take it into account, and last but not least many decoders don't care - * about these bits - */ - public int emphasis; - /** - * use 2 bytes per frame for a CRC checksum. default=0 - */ - public boolean error_protection; - /** - * enforce ISO spec as much as possible - */ - public boolean strict_ISO; - - /** - * use bit reservoir? - */ - public boolean disable_reservoir; - - /* quantization/noise shaping */ - public int quant_comp; - public int quant_comp_short; - public boolean experimentalY; - public int experimentalZ; - public int exp_nspsytune; - - public int preset; - - /* VBR control */ - public VbrMode VBR; - /** - * Range [0,...,1[ - */ - public float VBR_q_frac; - /** - * Range [0,...,9] - */ - public int VBR_q; - public int VBR_mean_bitrate_kbps; - public int VBR_min_bitrate_kbps; - public int VBR_max_bitrate_kbps; - /** - * strictly enforce VBR_min_bitrate normaly, it will be violated for analog - * silence - */ - public int VBR_hard_min; - - /* resampling and filtering */ - - /** - * freq in Hz. 0=lame choses. -1=no filter - */ - public int lowpassfreq; - /** - * freq in Hz. 0=lame choses. -1=no filter - */ - public int highpassfreq; - /** - * freq width of filter, in Hz (default=15%) - */ - public int lowpasswidth; - /** - * freq width of filter, in Hz (default=15%) - */ - public int highpasswidth; - - /* - * psycho acoustics and other arguments which you should not change unless - * you know what you are doing - */ - - public float maskingadjust; - public float maskingadjust_short; - /** - * only use ATH - */ - public boolean ATHonly; - /** - * only use ATH for short blocks - */ - public boolean ATHshort; - /** - * disable ATH - */ - public boolean noATH; - /** - * select ATH formula - */ - public int ATHtype; - /** - * change ATH formula 4 shape - */ - public float ATHcurve; - /** - * lower ATH by this many db - */ - public float ATHlower; - /** - * select ATH auto-adjust scheme - */ - public int athaa_type; - /** - * select ATH auto-adjust loudness calc - */ - public int athaa_loudapprox; - /** - * dB, tune active region of auto-level - */ - public float athaa_sensitivity; - public ShortBlock short_blocks; - /** - * use temporal masking effect - */ - public Boolean useTemporal; - public float interChRatio; - /** - * Naoki's adjustment of Mid/Side maskings - */ - public float msfix; - - /** - * 0 off, 1 on - */ - public boolean tune; - /** - * used to pass values for debugging and stuff - */ - public float tune_value_a; - - /************************************************************************/ - /* internal variables, do not set... */ - /* provided because they may be of use to calling application */ - /************************************************************************/ - - /** - * 0=MPEG-2/2.5 1=MPEG-1 - */ - public int version; - public int encoder_delay; - /** - * number of samples of padding appended to input - */ - public int encoder_padding; - public int framesize; - /** - * number of frames encoded - */ - public int frameNum; - /** - * is this struct owned by calling program or lame? - */ - public int lame_allocated_gfp; - /**************************************************************************/ - /* more internal variables are stored in this structure: */ - /**************************************************************************/ - public LameInternalFlags internal_flags; - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameInternalFlags.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameInternalFlags.java deleted file mode 100644 index 61c2399f3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameInternalFlags.java +++ /dev/null @@ -1,342 +0,0 @@ -package mp3; - -import mpg.MPGLib; - -public class LameInternalFlags { - - public static final int MFSIZE = (3 * 1152 + Encoder.ENCDELAY - Encoder.MDCTDELAY); - - public LameInternalFlags() { - for (int i = 0; i < en.length; i++) { - en[i] = new III_psy_xmin(); - } - for (int i = 0; i < thm.length; i++) { - thm[i] = new III_psy_xmin(); - } - for (int i = 0; i < header.length; i++) { - header[i] = new Header(); - } - } - - public static final int MAX_BITS_PER_CHANNEL = 4095; - public static final int MAX_BITS_PER_GRANULE = 7680; - - /******************************************************************** - * internal variables NOT set by calling program, and should not be * - * modified by the calling program * - ********************************************************************/ - - /** - * Some remarks to the Class_ID field: The Class ID is an Identifier for a - * pointer to this struct. It is very unlikely that a pointer to - * lame_global_flags has the same 32 bits in it's structure (large and other - * special properties, for instance prime). - * - * To test that the structure is right and initialized, use: if ( gfc . - * Class_ID == LAME_ID ) ... Other remark: If you set a flag to 0 for uninit - * data and 1 for init data, the right test should be "if (flag == 1)" and - * NOT "if (flag)". Unintended modification of this element will be - * otherwise misinterpreted as an init. - */ - public long Class_ID; - - public int lame_encode_frame_init; - public int iteration_init_init; - public int fill_buffer_resample_init; - - public float mfbuf[][] = new float[2][MFSIZE]; - - /** - * granules per frame - */ - public int mode_gr; - /** - * number of channels in the input data stream (PCM or decoded PCM) - */ - public int channels_in; - /** - * number of channels in the output data stream (not used for decoding) - */ - public int channels_out; - /** - * input_samp_rate/output_samp_rate - */ - public double resample_ratio; - - public int mf_samples_to_encode; - public int mf_size; - /** - * min bitrate index - */ - public int VBR_min_bitrate; - /** - * max bitrate index - */ - public int VBR_max_bitrate; - public int bitrate_index; - public int samplerate_index; - public int mode_ext; - - /* lowpass and highpass filter control */ - /** - * normalized frequency bounds of passband - */ - public float lowpass1, lowpass2; - /** - * normalized frequency bounds of passband - */ - public float highpass1, highpass2; - - /** - * 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1 - */ - public int noise_shaping; - - /** - * 0 = ISO model: amplify all distorted bands<BR> - * 1 = amplify within 50% of max (on db scale)<BR> - * 2 = amplify only most distorted band<BR> - * 3 = method 1 and refine with method 2<BR> - */ - public int noise_shaping_amp; - /** - * 0 = no substep<BR> - * 1 = use substep shaping at last step(VBR only)<BR> - * (not implemented yet)<BR> - * 2 = use substep inside loop<BR> - * 3 = use substep inside loop and last step<BR> - */ - public int substep_shaping; - - /** - * 1 = gpsycho. 0 = none - */ - public int psymodel; - /** - * 0 = stop at over=0, all scalefacs amplified or<BR> - * a scalefac has reached max value<BR> - * 1 = stop when all scalefacs amplified or a scalefac has reached max value<BR> - * 2 = stop when all scalefacs amplified - */ - public int noise_shaping_stop; - - /** - * 0 = no, 1 = yes - */ - public int subblock_gain; - /** - * 0 = no. 1=outside loop 2=inside loop(slow) - */ - public int use_best_huffman; - - /** - * 0 = stop early after 0 distortion found. 1 = full search - */ - public int full_outer_loop; - - public IIISideInfo l3_side = new IIISideInfo(); - public float ms_ratio[] = new float[2]; - - /* used for padding */ - /** - * padding for the current frame? - */ - public int padding; - public int frac_SpF; - public int slot_lag; - - /** - * optional ID3 tags - */ - public ID3TagSpec tag_spec; - public int nMusicCRC; - - /* variables used by Quantize */ - public int OldValue[] = new int[2]; - public int CurrentStep[] = new int[2]; - - public float masking_lower; - public int bv_scf[] = new int[576]; - public int pseudohalf[] = new int[L3Side.SFBMAX]; - - /** - * will be set in lame_init_params - */ - public boolean sfb21_extra; - - /* BPC = maximum number of filter convolution windows to precompute */ - public static final int BPC = 320; - public float[][] inbuf_old = new float[2][]; - public float[][] blackfilt = new float[2 * BPC + 1][]; - public double itime[] = new double[2]; - public int sideinfo_len; - - /* variables for newmdct.c */ - public float sb_sample[][][][] = new float[2][2][18][Encoder.SBLIMIT]; - public float amp_filter[] = new float[32]; - - /* variables for BitStream */ - - /** - * <PRE> - * mpeg1: buffer=511 bytes smallest frame: 96-38(sideinfo)=58 - * max number of frames in reservoir: 8 - * mpeg2: buffer=255 bytes. smallest frame: 24-23bytes=1 - * with VBR, if you are encoding all silence, it is possible to - * have 8kbs/24khz frames with 1byte of data each, which means we need - * to buffer up to 255 headers! - * </PRE> - */ - /** - * also, max_header_buf has to be a power of two - */ - public static final int MAX_HEADER_BUF = 256; - /** - * max size of header is 38 - */ - private static final int MAX_HEADER_LEN = 40; - - public static class Header { - public int write_timing; - public int ptr; - public byte buf[] = new byte[MAX_HEADER_LEN]; - } - - public Header[] header = new Header[MAX_HEADER_BUF]; - - public int h_ptr; - public int w_ptr; - public int ancillary_flag; - - /* variables for Reservoir */ - /** - * in bits - */ - public int ResvSize; - /** - * in bits - */ - public int ResvMax; - - public ScaleFac scalefac_band = new ScaleFac(); - - /* daa from PsyModel */ - /* The static variables "r", "phi_sav", "new", "old" and "oldest" have */ - /* to be remembered for the unpredictability measure. For "r" and */ - /* "phi_sav", the first index from the left is the channel select and */ - /* the second index is the "age" of the data. */ - public float minval_l[] = new float[Encoder.CBANDS]; - public float minval_s[] = new float[Encoder.CBANDS]; - public float nb_1[][] = new float[4][Encoder.CBANDS], - nb_2[][] = new float[4][Encoder.CBANDS]; - public float nb_s1[][] = new float[4][Encoder.CBANDS], - nb_s2[][] = new float[4][Encoder.CBANDS]; - public float[] s3_ss; - public float[] s3_ll; - public float decay; - - public III_psy_xmin[] thm = new III_psy_xmin[4]; - public III_psy_xmin[] en = new III_psy_xmin[4]; - - /** - * fft and energy calculation - */ - public float tot_ener[] = new float[4]; - - /* loudness calculation (for adaptive threshold of hearing) */ - /** - * loudness^2 approx. per granule and channel - */ - public float loudness_sq[][] = new float[2][2]; - /** - * account for granule delay of L3psycho_anal - */ - public float loudness_sq_save[] = new float[2]; - - /** - * Scale Factor Bands - */ - public float mld_l[] = new float[Encoder.SBMAX_l], - mld_s[] = new float[Encoder.SBMAX_s]; - public int bm_l[] = new int[Encoder.SBMAX_l], - bo_l[] = new int[Encoder.SBMAX_l]; - public int bm_s[] = new int[Encoder.SBMAX_s], - bo_s[] = new int[Encoder.SBMAX_s]; - public int npart_l, npart_s; - - public int s3ind[][] = new int[Encoder.CBANDS][2]; - public int s3ind_s[][] = new int[Encoder.CBANDS][2]; - - public int numlines_s[] = new int[Encoder.CBANDS]; - public int numlines_l[] = new int[Encoder.CBANDS]; - public float rnumlines_l[] = new float[Encoder.CBANDS]; - public float mld_cb_l[] = new float[Encoder.CBANDS], - mld_cb_s[] = new float[Encoder.CBANDS]; - public int numlines_s_num1; - public int numlines_l_num1; - - /* ratios */ - public float pe[] = new float[4]; - public float ms_ratio_s_old, ms_ratio_l_old; - public float ms_ener_ratio_old; - - /** - * block type - */ - public int blocktype_old[] = new int[2]; - - /** - * variables used for --nspsytune - */ - public NsPsy nsPsy = new NsPsy(); - - /** - * used for Xing VBR header - */ - public VBRSeekInfo VBR_seek_table = new VBRSeekInfo(); - - /** - * all ATH related stuff - */ - public ATH ATH; - - public PSY PSY; - - public int nogap_total; - public int nogap_current; - - /* ReplayGain */ - public boolean decode_on_the_fly = true; - public boolean findReplayGain = true; - public boolean findPeakSample = true; - public float PeakSample; - public int RadioGain; - public int AudiophileGain; - public ReplayGain rgdata; - - /** - * gain change required for preventing clipping - */ - public int noclipGainChange; - /** - * user-specified scale factor required for preventing clipping - */ - public float noclipScale; - - /* simple statistics */ - public int bitrate_stereoMode_Hist[][] = new int[16][4 + 1]; - /** - * norm/start/short/stop/mixed(short)/sum - */ - public int bitrate_blockType_Hist[][] = new int[16][4 + 1 + 1]; - - public PlottingData pinfo; - public MPGLib.mpstr_tag hip; - - public int in_buffer_nsamples; - public float[] in_buffer_0; - public float[] in_buffer_1; - - public IIterationLoop iteration_loop; - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameTest.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameTest.java deleted file mode 100644 index 348180fda..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LameTest.java +++ /dev/null @@ -1,180 +0,0 @@ -package mp3; - -import mpg.Common; -import mpg.Interface; -import mpg.MPGLib; -import org.junit.Assert; -import org.junit.Test; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.MappedByteBuffer; -import java.nio.ShortBuffer; -import java.nio.channels.FileChannel; -import java.nio.file.StandardOpenOption; - -public class LameTest { - -/* - @Test - public void testEncode() throws IOException { - Lame lame = new Lame(); - GetAudio gaud = new GetAudio(); - GainAnalysis ga = new GainAnalysis(); - BitStream bs = new BitStream(); - Presets p = new Presets(); - QuantizePVT qupvt = new QuantizePVT(); - Quantize qu = new Quantize(); - VBRTag vbr = new VBRTag(); - Version ver = new Version(); - ID3Tag id3 = new ID3Tag(); - Reservoir rv = new Reservoir(); - Takehiro tak = new Takehiro(); - Parse parse = new Parse(); - BRHist hist = new BRHist(); - - MPGLib mpg = new MPGLib(); - Interface intf = new Interface(); - Common common = new Common(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - LameGlobalFlags gfp = lame.lame_init(); - - gfp.num_channels = 1; - gfp.in_samplerate = 48000; - gfp.brate = 128; - gfp.mode = MPEGMode.STEREO; - gfp.quality = 3; - gfp.bWriteVbrTag = false; - gfp.disable_reservoir = true; - gfp.write_id3tag_automatic = false; - - int retcode = lame.lame_init_params(gfp); - System.out.println("DONE " + retcode); - - File file = new File("/Users/zhukov/git/tle1.3x/test-data/wav/440880.wav"); - MappedByteBuffer map = FileChannel.open(file.toPath(), StandardOpenOption.READ).map(FileChannel.MapMode.READ_ONLY, 0, file.length()); - map.order(ByteOrder.LITTLE_ENDIAN); - int dataLen = map.getInt(0x28); - map.position(0x2c); - map.limit(0x2c + dataLen); - ShortBuffer samples = map.slice().order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); - short i = samples.get(1); - Assert.assertEquals(0x05e6, i); - System.out.println(samples + " " + Integer.toHexString(i)); - int remaining = samples.remaining(); - short[] left = new short[remaining]; - short[] right = new short[remaining]; - samples.clear(); - samples.get(left); - samples.clear(); - samples.get(right); - - int mp3buf_size = (int) (1.25 * remaining + 7200); - byte[] mp3buf = new byte[mp3buf_size]; - int mp3bufPos = 0; - int _sz = lame.lame_encode_buffer(gfp, left, right, remaining, - mp3buf, mp3bufPos, mp3buf_size); - System.out.println("lame_encode_buffer: " + _sz); - } -*/ - - @Test - public void testEncodeChugai() throws IOException { - Lame lame = new Lame(); - GetAudio gaud = new GetAudio(); - GainAnalysis ga = new GainAnalysis(); - BitStream bs = new BitStream(); - Presets p = new Presets(); - QuantizePVT qupvt = new QuantizePVT(); - Quantize qu = new Quantize(); - VBRTag vbr = new VBRTag(); - Version ver = new Version(); - ID3Tag id3 = new ID3Tag(); - Reservoir rv = new Reservoir(); - Takehiro tak = new Takehiro(); - Parse parse = new Parse(); - BRHist hist = new BRHist(); - - MPGLib mpg = new MPGLib(); - Interface intf = new Interface(); - Common common = new Common(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - LameGlobalFlags gfp = lame.lame_init(); - - gfp.num_channels = 2; - gfp.in_samplerate = 48000; - gfp.brate = 128; - gfp.mode = MPEGMode.STEREO; - gfp.quality = 3; - gfp.bWriteVbrTag = false; - gfp.disable_reservoir = true; - gfp.write_id3tag_automatic = false; - - int retcode = lame.lame_init_params(gfp); - System.out.println("DONE " + retcode); - -// File file = new File("/Users/zhukov/git/tle1.3x/test-data/wav/440880.wav"); - File file = new File("/Users/chugai/dev/DPlayer/merm2/proxy/c00.wav"); - MappedByteBuffer map = FileChannel.open(file.toPath(), StandardOpenOption.READ).map(FileChannel.MapMode.READ_ONLY, 0, file.length()); - map.order(ByteOrder.LITTLE_ENDIAN); - int dataLen = map.getInt(0x28); - map.position(0x2c); - map.limit(0x2c + dataLen); - - ShortBuffer samples = map.slice().order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); - samples.limit(1152 * 8); - Assert.assertEquals(0, samples.get(0)); - Assert.assertEquals(943, samples.get(1)); - int remaining = samples.remaining(); - - int[] left = new int[remaining]; - for (int i = 0; i < remaining; i++) - left[i] = samples.get(i); - - int mp3buf_size = (int) (1.25 * remaining + 7200); - byte[] mp3buf = new byte[mp3buf_size]; - int mp3bufPos = 0; - - int _sz = lame.lame_encode_buffer_int(gfp, left, left, remaining, - mp3buf, mp3bufPos, mp3buf_size); - mp3bufPos += _sz; - System.out.println("lame_encode_buffer: " + _sz); - - _sz = lame.lame_encode_flush(gfp, mp3buf, mp3bufPos, mp3buf_size); - mp3bufPos += _sz; - System.out.println("lame_encode_flush: " + _sz); - - OutputStream out = new BufferedOutputStream(new FileOutputStream("/Users/chugai/Downloads/generated_java.mp3")); - out.write(mp3buf, 0, mp3bufPos); - out.close(); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LongBlockConstrain.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LongBlockConstrain.java deleted file mode 100644 index d8bff1adc..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/LongBlockConstrain.java +++ /dev/null @@ -1,156 +0,0 @@ -package mp3; - -import mp3.VBRQuantize.algo_t; - -final class LongBlockConstrain implements VBRQuantize.alloc_sf_f { - /** - * - */ - private final VBRQuantize vbrQuantize; - - /** - * @param vbrQuantize - */ - LongBlockConstrain(VBRQuantize vbrQuantize) { - this.vbrQuantize = vbrQuantize; - } - - /****************************************************************** - * - * long block scalefacs - * - ******************************************************************/ - - public void alloc(algo_t that, int[] vbrsf, int[] vbrsfmin, int vbrmax) { - final GrInfo cod_info = that.cod_info; - final LameInternalFlags gfc = that.gfc; - int[] max_rangep; - final int maxminsfb = that.mingain_l; - int sfb; - int maxover0, maxover1, maxover0p, maxover1p, mover, delta = 0; - int v, v0, v1, v0p, v1p, vm0p = 1, vm1p = 1; - final int psymax = cod_info.psymax; - - max_rangep = gfc.mode_gr == 2 ? VBRQuantize.max_range_long - : VBRQuantize.max_range_long_lsf_pretab; - - maxover0 = 0; - maxover1 = 0; - maxover0p = 0; /* pretab */ - maxover1p = 0; /* pretab */ - - for (sfb = 0; sfb < psymax; ++sfb) { - assert (vbrsf[sfb] >= vbrsfmin[sfb]); - v = vbrmax - vbrsf[sfb]; - if (delta < v) { - delta = v; - } - v0 = v - 2 * VBRQuantize.max_range_long[sfb]; - v1 = v - 4 * VBRQuantize.max_range_long[sfb]; - v0p = v - 2 - * (max_rangep[sfb] + this.vbrQuantize.qupvt.pretab[sfb]); - v1p = v - 4 - * (max_rangep[sfb] + this.vbrQuantize.qupvt.pretab[sfb]); - if (maxover0 < v0) { - maxover0 = v0; - } - if (maxover1 < v1) { - maxover1 = v1; - } - if (maxover0p < v0p) { - maxover0p = v0p; - } - if (maxover1p < v1p) { - maxover1p = v1p; - } - } - if (vm0p == 1) { - int gain = vbrmax - maxover0p; - if (gain < maxminsfb) { - gain = maxminsfb; - } - for (sfb = 0; sfb < psymax; ++sfb) { - final int a = (gain - vbrsfmin[sfb]) - 2 - * this.vbrQuantize.qupvt.pretab[sfb]; - if (a <= 0) { - vm0p = 0; - vm1p = 0; - break; - } - } - } - if (vm1p == 1) { - int gain = vbrmax - maxover1p; - if (gain < maxminsfb) { - gain = maxminsfb; - } - for (sfb = 0; sfb < psymax; ++sfb) { - final int b = (gain - vbrsfmin[sfb]) - 4 - * this.vbrQuantize.qupvt.pretab[sfb]; - if (b <= 0) { - vm1p = 0; - break; - } - } - } - if (vm0p == 0) { - maxover0p = maxover0; - } - if (vm1p == 0) { - maxover1p = maxover1; - } - if (gfc.noise_shaping != 2) { - maxover1 = maxover0; - maxover1p = maxover0p; - } - mover = Math.min(maxover0, maxover0p); - mover = Math.min(mover, maxover1); - mover = Math.min(mover, maxover1p); - - if (delta > mover) { - delta = mover; - } - vbrmax -= delta; - if (vbrmax < maxminsfb) { - vbrmax = maxminsfb; - } - maxover0 -= mover; - maxover0p -= mover; - maxover1 -= mover; - maxover1p -= mover; - - if (maxover0 == 0) { - cod_info.scalefac_scale = 0; - cod_info.preflag = 0; - max_rangep = VBRQuantize.max_range_long; - } else if (maxover0p == 0) { - cod_info.scalefac_scale = 0; - cod_info.preflag = 1; - } else if (maxover1 == 0) { - cod_info.scalefac_scale = 1; - cod_info.preflag = 0; - max_rangep = VBRQuantize.max_range_long; - } else if (maxover1p == 0) { - cod_info.scalefac_scale = 1; - cod_info.preflag = 1; - } else { - assert (false); /* this should not happen */ - } - cod_info.global_gain = vbrmax; - if (cod_info.global_gain < 0) { - cod_info.global_gain = 0; - } else if (cod_info.global_gain > 255) { - cod_info.global_gain = 255; - } - { - int sf_temp[] = new int[L3Side.SFBMAX]; - for (sfb = 0; sfb < L3Side.SFBMAX; ++sfb) { - sf_temp[sfb] = vbrsf[sfb] - vbrmax; - } - this.vbrQuantize.set_scalefacs(cod_info, vbrsfmin, sf_temp, - max_rangep); - } - assert (this.vbrQuantize.checkScalefactor(cod_info, vbrsfmin)); - - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MP3Data.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MP3Data.java deleted file mode 100644 index a1011ddfd..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MP3Data.java +++ /dev/null @@ -1,50 +0,0 @@ -package mp3; - -public class MP3Data { - /** - * true if header was parsed and following data was computed - */ - public boolean header_parsed; - /** - * number of channels - */ - public int stereo; - /** - * sample rate - */ - public int samplerate; - /** - * bitrate - */ - public int bitrate; - /** - * mp3 frame type - */ - public int mode; - /** - * mp3 frame type - */ - public int mode_ext; - /** - * number of samples per mp3 frame - */ - public int framesize; - - /* this data is only computed if mpglib detects a Xing VBR header */ - - /** - * number of samples in mp3 file. - */ - public int nsamp; - /** - * total number of frames in mp3 file - */ - public int totalframes; - - /* this data is not currently computed by the mpglib routines */ - - /** - * frames decoded counter - */ - public int framenum; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MPEGMode.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MPEGMode.java deleted file mode 100644 index 95cb5bf66..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MPEGMode.java +++ /dev/null @@ -1,10 +0,0 @@ -package mp3; - -/* MPEG modes */ -public enum MPEGMode { - STEREO, JOINT_STEREO, - /** - * LAME doesn't supports this! - */ - DUAL_CHANNEL, MONO, NOT_SET -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Main.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Main.java deleted file mode 100644 index e982b40d0..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Main.java +++ /dev/null @@ -1,979 +0,0 @@ -/* - * Command line frontend program - * - * Copyright (c) 1999 Mark Taylor - * 2000 Takehiro TOMINAGA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Main.java,v 1.38 2011/08/27 18:57:12 kenchis Exp $ */ - -package mp3; - -import java.beans.PropertyChangeSupport; -import java.io.Closeable; -import java.io.DataOutput; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.util.ArrayList; -import java.util.Locale; -import java.util.StringTokenizer; - -import mp3.GetAudio.sound_file_format; -import mpg.Common; -import mpg.Interface; -import mpg.MPGLib; - -public class Main { - - private GetAudio gaud; - private ID3Tag id3; - private Lame lame; - private GainAnalysis ga; - private BitStream bs; - private Presets p; - private QuantizePVT qupvt; - private Quantize qu; - private VBRTag vbr; - private Version ver; - private Reservoir rv; - private Takehiro tak; - private Parse parse; - private BRHist hist; - - private MPGLib mpg; - private Interface intf; - private Common common; - - private PropertyChangeSupport support = new PropertyChangeSupport(this); - - public PropertyChangeSupport getSupport() { - return support; - } - - /** - * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO psychoacoustic model. - */ - private int parse_args_from_string(final LameGlobalFlags gfp, - final String argv, final StringBuilder inPath, - final StringBuilder outPath) { - /* Quick & very Dirty */ - if (argv == null || argv.length() == 0) - return 0; - - StringTokenizer tok = new StringTokenizer(argv, " "); - ArrayList<String> args = new ArrayList<String>(); - while (tok.hasMoreTokens()) { - args.add(tok.nextToken()); - } - return parse.parse_args(gfp, args, inPath, outPath, null, null); - } - - public DataOutput init_files(final LameGlobalFlags gf, - final String inPath, final String outPath, final Enc enc) { - /* - * Mostly it is not useful to use the same input and output name. This - * test is very easy and buggy and don't recognize different names - * assigning the same file - */ - if (inPath.equals(outPath)) { - System.err - .println("Input file and Output file are the same. Abort."); - return null; - } - - /* - * open the wav/aiff/raw pcm or mp3 input file. This call will open the - * file, try to parse the headers and set gf.samplerate, - * gf.num_channels, gf.num_samples. if you want to do your own file - * input, skip this call and set samplerate, num_channels and - * num_samples yourself. - */ - gaud.init_infile(gf, inPath, enc); - - DataOutput outf; - if ((outf = gaud.init_outfile(outPath)) == null) { - System.err.printf("Can't init outfile '%s'\n", outPath); - return null; - } - - return outf; - } - - /** - * the simple lame decoder - * - * After calling lame_init(), lame_init_params() and init_infile(), call - * this routine to read the input MP3 file and output .wav data to the - * specified file pointer - * - * lame_decoder will ignore the first 528 samples, since these samples - * represent the mpglib delay (and are all 0). skip = number of additional - * samples to skip, to (for example) compensate for the encoder delay - */ - private void lame_decoder(final LameGlobalFlags gfp, - DataOutput outf, int skip_start, final String inPath, - final String outPath, final Enc enc) throws IOException { - short Buffer[][] = new short[2][1152]; - int iread; - int skip_end = 0; - int i; - int tmp_num_channels = gfp.num_channels; - - if (parse.silent < 10) - System.out.printf("\rinput: %s%s(%g kHz, %d channel%s, ", inPath, - inPath.length() > 26 ? "\n\t" : " ", - gfp.in_samplerate / 1.e3, tmp_num_channels, - tmp_num_channels != 1 ? "s" : ""); - - switch (parse.input_format) { - case sf_mp123: /* FIXME: !!! */ - throw new RuntimeException("Internal error. Aborting."); - - case sf_mp3: - if (skip_start == 0) { - if (enc.enc_delay > -1 || enc.enc_padding > -1) { - if (enc.enc_delay > -1) - skip_start = enc.enc_delay + 528 + 1; - if (enc.enc_padding > -1) - skip_end = enc.enc_padding - (528 + 1); - } else - skip_start = gfp.encoder_delay + 528 + 1; - } else { - /* user specified a value of skip. just add for decoder */ - skip_start += 528 + 1; - /* - * mp3 decoder has a 528 sample delay, plus user supplied "skip" - */ - } - - if (parse.silent < 10) - System.out.printf("MPEG-%d%s Layer %s", 2 - gfp.version, - gfp.out_samplerate < 16000 ? ".5" : "", "III"); - break; - case sf_mp2: - skip_start += 240 + 1; - if (parse.silent < 10) - System.out.printf("MPEG-%d%s Layer %s", 2 - gfp.version, - gfp.out_samplerate < 16000 ? ".5" : "", "II"); - break; - case sf_mp1: - skip_start += 240 + 1; - if (parse.silent < 10) - System.out.printf("MPEG-%d%s Layer %s", 2 - gfp.version, - gfp.out_samplerate < 16000 ? ".5" : "", "I"); - break; - case sf_raw: - if (parse.silent < 10) - System.out.printf("raw PCM data"); - parse.mp3input_data.nsamp = gfp.num_samples; - parse.mp3input_data.framesize = 1152; - skip_start = 0; - /* other formats have no delay */ - break; - case sf_wave: - if (parse.silent < 10) - System.out.printf("Microsoft WAVE"); - parse.mp3input_data.nsamp = gfp.num_samples; - parse.mp3input_data.framesize = 1152; - skip_start = 0; - /* other formats have no delay */ - break; - case sf_aiff: - if (parse.silent < 10) - System.out.printf("SGI/Apple AIFF"); - parse.mp3input_data.nsamp = gfp.num_samples; - parse.mp3input_data.framesize = 1152; - skip_start = 0; - /* other formats have no delay */ - break; - default: - if (parse.silent < 10) - System.out.printf("unknown"); - parse.mp3input_data.nsamp = gfp.num_samples; - parse.mp3input_data.framesize = 1152; - skip_start = 0; - /* other formats have no delay */ - assert (false); - break; - } - - if (parse.silent < 10) { - System.out.printf(")\noutput: %s%s(16 bit, Microsoft WAVE)\n", - outPath, outPath.length() > 45 ? "\n\t" : " "); - - if (skip_start > 0) - System.out - .printf("skipping initial %d samples (encoder+decoder delay)\n", - skip_start); - if (skip_end > 0) - System.out - .printf("skipping final %d samples (encoder padding-decoder delay)\n", - skip_end); - } - - System.out.print("|"); - for (int j = 0; j < MAX_WIDTH - 2; j++) { - System.out.print("="); - } - System.out.println("|"); - oldPercent = curPercent = oldConsoleX = 0; - - if (!parse.disable_wav_header) - gaud.WriteWaveHeader(outf, Integer.MAX_VALUE, gfp.in_samplerate, - tmp_num_channels, 16); - /* unknown size, so write maximum 32 bit signed value */ - - double wavsize = -(skip_start + skip_end); - parse.mp3input_data.totalframes = parse.mp3input_data.nsamp - / parse.mp3input_data.framesize; - - assert (tmp_num_channels >= 1 && tmp_num_channels <= 2); - - do { - iread = gaud.get_audio16(gfp, Buffer); - /* read in 'iread' samples */ - if (iread >= 0) { - parse.mp3input_data.framenum += iread - / parse.mp3input_data.framesize; - wavsize += iread; - - if (parse.silent <= 0) { - timestatus(parse.mp3input_data.framenum, - parse.mp3input_data.totalframes); - } - - skip_start -= (i = skip_start < iread ? skip_start : iread); - /* - * 'i' samples are to skip in this frame - */ - - if (skip_end > 1152 - && parse.mp3input_data.framenum + 2 > parse.mp3input_data.totalframes) { - iread -= (skip_end - 1152); - skip_end = 1152; - } else if (parse.mp3input_data.framenum == parse.mp3input_data.totalframes - && iread != 0) - iread -= skip_end; - - for (; i < iread; i++) { - if (parse.disable_wav_header) { - if (parse.swapbytes) { - WriteBytesSwapped(outf, Buffer[0], i); - } else { - WriteBytes(outf, Buffer[0], i); - } - if (tmp_num_channels == 2) { - if (parse.swapbytes) { - WriteBytesSwapped(outf, Buffer[1], i); - } else { - WriteBytes(outf, Buffer[1], i); - } - } - } else { - gaud.write16BitsLowHigh(outf, Buffer[0][i] & 0xffff); - if (tmp_num_channels == 2) - gaud.write16BitsLowHigh(outf, Buffer[1][i] & 0xffff); - } - } - } - } while (iread > 0); - - i = (16 / 8) * tmp_num_channels; - assert (i > 0); - if (wavsize <= 0) { - if (parse.silent < 10) - System.err.println("WAVE file contains 0 PCM samples"); - wavsize = 0; - } else if (wavsize > 0xFFFFFFD0L / i) { - if (parse.silent < 10) - System.err - .println("Very huge WAVE file, can't set filesize accordingly"); - wavsize = 0xFFFFFFD0; - } else { - wavsize *= i; - } - - ((Closeable)outf).close(); - /* if outf is seekable, rewind and adjust length */ - if (!parse.disable_wav_header) { - RandomAccessFile rf = new RandomAccessFile(outPath, "rw"); - gaud.WriteWaveHeader(rf, (int) wavsize, gfp.in_samplerate, - tmp_num_channels, 16); - rf.close(); - } - - System.out.print("|"); - for (int j = 0; j < MAX_WIDTH - 2; j++) { - System.out.print("="); - } - System.out.println("|"); - } - - private void print_lame_tag_leading_info(final LameGlobalFlags gf) { - if (gf.bWriteVbrTag) - System.out.println("Writing LAME Tag..."); - } - - private void print_trailing_info(final LameGlobalFlags gf) { - if (gf.bWriteVbrTag) - System.out.println("done\n"); - - if (gf.findReplayGain) { - int RadioGain = gf.internal_flags.RadioGain; - System.out.printf("ReplayGain: %s%.1fdB\n", RadioGain > 0 ? "+" - : "", (RadioGain) / 10.0f); - if (RadioGain > 0x1FE || RadioGain < -0x1FE) - System.out - .println("WARNING: ReplayGain exceeds the -51dB to +51dB range. Such a result is too\n" - + " high to be stored in the header."); - } - - /* - * if (the user requested printing info about clipping) and (decoding on - * the fly has actually been performed) - */ - if (parse.print_clipping_info && gf.decode_on_the_fly) { - float noclipGainChange = (float) gf.internal_flags.noclipGainChange / 10.0f; - float noclipScale = gf.internal_flags.noclipScale; - - if (noclipGainChange > 0.0) { - /* clipping occurs */ - System.out - .printf("WARNING: clipping occurs at the current gain. Set your decoder to decrease\n" - + " the gain by at least %.1fdB or encode again ", - noclipGainChange); - - /* advice the user on the scale factor */ - if (noclipScale > 0) { - System.out.printf(Locale.US, "using --scale %.2f\n", noclipScale); - System.out - .print(" or less (the value under --scale is approximate).\n"); - } else { - /* - * the user specified his own scale factor. We could suggest - * the scale factor of - * (32767.0/gfp->PeakSample)*(gfp->scale) but it's usually - * very inaccurate. So we'd rather advice him to disable - * scaling first and see our suggestion on the scale factor - * then. - */ - System.out - .print("using --scale <arg>\n" - + " (For a suggestion on the optimal value of <arg> encode\n" - + " with --scale 1 first)\n"); - } - - } else { /* no clipping */ - if (noclipGainChange > -0.1) - System.out - .print("\nThe waveform does not clip and is less than 0.1dB away from full scale.\n"); - else - System.out - .printf("\nThe waveform does not clip and is at least %.1fdB away from full scale.\n", - -noclipGainChange); - } - } - - } - - private int write_xing_frame(final LameGlobalFlags gf, - final RandomAccessFile outf) { - byte mp3buffer[] = new byte[Lame.LAME_MAXMP3BUFFER]; - - int imp3 = vbr.getLameTagFrame(gf, mp3buffer); - if (imp3 > mp3buffer.length) { - System.err - .printf("Error writing LAME-tag frame: buffer too small: buffer size=%d frame size=%d\n", - mp3buffer.length, imp3); - return -1; - } - if (imp3 <= 0) { - return 0; - } - try { - outf.write(mp3buffer, 0, imp3); - } catch (IOException e) { - System.err.println("Error writing LAME-tag"); - return -1; - } - return imp3; - } - - private int lame_encoder(final LameGlobalFlags gf, - final DataOutput outf, final boolean nogap, - final String inPath, final String outPath) { - byte mp3buffer[] = new byte[Lame.LAME_MAXMP3BUFFER]; - int Buffer[][] = new int[2][1152]; - int iread; - - encoder_progress_begin(gf, inPath, outPath); - - int imp3 = id3.lame_get_id3v2_tag(gf, mp3buffer, mp3buffer.length); - if (imp3 > mp3buffer.length) { - encoder_progress_end(gf); - System.err - .printf("Error writing ID3v2 tag: buffer too small: buffer size=%d ID3v2 size=%d\n", - mp3buffer.length, imp3); - return 1; - } - try { - outf.write(mp3buffer, 0, imp3); - } catch (IOException e) { - encoder_progress_end(gf); - System.err.printf("Error writing ID3v2 tag \n"); - return 1; - } - int id3v2_size = imp3; - - /* encode until we hit eof */ - do { - /* read in 'iread' samples */ - iread = gaud.get_audio(gf, Buffer); - - if (iread >= 0) { - encoder_progress(gf); - - /* encode */ - imp3 = lame.lame_encode_buffer_int(gf, Buffer[0], Buffer[1], - iread, mp3buffer, 0, mp3buffer.length); - - /* was our output buffer big enough? */ - if (imp3 < 0) { - if (imp3 == -1) - System.err.printf("mp3 buffer is not big enough... \n"); - else - System.err.printf( - "mp3 internal error: error code=%d\n", imp3); - return 1; - } - - try { - outf.write(mp3buffer, 0, imp3); - } catch (IOException e) { - encoder_progress_end(gf); - System.err.printf("Error writing mp3 output \n"); - return 1; - } - } - } while (iread > 0); - - if (nogap) - imp3 = lame - .lame_encode_flush_nogap(gf, mp3buffer, mp3buffer.length); - /* - * may return one more mp3 frame - */ - else - imp3 = lame.lame_encode_flush(gf, mp3buffer, 0, mp3buffer.length); - /* - * may return one more mp3 frame - */ - - if (imp3 < 0) { - if (imp3 == -1) - System.err.printf("mp3 buffer is not big enough... \n"); - else - System.err.printf("mp3 internal error: error code=%d\n", imp3); - return 1; - - } - - encoder_progress_end(gf); - - try { - outf.write(mp3buffer, 0, imp3); - } catch (IOException e) { - encoder_progress_end(gf); - System.err.printf("Error writing mp3 output \n"); - return 1; - } - - imp3 = id3.lame_get_id3v1_tag(gf, mp3buffer, mp3buffer.length); - if (imp3 > mp3buffer.length) { - System.err - .printf("Error writing ID3v1 tag: buffer too small: buffer size=%d ID3v1 size=%d\n", - mp3buffer.length, imp3); - } else { - if (imp3 > 0) { - try { - outf.write(mp3buffer, 0, imp3); - } catch (IOException e) { - encoder_progress_end(gf); - System.err.printf("Error writing ID3v1 tag \n"); - return 1; - } - } - } - - if (parse.silent <= 0) { - print_lame_tag_leading_info(gf); - } - try { - ((Closeable)outf).close(); - RandomAccessFile rf = new RandomAccessFile(outPath, "rw"); - rf.seek(id3v2_size); - write_xing_frame(gf, rf); - rf.close(); - } catch (IOException e) { - System.err.printf("fatal error: can't update LAME-tag frame!\n"); - } - - print_trailing_info(gf); - return 0; - } - - private void brhist_init_package(final LameGlobalFlags gf) { - if (parse.brhist) { - if (hist.brhist_init(gf, gf.VBR_min_bitrate_kbps, - gf.VBR_max_bitrate_kbps) != 0) { - /* fail to initialize */ - parse.brhist = false; - } - } else { - hist.brhist_init(gf, 128, 128); - /* Dirty hack */ - } - } - - private void parse_nogap_filenames(final int nogapout, final String inPath, - final StringBuilder outPath, final StringBuilder outdir) { - outPath.setLength(0); - outPath.append(outdir); - if (0 == nogapout) { - outPath.setLength(0); - outPath.append(inPath); - /* nuke old extension, if one */ - if (outPath.toString().endsWith(".wav")) { - outPath.setLength(0); - outPath.append(outPath.substring(0, outPath.length() - 4) - + ".mp3"); - } else { - outPath.setLength(0); - outPath.append(outPath + ".mp3"); - } - } else { - int slasher = inPath.lastIndexOf(System - .getProperty("file.separator")); - - /* backseek to last dir delemiter */ - - /* skip one foward if needed */ - if (slasher != 0 - && (outPath.toString().endsWith( - System.getProperty("file.separator")) || outPath - .toString().endsWith(":"))) - slasher++; - else if (slasher == 0 - && (!outPath.toString().endsWith( - System.getProperty("file.separator")) || outPath - .toString().endsWith(":"))) - outPath.append(System.getProperty("file.separator")); - - outPath.append(inPath.substring(slasher)); - /* nuke old extension */ - if (outPath.toString().endsWith(".wav")) { - String string = outPath.substring(0, outPath.length() - 4) - + ".mp3"; - outPath.setLength(0); - outPath.append(string); - } else { - String string = outPath + ".mp3"; - outPath.setLength(0); - outPath.append(string); - } - } - } - - private static final int MAX_NOGAP = 200; - - public static final void main(final String[] args) { - try { - new Main().run(args); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public int run(String[] args) throws IOException { - // encoder modules - lame = new Lame(); - gaud = new GetAudio(); - ga = new GainAnalysis(); - bs = new BitStream(); - p = new Presets(); - qupvt = new QuantizePVT(); - qu = new Quantize(); - vbr = new VBRTag(); - ver = new Version(); - id3 = new ID3Tag(); - rv = new Reservoir(); - tak = new Takehiro(); - parse = new Parse(); - hist = new BRHist(); - - mpg = new MPGLib(); - intf = new Interface(); - common = new Common(); - - lame.setModules(ga, bs, p, qupvt, qu, vbr, ver, id3, mpg); - bs.setModules(ga, mpg, ver, vbr); - id3.setModules(bs, ver); - p.setModules(lame); - qu.setModules(bs, rv, qupvt, tak); - qupvt.setModules(tak, rv, lame.enc.psy); - rv.setModules(bs); - tak.setModules(qupvt); - vbr.setModules(lame, bs, ver); - gaud.setModules(parse, mpg); - parse.setModules(ver, id3, p); - - // decoder modules - mpg.setModules(intf, common); - intf.setModules(vbr, common); - - StringBuilder outPath = new StringBuilder(); - StringBuilder nogapdir = new StringBuilder(); - StringBuilder inPath = new StringBuilder(); - - /* add variables for encoder delay/padding */ - Enc enc = new Enc(); - - /* support for "nogap" encoding of up to 200 .wav files */ - int nogapout = 0; - int max_nogap = MAX_NOGAP; - String[] nogap_inPath = new String[max_nogap]; - DataOutput outf; - - /* initialize libmp3lame */ - parse.input_format = sound_file_format.sf_unknown; - LameGlobalFlags gf = lame.lame_init(); - if (args.length < 1) { - parse.usage(System.err, "lame"); - /* - * no command-line args, print usage, exit - */ - lame.lame_close(gf); - return 1; - } - - /* - * parse the command line arguments, setting various flags in the struct - * 'gf'. If you want to parse your own arguments, or call libmp3lame - * from a program which uses a GUI to set arguments, skip this call and - * set the values of interest in the gf struct. (see the file API and - * lame.h for documentation about these parameters) - */ - parse_args_from_string(gf, System.getenv("LAMEOPT"), inPath, outPath); - ArrayList<String> argsList = new ArrayList<String>(); - for (int i = 0; i < args.length; i++) { - argsList.add(args[i]); - } - Parse.NoGap ng = new Parse.NoGap(); - int ret = parse.parse_args(gf, argsList, inPath, outPath, nogap_inPath, ng); - max_nogap = ng.num_nogap; - if (ret < 0) { - lame.lame_close(gf); - return ret == -2 ? 0 : 1; - } - - if (parse.update_interval < 0.) - parse.update_interval = 2.f; - - if (outPath.length() != 0 && max_nogap > 0) { - nogapdir = outPath; - nogapout = 1; - } - - /* - * initialize input file. This also sets samplerate and as much other - * data on the input file as available in the headers - */ - if (max_nogap > 0) { - /* - * for nogap encoding of multiple input files, it is not possible to - * specify the output file name, only an optional output directory. - */ - parse_nogap_filenames(nogapout, nogap_inPath[0], outPath, nogapdir); - outf = init_files(gf, nogap_inPath[0], outPath.toString(), enc); - } else { - outf = init_files(gf, inPath.toString(), outPath.toString(), enc); - } - if (outf == null) { - lame.lame_close(gf); - return -1; - } - /* - * turn off automatic writing of ID3 tag data into mp3 stream we have to - * call it before 'lame_init_params', because that function would spit - * out ID3v2 tag data. - */ - gf.write_id3tag_automatic = false; - - /* - * Now that all the options are set, lame needs to analyze them and set - * some more internal options and check for problems - */ - int i = lame.lame_init_params(gf); - if (i < 0) { - if (i == -1) { - parse.display_bitrates(System.err); - } - System.err.println("fatal error during initialization"); - lame.lame_close(gf); - return i; - } - if (parse.silent > 0) { - parse.brhist = false; /* turn off VBR histogram */ - } - - if (gf.decode_only) { - /* decode an mp3 file to a .wav */ - if (parse.mp3_delay_set) - lame_decoder(gf, outf, parse.mp3_delay, inPath.toString(), - outPath.toString(), enc); - else - lame_decoder(gf, outf, 0, inPath.toString(), - outPath.toString(), enc); - - } else { - if (max_nogap > 0) { - /* - * encode multiple input files using nogap option - */ - for (i = 0; i < max_nogap; ++i) { - boolean use_flush_nogap = (i != (max_nogap - 1)); - if (i > 0) { - parse_nogap_filenames(nogapout, nogap_inPath[i], - outPath, nogapdir); - /* - * note: if init_files changes anything, like - * samplerate, num_channels, etc, we are screwed - */ - outf = init_files(gf, nogap_inPath[i], - outPath.toString(), enc); - /* - * reinitialize bitstream for next encoding. this is - * normally done by lame_init_params(), but we cannot - * call that routine twice - */ - lame.lame_init_bitstream(gf); - } - brhist_init_package(gf); - gf.internal_flags.nogap_total = max_nogap; - gf.internal_flags.nogap_current = i; - - ret = lame_encoder(gf, outf, use_flush_nogap, - nogap_inPath[i], outPath.toString()); - - ((Closeable)outf).close(); - gaud.close_infile(); /* close the input file */ - - } - } else { - /* - * encode a single input file - */ - brhist_init_package(gf); - - ret = lame_encoder(gf, outf, false, inPath.toString(), - outPath.toString()); - - ((Closeable)outf).close(); - gaud.close_infile(); /* close the input file */ - } - } - lame.lame_close(gf); - return ret; - } - - private void encoder_progress_begin(final LameGlobalFlags gf, - final String inPath, final String outPath) { - if (parse.silent < 10) { - lame.lame_print_config(gf); - /* print useful information about options being used */ - - System.out.printf("Encoding %s%s to %s\n", inPath, inPath.length() - + outPath.length() < 66 ? "" : "\n ", outPath); - - System.out.printf("Encoding as %g kHz ", 1.e-3 * gf.out_samplerate); - - { - String[][] mode_names = { - { "stereo", "j-stereo", "dual-ch", "single-ch" }, - { "stereo", "force-ms", "dual-ch", "single-ch" } }; - switch (gf.VBR) { - case vbr_rh: - System.out.printf( - "%s MPEG-%d%s Layer III VBR(q=%g) qval=%d\n", - mode_names[gf.force_ms ? 1 : 0][gf.mode.ordinal()], - 2 - gf.version, gf.out_samplerate < 16000 ? ".5" - : "", gf.VBR_q + gf.VBR_q_frac, gf.quality); - break; - case vbr_mt: - case vbr_mtrh: - System.out.printf("%s MPEG-%d%s Layer III VBR(q=%d)\n", - mode_names[gf.force_ms ? 1 : 0][gf.mode.ordinal()], - 2 - gf.version, gf.out_samplerate < 16000 ? ".5" - : "", gf.quality); - break; - case vbr_abr: - System.out - .printf("%s MPEG-%d%s Layer III (%gx) average %d kbps qval=%d\n", - mode_names[gf.force_ms ? 1 : 0][gf.mode - .ordinal()], - 2 - gf.version, - gf.out_samplerate < 16000 ? ".5" : "", - 0.1 * (int) (10. * gf.compression_ratio + 0.5), - gf.VBR_mean_bitrate_kbps, gf.quality); - break; - default: - System.out.printf( - "%s MPEG-%d%s Layer III (%gx) %3d kbps qval=%d\n", - mode_names[gf.force_ms ? 1 : 0][gf.mode.ordinal()], - 2 - gf.version, gf.out_samplerate < 16000 ? ".5" - : "", - 0.1 * (int) (10. * gf.compression_ratio + 0.5), - gf.brate, gf.quality); - break; - } - } - - if (parse.silent <= -10) { - lame.lame_print_internals(gf); - } - System.out.print("|"); - for (int i = 0; i < MAX_WIDTH - 2; i++) { - System.out.print("="); - } - System.out.println("|"); - oldPercent = curPercent = oldConsoleX = 0; - } - } - - private double last_time = 0.0; - - private void encoder_progress(final LameGlobalFlags gf) { - if (parse.silent <= 0) { - int frames = gf.frameNum; - if (parse.update_interval <= 0) { - /* most likely --disptime x not used */ - if ((frames % 100) != 0) { - /* true, most of the time */ - return; - } - } else { - if (frames != 0 && frames != 9) { - double act = System.currentTimeMillis(); - double dif = act - last_time; - if (dif >= 0 && dif < parse.update_interval) { - return; - } - } - last_time = System.currentTimeMillis(); - /* from now! disp_time seconds */ - } - if (parse.brhist) { - hist.brhist_jump_back(); - } - timestatus(gf.frameNum, lame_get_totalframes(gf)); - if (parse.brhist) { - hist.brhist_disp(gf); - } - } - } - - private void encoder_progress_end(final LameGlobalFlags gf) { - if (parse.silent <= 0) { - if (parse.brhist) { - hist.brhist_jump_back(); - } - timestatus(gf.frameNum, lame_get_totalframes(gf)); - if (parse.brhist) { - hist.brhist_disp(gf); - } - System.out.print("|"); - for (int i = 0; i < MAX_WIDTH - 2; i++) { - System.out.print("="); - } - System.out.println("|"); - } - } - - private int oldPercent, curPercent, oldConsoleX; - - private void timestatus(final int frameNum, final int totalframes) { - int percent; - - if (frameNum < totalframes) { - percent = (int) (100. * frameNum / totalframes + 0.5); - } else { - percent = 100; - } - boolean stepped = false; - if (oldPercent != percent) { - progressStep(); - stepped = true; - } - oldPercent = percent; - if (percent == 100) { - for (int i = curPercent; i < 100; i++) { - progressStep(); - stepped = true; - } - } - if (percent == 100 && stepped) { - System.out.println(); - } - } - - private static final int MAX_WIDTH = 79; - - private void progressStep() { - curPercent++; - float consoleX = (float) curPercent * MAX_WIDTH / 100f; - if ((int) consoleX != oldConsoleX) - System.out.print("."); - oldConsoleX = (int) consoleX; - support.firePropertyChange("progress", oldPercent, curPercent); - } - - /** - * LAME's estimate of the total number of frames to be encoded. Only valid - * if calling program set num_samples. - */ - private int lame_get_totalframes(final LameGlobalFlags gfp) { - /* estimate based on user set num_samples: */ - int totalframes = (int) (2 + ((double) gfp.num_samples * gfp.out_samplerate) - / ((double) gfp.in_samplerate * gfp.framesize)); - - return totalframes; - } - - private void WriteBytesSwapped(final DataOutput fp, final short[] p, - final int pPos) throws IOException { - fp.writeShort(p[pPos]); - } - - private void WriteBytes(final DataOutput fp, final short[] p, - final int pPos) throws IOException { - /* No error condition checking */ - fp.write(p[pPos] & 0xff); - fp.write(((p[pPos] & 0xffff) >> 8) & 0xff); - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MeanBits.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MeanBits.java deleted file mode 100644 index 477e3ad62..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/MeanBits.java +++ /dev/null @@ -1,9 +0,0 @@ -package mp3; - -public class MeanBits { - public MeanBits(final int meanBits) { - bits = meanBits; - } - - int bits; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NewMDCT.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NewMDCT.java deleted file mode 100644 index 8a15b9a53..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NewMDCT.java +++ /dev/null @@ -1,1145 +0,0 @@ -/* - * MP3 window subband -> subband filtering -> mdct routine - * - * Copyright (c) 1999-2000 Takehiro Tominaga - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - * Special Thanks to Patrick De Smet for your advices. - */ - -/* $Id: NewMDCT.java,v 1.11 2011/05/24 20:48:06 kenchis Exp $ */ - -package mp3; - -import java.util.Arrays; - -public class NewMDCT { - - private static final float enwindow[] = { - -4.77e-07f * 0.740951125354959f / 2.384e-06f, - 1.03951e-04f * 0.740951125354959f / 2.384e-06f, - 9.53674e-04f * 0.740951125354959f / 2.384e-06f, - 2.841473e-03f * 0.740951125354959f / 2.384e-06f, - 3.5758972e-02f * 0.740951125354959f / 2.384e-06f, - 3.401756e-03f * 0.740951125354959f / 2.384e-06f, - 9.83715e-04f * 0.740951125354959f / 2.384e-06f, - 9.9182e-05f * 0.740951125354959f / 2.384e-06f, /* 15 */ - 1.2398e-05f * 0.740951125354959f / 2.384e-06f, - 1.91212e-04f * 0.740951125354959f / 2.384e-06f, - 2.283096e-03f * 0.740951125354959f / 2.384e-06f, - 1.6994476e-02f * 0.740951125354959f / 2.384e-06f, - -1.8756866e-02f * 0.740951125354959f / 2.384e-06f, - -2.630711e-03f * 0.740951125354959f / 2.384e-06f, - -2.47478e-04f * 0.740951125354959f / 2.384e-06f, - -1.4782e-05f * 0.740951125354959f / 2.384e-06f, - 9.063471690191471e-01f, 1.960342806591213e-01f, - - -4.77e-07f * 0.773010453362737f / 2.384e-06f, - 1.05858e-04f * 0.773010453362737f / 2.384e-06f, - 9.30786e-04f * 0.773010453362737f / 2.384e-06f, - 2.521515e-03f * 0.773010453362737f / 2.384e-06f, - 3.5694122e-02f * 0.773010453362737f / 2.384e-06f, - 3.643036e-03f * 0.773010453362737f / 2.384e-06f, - 9.91821e-04f * 0.773010453362737f / 2.384e-06f, - 9.6321e-05f * 0.773010453362737f / 2.384e-06f, /* 14 */ - 1.1444e-05f * 0.773010453362737f / 2.384e-06f, - 1.65462e-04f * 0.773010453362737f / 2.384e-06f, - 2.110004e-03f * 0.773010453362737f / 2.384e-06f, - 1.6112804e-02f * 0.773010453362737f / 2.384e-06f, - -1.9634247e-02f * 0.773010453362737f / 2.384e-06f, - -2.803326e-03f * 0.773010453362737f / 2.384e-06f, - -2.77042e-04f * 0.773010453362737f / 2.384e-06f, - -1.6689e-05f * 0.773010453362737f / 2.384e-06f, - 8.206787908286602e-01f, 3.901806440322567e-01f, - - -4.77e-07f * 0.803207531480645f / 2.384e-06f, - 1.07288e-04f * 0.803207531480645f / 2.384e-06f, - 9.02653e-04f * 0.803207531480645f / 2.384e-06f, - 2.174854e-03f * 0.803207531480645f / 2.384e-06f, - 3.5586357e-02f * 0.803207531480645f / 2.384e-06f, - 3.858566e-03f * 0.803207531480645f / 2.384e-06f, - 9.95159e-04f * 0.803207531480645f / 2.384e-06f, - 9.3460e-05f * 0.803207531480645f / 2.384e-06f, /* 13 */ - 1.0014e-05f * 0.803207531480645f / 2.384e-06f, - 1.40190e-04f * 0.803207531480645f / 2.384e-06f, - 1.937389e-03f * 0.803207531480645f / 2.384e-06f, - 1.5233517e-02f * 0.803207531480645f / 2.384e-06f, - -2.0506859e-02f * 0.803207531480645f / 2.384e-06f, - -2.974033e-03f * 0.803207531480645f / 2.384e-06f, - -3.07560e-04f * 0.803207531480645f / 2.384e-06f, - -1.8120e-05f * 0.803207531480645f / 2.384e-06f, - 7.416505462720353e-01f, 5.805693545089249e-01f, - - -4.77e-07f * 0.831469612302545f / 2.384e-06f, - 1.08242e-04f * 0.831469612302545f / 2.384e-06f, - 8.68797e-04f * 0.831469612302545f / 2.384e-06f, - 1.800537e-03f * 0.831469612302545f / 2.384e-06f, - 3.5435200e-02f * 0.831469612302545f / 2.384e-06f, - 4.049301e-03f * 0.831469612302545f / 2.384e-06f, - 9.94205e-04f * 0.831469612302545f / 2.384e-06f, - 9.0599e-05f * 0.831469612302545f / 2.384e-06f, /* 12 */ - 9.060e-06f * 0.831469612302545f / 2.384e-06f, - 1.16348e-04f * 0.831469612302545f / 2.384e-06f, - 1.766682e-03f * 0.831469612302545f / 2.384e-06f, - 1.4358521e-02f * 0.831469612302545f / 2.384e-06f, - -2.1372318e-02f * 0.831469612302545f / 2.384e-06f, - -3.14188e-03f * 0.831469612302545f / 2.384e-06f, - -3.39031e-04f * 0.831469612302545f / 2.384e-06f, - -1.9550e-05f * 0.831469612302545f / 2.384e-06f, - 6.681786379192989e-01f, 7.653668647301797e-01f, - - -4.77e-07f * 0.857728610000272f / 2.384e-06f, - 1.08719e-04f * 0.857728610000272f / 2.384e-06f, - 8.29220e-04f * 0.857728610000272f / 2.384e-06f, - 1.399517e-03f * 0.857728610000272f / 2.384e-06f, - 3.5242081e-02f * 0.857728610000272f / 2.384e-06f, - 4.215240e-03f * 0.857728610000272f / 2.384e-06f, - 9.89437e-04f * 0.857728610000272f / 2.384e-06f, - 8.7261e-05f * 0.857728610000272f / 2.384e-06f, /* 11 */ - 8.106e-06f * 0.857728610000272f / 2.384e-06f, - 9.3937e-05f * 0.857728610000272f / 2.384e-06f, - 1.597881e-03f * 0.857728610000272f / 2.384e-06f, - 1.3489246e-02f * 0.857728610000272f / 2.384e-06f, - -2.2228718e-02f * 0.857728610000272f / 2.384e-06f, - -3.306866e-03f * 0.857728610000272f / 2.384e-06f, - -3.71456e-04f * 0.857728610000272f / 2.384e-06f, - -2.1458e-05f * 0.857728610000272f / 2.384e-06f, - 5.993769336819237e-01f, 9.427934736519954e-01f, - - -4.77e-07f * 0.881921264348355f / 2.384e-06f, - 1.08719e-04f * 0.881921264348355f / 2.384e-06f, - 7.8392e-04f * 0.881921264348355f / 2.384e-06f, - 9.71317e-04f * 0.881921264348355f / 2.384e-06f, - 3.5007000e-02f * 0.881921264348355f / 2.384e-06f, - 4.357815e-03f * 0.881921264348355f / 2.384e-06f, - 9.80854e-04f * 0.881921264348355f / 2.384e-06f, - 8.3923e-05f * 0.881921264348355f / 2.384e-06f, /* 10 */ - 7.629e-06f * 0.881921264348355f / 2.384e-06f, - 7.2956e-05f * 0.881921264348355f / 2.384e-06f, - 1.432419e-03f * 0.881921264348355f / 2.384e-06f, - 1.2627602e-02f * 0.881921264348355f / 2.384e-06f, - -2.3074150e-02f * 0.881921264348355f / 2.384e-06f, - -3.467083e-03f * 0.881921264348355f / 2.384e-06f, - -4.04358e-04f * 0.881921264348355f / 2.384e-06f, - -2.3365e-05f * 0.881921264348355f / 2.384e-06f, - 5.345111359507916e-01f, 1.111140466039205e+00f, - - -9.54e-07f * 0.903989293123443f / 2.384e-06f, - 1.08242e-04f * 0.903989293123443f / 2.384e-06f, - 7.31945e-04f * 0.903989293123443f / 2.384e-06f, - 5.15938e-04f * 0.903989293123443f / 2.384e-06f, - 3.4730434e-02f * 0.903989293123443f / 2.384e-06f, - 4.477024e-03f * 0.903989293123443f / 2.384e-06f, - 9.68933e-04f * 0.903989293123443f / 2.384e-06f, - 8.0585e-05f * 0.903989293123443f / 2.384e-06f, /* 9 */ - 6.676e-06f * 0.903989293123443f / 2.384e-06f, - 5.2929e-05f * 0.903989293123443f / 2.384e-06f, - 1.269817e-03f * 0.903989293123443f / 2.384e-06f, - 1.1775017e-02f * 0.903989293123443f / 2.384e-06f, - -2.3907185e-02f * 0.903989293123443f / 2.384e-06f, - -3.622532e-03f * 0.903989293123443f / 2.384e-06f, - -4.38213e-04f * 0.903989293123443f / 2.384e-06f, - -2.5272e-05f * 0.903989293123443f / 2.384e-06f, - 4.729647758913199e-01f, 1.268786568327291e+00f, - - -9.54e-07f * 0.92387953251128675613f / 2.384e-06f, - 1.06812e-04f * 0.92387953251128675613f / 2.384e-06f, - 6.74248e-04f * 0.92387953251128675613f / 2.384e-06f, - 3.3379e-05f * 0.92387953251128675613f / 2.384e-06f, - 3.4412861e-02f * 0.92387953251128675613f / 2.384e-06f, - 4.573822e-03f * 0.92387953251128675613f / 2.384e-06f, - 9.54151e-04f * 0.92387953251128675613f / 2.384e-06f, - 7.6771e-05f * 0.92387953251128675613f / 2.384e-06f, - 6.199e-06f * 0.92387953251128675613f / 2.384e-06f, - 3.4332e-05f * 0.92387953251128675613f / 2.384e-06f, - 1.111031e-03f * 0.92387953251128675613f / 2.384e-06f, - 1.0933399e-02f * 0.92387953251128675613f / 2.384e-06f, - -2.4725437e-02f * 0.92387953251128675613f / 2.384e-06f, - -3.771782e-03f * 0.92387953251128675613f / 2.384e-06f, - -4.72546e-04f * 0.92387953251128675613f / 2.384e-06f, - -2.7657e-05f * 0.92387953251128675613f / 2.384e-06f, - 4.1421356237309504879e-01f, /* tan(PI/8) */ - 1.414213562373095e+00f, - - -9.54e-07f * 0.941544065183021f / 2.384e-06f, - 1.05381e-04f * 0.941544065183021f / 2.384e-06f, - 6.10352e-04f * 0.941544065183021f / 2.384e-06f, - -4.75883e-04f * 0.941544065183021f / 2.384e-06f, - 3.4055710e-02f * 0.941544065183021f / 2.384e-06f, - 4.649162e-03f * 0.941544065183021f / 2.384e-06f, - 9.35555e-04f * 0.941544065183021f / 2.384e-06f, - 7.3433e-05f * 0.941544065183021f / 2.384e-06f, /* 7 */ - 5.245e-06f * 0.941544065183021f / 2.384e-06f, - 1.7166e-05f * 0.941544065183021f / 2.384e-06f, - 9.56535e-04f * 0.941544065183021f / 2.384e-06f, - 1.0103703e-02f * 0.941544065183021f / 2.384e-06f, - -2.5527000e-02f * 0.941544065183021f / 2.384e-06f, - -3.914356e-03f * 0.941544065183021f / 2.384e-06f, - -5.07355e-04f * 0.941544065183021f / 2.384e-06f, - -3.0041e-05f * 0.941544065183021f / 2.384e-06f, - 3.578057213145241e-01f, 1.546020906725474e+00f, - - -9.54e-07f * 0.956940335732209f / 2.384e-06f, - 1.02520e-04f * 0.956940335732209f / 2.384e-06f, - 5.39303e-04f * 0.956940335732209f / 2.384e-06f, - -1.011848e-03f * 0.956940335732209f / 2.384e-06f, - 3.3659935e-02f * 0.956940335732209f / 2.384e-06f, - 4.703045e-03f * 0.956940335732209f / 2.384e-06f, - 9.15051e-04f * 0.956940335732209f / 2.384e-06f, - 7.0095e-05f * 0.956940335732209f / 2.384e-06f, /* 6 */ - 4.768e-06f * 0.956940335732209f / 2.384e-06f, - 9.54e-07f * 0.956940335732209f / 2.384e-06f, - 8.06808e-04f * 0.956940335732209f / 2.384e-06f, - 9.287834e-03f * 0.956940335732209f / 2.384e-06f, - -2.6310921e-02f * 0.956940335732209f / 2.384e-06f, - -4.048824e-03f * 0.956940335732209f / 2.384e-06f, - -5.42164e-04f * 0.956940335732209f / 2.384e-06f, - -3.2425e-05f * 0.956940335732209f / 2.384e-06f, - 3.033466836073424e-01f, 1.662939224605090e+00f, - - -1.431e-06f * 0.970031253194544f / 2.384e-06f, - 9.9182e-05f * 0.970031253194544f / 2.384e-06f, - 4.62532e-04f * 0.970031253194544f / 2.384e-06f, - -1.573563e-03f * 0.970031253194544f / 2.384e-06f, - 3.3225536e-02f * 0.970031253194544f / 2.384e-06f, - 4.737377e-03f * 0.970031253194544f / 2.384e-06f, - 8.91685e-04f * 0.970031253194544f / 2.384e-06f, - 6.6280e-05f * 0.970031253194544f / 2.384e-06f, /* 5 */ - 4.292e-06f * 0.970031253194544f / 2.384e-06f, - -1.3828e-05f * 0.970031253194544f / 2.384e-06f, - 6.61850e-04f * 0.970031253194544f / 2.384e-06f, - 8.487225e-03f * 0.970031253194544f / 2.384e-06f, - -2.7073860e-02f * 0.970031253194544f / 2.384e-06f, - -4.174709e-03f * 0.970031253194544f / 2.384e-06f, - -5.76973e-04f * 0.970031253194544f / 2.384e-06f, - -3.4809e-05f * 0.970031253194544f / 2.384e-06f, - 2.504869601913055e-01f, 1.763842528696710e+00f, - - -1.431e-06f * 0.98078528040323f / 2.384e-06f, - 9.5367e-05f * 0.98078528040323f / 2.384e-06f, - 3.78609e-04f * 0.98078528040323f / 2.384e-06f, - -2.161503e-03f * 0.98078528040323f / 2.384e-06f, - 3.2754898e-02f * 0.98078528040323f / 2.384e-06f, - 4.752159e-03f * 0.98078528040323f / 2.384e-06f, - 8.66413e-04f * 0.98078528040323f / 2.384e-06f, - 6.2943e-05f * 0.98078528040323f / 2.384e-06f, /* 4 */ - 3.815e-06f * 0.98078528040323f / 2.384e-06f, - -2.718e-05f * 0.98078528040323f / 2.384e-06f, - 5.22137e-04f * 0.98078528040323f / 2.384e-06f, - 7.703304e-03f * 0.98078528040323f / 2.384e-06f, - -2.7815342e-02f * 0.98078528040323f / 2.384e-06f, - -4.290581e-03f * 0.98078528040323f / 2.384e-06f, - -6.11782e-04f * 0.98078528040323f / 2.384e-06f, - -3.7670e-05f * 0.98078528040323f / 2.384e-06f, - 1.989123673796580e-01f, 1.847759065022573e+00f, - - -1.907e-06f * 0.989176509964781f / 2.384e-06f, - 9.0122e-05f * 0.989176509964781f / 2.384e-06f, - 2.88486e-04f * 0.989176509964781f / 2.384e-06f, - -2.774239e-03f * 0.989176509964781f / 2.384e-06f, - 3.2248020e-02f * 0.989176509964781f / 2.384e-06f, - 4.748821e-03f * 0.989176509964781f / 2.384e-06f, - 8.38757e-04f * 0.989176509964781f / 2.384e-06f, - 5.9605e-05f * 0.989176509964781f / 2.384e-06f, /* 3 */ - 3.338e-06f * 0.989176509964781f / 2.384e-06f, - -3.9577e-05f * 0.989176509964781f / 2.384e-06f, - 3.88145e-04f * 0.989176509964781f / 2.384e-06f, - 6.937027e-03f * 0.989176509964781f / 2.384e-06f, - -2.8532982e-02f * 0.989176509964781f / 2.384e-06f, - -4.395962e-03f * 0.989176509964781f / 2.384e-06f, - -6.46591e-04f * 0.989176509964781f / 2.384e-06f, - -4.0531e-05f * 0.989176509964781f / 2.384e-06f, - 1.483359875383474e-01f, 1.913880671464418e+00f, - - -1.907e-06f * 0.995184726672197f / 2.384e-06f, - 8.4400e-05f * 0.995184726672197f / 2.384e-06f, - 1.91689e-04f * 0.995184726672197f / 2.384e-06f, - -3.411293e-03f * 0.995184726672197f / 2.384e-06f, - 3.1706810e-02f * 0.995184726672197f / 2.384e-06f, - 4.728317e-03f * 0.995184726672197f / 2.384e-06f, - 8.09669e-04f * 0.995184726672197f / 2.384e-06f, - 5.579e-05f * 0.995184726672197f / 2.384e-06f, - 3.338e-06f * 0.995184726672197f / 2.384e-06f, - -5.0545e-05f * 0.995184726672197f / 2.384e-06f, - 2.59876e-04f * 0.995184726672197f / 2.384e-06f, - 6.189346e-03f * 0.995184726672197f / 2.384e-06f, - -2.9224873e-02f * 0.995184726672197f / 2.384e-06f, - -4.489899e-03f * 0.995184726672197f / 2.384e-06f, - -6.80923e-04f * 0.995184726672197f / 2.384e-06f, - -4.3392e-05f * 0.995184726672197f / 2.384e-06f, - 9.849140335716425e-02f, 1.961570560806461e+00f, - - -2.384e-06f * 0.998795456205172f / 2.384e-06f, - 7.7724e-05f * 0.998795456205172f / 2.384e-06f, - 8.8215e-05f * 0.998795456205172f / 2.384e-06f, - -4.072189e-03f * 0.998795456205172f / 2.384e-06f, - 3.1132698e-02f * 0.998795456205172f / 2.384e-06f, - 4.691124e-03f * 0.998795456205172f / 2.384e-06f, - 7.79152e-04f * 0.998795456205172f / 2.384e-06f, - 5.2929e-05f * 0.998795456205172f / 2.384e-06f, - 2.861e-06f * 0.998795456205172f / 2.384e-06f, - -6.0558e-05f * 0.998795456205172f / 2.384e-06f, - 1.37329e-04f * 0.998795456205172f / 2.384e-06f, - 5.462170e-03f * 0.998795456205172f / 2.384e-06f, - -2.9890060e-02f * 0.998795456205172f / 2.384e-06f, - -4.570484e-03f * 0.998795456205172f / 2.384e-06f, - -7.14302e-04f * 0.998795456205172f / 2.384e-06f, - -4.6253e-05f * 0.998795456205172f / 2.384e-06f, - 4.912684976946725e-02f, 1.990369453344394e+00f, - - 3.5780907e-02f * Util.SQRT2 * 0.5f / 2.384e-06f, - 1.7876148e-02f * Util.SQRT2 * 0.5f / 2.384e-06f, - 3.134727e-03f * Util.SQRT2 * 0.5f / 2.384e-06f, - 2.457142e-03f * Util.SQRT2 * 0.5f / 2.384e-06f, - 9.71317e-04f * Util.SQRT2 * 0.5f / 2.384e-06f, - 2.18868e-04f * Util.SQRT2 * 0.5f / 2.384e-06f, - 1.01566e-04f * Util.SQRT2 * 0.5f / 2.384e-06f, - 1.3828e-05f * Util.SQRT2 * 0.5f / 2.384e-06f, - - 3.0526638e-02f / 2.384e-06f, 4.638195e-03f / 2.384e-06f, - 7.47204e-04f / 2.384e-06f, 4.9591e-05f / 2.384e-06f, - 4.756451e-03f / 2.384e-06f, 2.1458e-05f / 2.384e-06f, - -6.9618e-05f / 2.384e-06f, /* 2.384e-06/2.384e-06 */ - }; - - private static final int NS = 12; - private static final int NL = 36; - - private static final float win[][] = { - { - 2.382191739347913e-13f, - 6.423305872147834e-13f, - 9.400849094049688e-13f, - 1.122435026096556e-12f, - 1.183840321267481e-12f, - 1.122435026096556e-12f, - 9.400849094049690e-13f, - 6.423305872147839e-13f, - 2.382191739347918e-13f, - - 5.456116108943412e-12f, - 4.878985199565852e-12f, - 4.240448995017367e-12f, - 3.559909094758252e-12f, - 2.858043359288075e-12f, - 2.156177623817898e-12f, - 1.475637723558783e-12f, - 8.371015190102974e-13f, - 2.599706096327376e-13f, - - -5.456116108943412e-12f, - -4.878985199565852e-12f, - -4.240448995017367e-12f, - -3.559909094758252e-12f, - -2.858043359288076e-12f, - -2.156177623817898e-12f, - -1.475637723558783e-12f, - -8.371015190102975e-13f, - -2.599706096327376e-13f, - - -2.382191739347923e-13f, - -6.423305872147843e-13f, - -9.400849094049696e-13f, - -1.122435026096556e-12f, - -1.183840321267481e-12f, - -1.122435026096556e-12f, - -9.400849094049694e-13f, - -6.423305872147840e-13f, - -2.382191739347918e-13f, - }, - { - 2.382191739347913e-13f, - 6.423305872147834e-13f, - 9.400849094049688e-13f, - 1.122435026096556e-12f, - 1.183840321267481e-12f, - 1.122435026096556e-12f, - 9.400849094049688e-13f, - 6.423305872147841e-13f, - 2.382191739347918e-13f, - - 5.456116108943413e-12f, - 4.878985199565852e-12f, - 4.240448995017367e-12f, - 3.559909094758253e-12f, - 2.858043359288075e-12f, - 2.156177623817898e-12f, - 1.475637723558782e-12f, - 8.371015190102975e-13f, - 2.599706096327376e-13f, - - -5.461314069809755e-12f, - -4.921085770524055e-12f, - -4.343405037091838e-12f, - -3.732668368707687e-12f, - -3.093523840190885e-12f, - -2.430835727329465e-12f, - -1.734679010007751e-12f, - -9.748253656609281e-13f, - -2.797435120168326e-13f, - - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - -2.283748241799531e-13f, - -4.037858874020686e-13f, - -2.146547464825323e-13f, - }, - { - 1.316524975873958e-01f, /* win[SHORT_TYPE] */ - 4.142135623730950e-01f, - 7.673269879789602e-01f, - - 1.091308501069271e+00f, /* tantab_l */ - 1.303225372841206e+00f, - 1.569685577117490e+00f, - 1.920982126971166e+00f, - 2.414213562373094e+00f, - 3.171594802363212e+00f, - 4.510708503662055e+00f, - 7.595754112725146e+00f, - 2.290376554843115e+01f, - - 0.98480775301220802032f, /* cx */ - 0.64278760968653936292f, - 0.34202014332566882393f, - 0.93969262078590842791f, - -0.17364817766693030343f, - -0.76604444311897790243f, - 0.86602540378443870761f, - 0.500000000000000e+00f, - - -5.144957554275265e-01f, /* ca */ - -4.717319685649723e-01f, - -3.133774542039019e-01f, - -1.819131996109812e-01f, - -9.457419252642064e-02f, - -4.096558288530405e-02f, - -1.419856857247115e-02f, - -3.699974673760037e-03f, - - 8.574929257125442e-01f, /* cs */ - 8.817419973177052e-01f, - 9.496286491027329e-01f, - 9.833145924917901e-01f, - 9.955178160675857e-01f, - 9.991605581781475e-01f, - 9.998991952444470e-01f, - 9.999931550702802e-01f, - }, - { - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 0.000000000000000e+00f, - 2.283748241799531e-13f, - 4.037858874020686e-13f, - 2.146547464825323e-13f, - - 5.461314069809755e-12f, - 4.921085770524055e-12f, - 4.343405037091838e-12f, - 3.732668368707687e-12f, - 3.093523840190885e-12f, - 2.430835727329466e-12f, - 1.734679010007751e-12f, - 9.748253656609281e-13f, - 2.797435120168326e-13f, - - -5.456116108943413e-12f, - -4.878985199565852e-12f, - -4.240448995017367e-12f, - -3.559909094758253e-12f, - -2.858043359288075e-12f, - -2.156177623817898e-12f, - -1.475637723558782e-12f, - -8.371015190102975e-13f, - -2.599706096327376e-13f, - - -2.382191739347913e-13f, - -6.423305872147834e-13f, - -9.400849094049688e-13f, - -1.122435026096556e-12f, - -1.183840321267481e-12f, - -1.122435026096556e-12f, - -9.400849094049688e-13f, - -6.423305872147841e-13f, - -2.382191739347918e-13f, - } - }; - - private static final float tantab_l[] = win[Encoder.SHORT_TYPE]; - private static final float[] cx = win[Encoder.SHORT_TYPE]; - private static final float[] ca = win[Encoder.SHORT_TYPE]; - private static final float[] cs = win[Encoder.SHORT_TYPE]; - - /** - * new IDCT routine written by Takehiro TOMINAGA - * - * PURPOSE: Overlapping window on PCM samples<BR> - * - * SEMANTICS:<BR> - * 32 16-bit pcm samples are scaled to fractional 2's complement and - * concatenated to the end of the window buffer #x#. The updated window - * buffer #x# is then windowed by the analysis window #c# to produce the - * windowed sample #z# - */ - private static final int order[] = { - 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29, - 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31 - }; - - /** - * returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 - */ - private void window_subband(final float[] x1, int x1Pos, final float a[]) { - int wp = 10; - - int x2 = x1Pos + 238 - 14 - 286; - - for (int i = -15; i < 0; i++) { - float w, s, t; - - w = enwindow[wp + -10]; - s = x1[x2 + -224] * w; - t = x1[x1Pos + 224] * w; - w = enwindow[wp + -9]; - s += x1[x2 + -160] * w; - t += x1[x1Pos + 160] * w; - w = enwindow[wp + -8]; - s += x1[x2 + -96] * w; - t += x1[x1Pos + 96] * w; - w = enwindow[wp + -7]; - s += x1[x2 + -32] * w; - t += x1[x1Pos + 32] * w; - w = enwindow[wp + -6]; - s += x1[x2 + 32] * w; - t += x1[x1Pos + -32] * w; - w = enwindow[wp + -5]; - s += x1[x2 + 96] * w; - t += x1[x1Pos + -96] * w; - w = enwindow[wp + -4]; - s += x1[x2 + 160] * w; - t += x1[x1Pos + -160] * w; - w = enwindow[wp + -3]; - s += x1[x2 + 224] * w; - t += x1[x1Pos + -224] * w; - - w = enwindow[wp + -2]; - s += x1[x1Pos + -256] * w; - t -= x1[x2 + 256] * w; - w = enwindow[wp + -1]; - s += x1[x1Pos + -192] * w; - t -= x1[x2 + 192] * w; - w = enwindow[wp + 0]; - s += x1[x1Pos + -128] * w; - t -= x1[x2 + 128] * w; - w = enwindow[wp + 1]; - s += x1[x1Pos + -64] * w; - t -= x1[x2 + 64] * w; - w = enwindow[wp + 2]; - s += x1[x1Pos + 0] * w; - t -= x1[x2 + 0] * w; - w = enwindow[wp + 3]; - s += x1[x1Pos + 64] * w; - t -= x1[x2 + -64] * w; - w = enwindow[wp + 4]; - s += x1[x1Pos + 128] * w; - t -= x1[x2 + -128] * w; - w = enwindow[wp + 5]; - s += x1[x1Pos + 192] * w; - t -= x1[x2 + -192] * w; - - /* - * this multiplyer could be removed, but it needs more 256 FLOAT - * data. thinking about the data cache performance, I think we - * should not use such a huge table. tt 2000/Oct/25 - */ - s *= enwindow[wp + 6]; - w = t - s; - a[30 + i * 2] = t + s; - a[31 + i * 2] = enwindow[wp + 7] * w; - wp += 18; - x1Pos--; - x2++; - } - { - float s, t, u, v; - t = x1[x1Pos + -16] * enwindow[wp + -10]; - s = x1[x1Pos + -32] * enwindow[wp + -2]; - t += (x1[x1Pos + -48] - x1[x1Pos + 16]) * enwindow[wp + -9]; - s += x1[x1Pos + -96] * enwindow[wp + -1]; - t += (x1[x1Pos + -80] + x1[x1Pos + 48]) * enwindow[wp + -8]; - s += x1[x1Pos + -160] * enwindow[wp + 0]; - t += (x1[x1Pos + -112] - x1[x1Pos + 80]) * enwindow[wp + -7]; - s += x1[x1Pos + -224] * enwindow[wp + 1]; - t += (x1[x1Pos + -144] + x1[x1Pos + 112]) * enwindow[wp + -6]; - s -= x1[x1Pos + 32] * enwindow[wp + 2]; - t += (x1[x1Pos + -176] - x1[x1Pos + 144]) * enwindow[wp + -5]; - s -= x1[x1Pos + 96] * enwindow[wp + 3]; - t += (x1[x1Pos + -208] + x1[x1Pos + 176]) * enwindow[wp + -4]; - s -= x1[x1Pos + 160] * enwindow[wp + 4]; - t += (x1[x1Pos + -240] - x1[x1Pos + 208]) * enwindow[wp + -3]; - s -= x1[x1Pos + 224]; - - u = s - t; - v = s + t; - - t = a[14]; - s = a[15] - t; - - a[31] = v + t; /* A0 */ - a[30] = u + s; /* A1 */ - a[15] = u - s; /* A2 */ - a[14] = v - t; /* A3 */ - } - { - float xr; - xr = a[28] - a[0]; - a[0] += a[28]; - a[28] = xr * enwindow[wp + -2 * 18 + 7]; - xr = a[29] - a[1]; - a[1] += a[29]; - a[29] = xr * enwindow[wp + -2 * 18 + 7]; - - xr = a[26] - a[2]; - a[2] += a[26]; - a[26] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[27] - a[3]; - a[3] += a[27]; - a[27] = xr * enwindow[wp + -4 * 18 + 7]; - - xr = a[24] - a[4]; - a[4] += a[24]; - a[24] = xr * enwindow[wp + -6 * 18 + 7]; - xr = a[25] - a[5]; - a[5] += a[25]; - a[25] = xr * enwindow[wp + -6 * 18 + 7]; - - xr = a[22] - a[6]; - a[6] += a[22]; - a[22] = xr * Util.SQRT2; - xr = a[23] - a[7]; - a[7] += a[23]; - a[23] = xr * Util.SQRT2 - a[7]; - a[7] -= a[6]; - a[22] -= a[7]; - a[23] -= a[22]; - - xr = a[6]; - a[6] = a[31] - xr; - a[31] = a[31] + xr; - xr = a[7]; - a[7] = a[30] - xr; - a[30] = a[30] + xr; - xr = a[22]; - a[22] = a[15] - xr; - a[15] = a[15] + xr; - xr = a[23]; - a[23] = a[14] - xr; - a[14] = a[14] + xr; - - xr = a[20] - a[8]; - a[8] += a[20]; - a[20] = xr * enwindow[wp + -10 * 18 + 7]; - xr = a[21] - a[9]; - a[9] += a[21]; - a[21] = xr * enwindow[wp + -10 * 18 + 7]; - - xr = a[18] - a[10]; - a[10] += a[18]; - a[18] = xr * enwindow[wp + -12 * 18 + 7]; - xr = a[19] - a[11]; - a[11] += a[19]; - a[19] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[16] - a[12]; - a[12] += a[16]; - a[16] = xr * enwindow[wp + -14 * 18 + 7]; - xr = a[17] - a[13]; - a[13] += a[17]; - a[17] = xr * enwindow[wp + -14 * 18 + 7]; - - xr = -a[20] + a[24]; - a[20] += a[24]; - a[24] = xr * enwindow[wp + -12 * 18 + 7]; - xr = -a[21] + a[25]; - a[21] += a[25]; - a[25] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[4] - a[8]; - a[4] += a[8]; - a[8] = xr * enwindow[wp + -12 * 18 + 7]; - xr = a[5] - a[9]; - a[5] += a[9]; - a[9] = xr * enwindow[wp + -12 * 18 + 7]; - - xr = a[0] - a[12]; - a[0] += a[12]; - a[12] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[1] - a[13]; - a[1] += a[13]; - a[13] = xr * enwindow[wp + -4 * 18 + 7]; - xr = a[16] - a[28]; - a[16] += a[28]; - a[28] = xr * enwindow[wp + -4 * 18 + 7]; - xr = -a[17] + a[29]; - a[17] += a[29]; - a[29] = xr * enwindow[wp + -4 * 18 + 7]; - - xr = Util.SQRT2 * (a[2] - a[10]); - a[2] += a[10]; - a[10] = xr; - xr = Util.SQRT2 * (a[3] - a[11]); - a[3] += a[11]; - a[11] = xr; - xr = Util.SQRT2 * (-a[18] + a[26]); - a[18] += a[26]; - a[26] = xr - a[18]; - xr = Util.SQRT2 * (-a[19] + a[27]); - a[19] += a[27]; - a[27] = xr - a[19]; - - xr = a[2]; - a[19] -= a[3]; - a[3] -= xr; - a[2] = a[31] - xr; - a[31] += xr; - xr = a[3]; - a[11] -= a[19]; - a[18] -= xr; - a[3] = a[30] - xr; - a[30] += xr; - xr = a[18]; - a[27] -= a[11]; - a[19] -= xr; - a[18] = a[15] - xr; - a[15] += xr; - - xr = a[19]; - a[10] -= xr; - a[19] = a[14] - xr; - a[14] += xr; - xr = a[10]; - a[11] -= xr; - a[10] = a[23] - xr; - a[23] += xr; - xr = a[11]; - a[26] -= xr; - a[11] = a[22] - xr; - a[22] += xr; - xr = a[26]; - a[27] -= xr; - a[26] = a[7] - xr; - a[7] += xr; - - xr = a[27]; - a[27] = a[6] - xr; - a[6] += xr; - - xr = Util.SQRT2 * (a[0] - a[4]); - a[0] += a[4]; - a[4] = xr; - xr = Util.SQRT2 * (a[1] - a[5]); - a[1] += a[5]; - a[5] = xr; - xr = Util.SQRT2 * (a[16] - a[20]); - a[16] += a[20]; - a[20] = xr; - xr = Util.SQRT2 * (a[17] - a[21]); - a[17] += a[21]; - a[21] = xr; - - xr = -Util.SQRT2 * (a[8] - a[12]); - a[8] += a[12]; - a[12] = xr - a[8]; - xr = -Util.SQRT2 * (a[9] - a[13]); - a[9] += a[13]; - a[13] = xr - a[9]; - xr = -Util.SQRT2 * (a[25] - a[29]); - a[25] += a[29]; - a[29] = xr - a[25]; - xr = -Util.SQRT2 * (a[24] + a[28]); - a[24] -= a[28]; - a[28] = xr - a[24]; - - xr = a[24] - a[16]; - a[24] = xr; - xr = a[20] - xr; - a[20] = xr; - xr = a[28] - xr; - a[28] = xr; - - xr = a[25] - a[17]; - a[25] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[17] - a[1]; - a[17] = xr; - xr = a[9] - xr; - a[9] = xr; - xr = a[25] - xr; - a[25] = xr; - xr = a[5] - xr; - a[5] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[13] - xr; - a[13] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[1] - a[0]; - a[1] = xr; - xr = a[16] - xr; - a[16] = xr; - xr = a[17] - xr; - a[17] = xr; - xr = a[8] - xr; - a[8] = xr; - xr = a[9] - xr; - a[9] = xr; - xr = a[24] - xr; - a[24] = xr; - xr = a[25] - xr; - a[25] = xr; - xr = a[4] - xr; - a[4] = xr; - xr = a[5] - xr; - a[5] = xr; - xr = a[20] - xr; - a[20] = xr; - xr = a[21] - xr; - a[21] = xr; - xr = a[12] - xr; - a[12] = xr; - xr = a[13] - xr; - a[13] = xr; - xr = a[28] - xr; - a[28] = xr; - xr = a[29] - xr; - a[29] = xr; - - xr = a[0]; - a[0] += a[31]; - a[31] -= xr; - xr = a[1]; - a[1] += a[30]; - a[30] -= xr; - xr = a[16]; - a[16] += a[15]; - a[15] -= xr; - xr = a[17]; - a[17] += a[14]; - a[14] -= xr; - xr = a[8]; - a[8] += a[23]; - a[23] -= xr; - xr = a[9]; - a[9] += a[22]; - a[22] -= xr; - xr = a[24]; - a[24] += a[7]; - a[7] -= xr; - xr = a[25]; - a[25] += a[6]; - a[6] -= xr; - xr = a[4]; - a[4] += a[27]; - a[27] -= xr; - xr = a[5]; - a[5] += a[26]; - a[26] -= xr; - xr = a[20]; - a[20] += a[11]; - a[11] -= xr; - xr = a[21]; - a[21] += a[10]; - a[10] -= xr; - xr = a[12]; - a[12] += a[19]; - a[19] -= xr; - xr = a[13]; - a[13] += a[18]; - a[18] -= xr; - xr = a[28]; - a[28] += a[3]; - a[3] -= xr; - xr = a[29]; - a[29] += a[2]; - a[2] -= xr; - } - } - - /** - * Function: Calculation of the MDCT In the case of long blocks (type 0,1,3) - * there are 36 coefficents in the time domain and 18 in the frequency - * domain.<BR> - * In the case of short blocks (type 2) there are 3 transformations with - * short length. This leads to 12 coefficents in the time and 6 in the - * frequency domain. In this case the results are stored side by side in the - * vector out[]. - * - * New layer3 - */ - private void mdct_short(final float[] inout, int inoutPos) { - for (int l = 0; l < 3; l++) { - float tc0, tc1, tc2, ts0, ts1, ts2; - - ts0 = inout[inoutPos + 2 * 3] * win[Encoder.SHORT_TYPE][0] - - inout[inoutPos + 5 * 3]; - tc0 = inout[inoutPos + 0 * 3] * win[Encoder.SHORT_TYPE][2] - - inout[inoutPos + 3 * 3]; - tc1 = ts0 + tc0; - tc2 = ts0 - tc0; - - ts0 = inout[inoutPos + 5 * 3] * win[Encoder.SHORT_TYPE][0] - + inout[inoutPos + 2 * 3]; - tc0 = inout[inoutPos + 3 * 3] * win[Encoder.SHORT_TYPE][2] - + inout[inoutPos + 0 * 3]; - ts1 = ts0 + tc0; - ts2 = -ts0 + tc0; - - tc0 = (inout[inoutPos + 1 * 3] * win[Encoder.SHORT_TYPE][1] - inout[inoutPos + 4 * 3]) * 2.069978111953089e-11f; - /* - * tritab_s [ 1 ] - */ - ts0 = (inout[inoutPos + 4 * 3] * win[Encoder.SHORT_TYPE][1] + inout[inoutPos + 1 * 3]) * 2.069978111953089e-11f; - /* - * tritab_s [ 1 ] - */ - inout[inoutPos + 3 * 0] = tc1 * 1.907525191737280e-11f + tc0; - /* - * tritab_s[ 2 ] - */ - inout[inoutPos + 3 * 5] = -ts1 * 1.907525191737280e-11f + ts0; - /* - * tritab_s[0 ] - */ - tc2 = tc2 * 0.86602540378443870761f * 1.907525191737281e-11f; - /* - * tritab_s[ 2] - */ - ts1 = ts1 * 0.5f * 1.907525191737281e-11f + ts0; - inout[inoutPos + 3 * 1] = tc2 - ts1; - inout[inoutPos + 3 * 2] = tc2 + ts1; - - tc1 = tc1 * 0.5f * 1.907525191737281e-11f - tc0; - ts2 = ts2 * 0.86602540378443870761f * 1.907525191737281e-11f; - /* - * tritab_s[ 0] - */ - inout[inoutPos + 3 * 3] = tc1 + ts2; - inout[inoutPos + 3 * 4] = tc1 - ts2; - - inoutPos++; - } - } - - final void mdct_long(final float[] out, final int outPos, final float[] in) { - float ct, st; - { - float tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8; - /* 1,2, 5,6, 9,10, 13,14, 17 */ - tc1 = in[17] - in[9]; - tc3 = in[15] - in[11]; - tc4 = in[14] - in[12]; - ts5 = in[0] + in[8]; - ts6 = in[1] + in[7]; - ts7 = in[2] + in[6]; - ts8 = in[3] + in[5]; - - out[outPos + 17] = (ts5 + ts7 - ts8) - (ts6 - in[4]); - st = (ts5 + ts7 - ts8) * cx[12 + 7] + (ts6 - in[4]); - ct = (tc1 - tc3 - tc4) * cx[12 + 6]; - out[outPos + 5] = ct + st; - out[outPos + 6] = ct - st; - - tc2 = (in[16] - in[10]) * cx[12 + 6]; - ts6 = ts6 * cx[12 + 7] + in[4]; - ct = tc1 * cx[12 + 0] + tc2 + tc3 * cx[12 + 1] + tc4 * cx[12 + 2]; - st = -ts5 * cx[12 + 4] + ts6 - ts7 * cx[12 + 5] + ts8 * cx[12 + 3]; - out[outPos + 1] = ct + st; - out[outPos + 2] = ct - st; - - ct = tc1 * cx[12 + 1] - tc2 - tc3 * cx[12 + 2] + tc4 * cx[12 + 0]; - st = -ts5 * cx[12 + 5] + ts6 - ts7 * cx[12 + 3] + ts8 * cx[12 + 4]; - out[outPos + 9] = ct + st; - out[outPos + 10] = ct - st; - - ct = tc1 * cx[12 + 2] - tc2 + tc3 * cx[12 + 0] - tc4 * cx[12 + 1]; - st = ts5 * cx[12 + 3] - ts6 + ts7 * cx[12 + 4] - ts8 * cx[12 + 5]; - out[outPos + 13] = ct + st; - out[outPos + 14] = ct - st; - } - { - float ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8; - - ts1 = in[8] - in[0]; - ts3 = in[6] - in[2]; - ts4 = in[5] - in[3]; - tc5 = in[17] + in[9]; - tc6 = in[16] + in[10]; - tc7 = in[15] + in[11]; - tc8 = in[14] + in[12]; - - out[outPos + 0] = (tc5 + tc7 + tc8) + (tc6 + in[13]); - ct = (tc5 + tc7 + tc8) * cx[12 + 7] - (tc6 + in[13]); - st = (ts1 - ts3 + ts4) * cx[12 + 6]; - out[outPos + 11] = ct + st; - out[outPos + 12] = ct - st; - - ts2 = (in[7] - in[1]) * cx[12 + 6]; - tc6 = in[13] - tc6 * cx[12 + 7]; - ct = tc5 * cx[12 + 3] - tc6 + tc7 * cx[12 + 4] + tc8 * cx[12 + 5]; - st = ts1 * cx[12 + 2] + ts2 + ts3 * cx[12 + 0] + ts4 * cx[12 + 1]; - out[outPos + 3] = ct + st; - out[outPos + 4] = ct - st; - - ct = -tc5 * cx[12 + 5] + tc6 - tc7 * cx[12 + 3] - tc8 * cx[12 + 4]; - st = ts1 * cx[12 + 1] + ts2 - ts3 * cx[12 + 2] - ts4 * cx[12 + 0]; - out[outPos + 7] = ct + st; - out[outPos + 8] = ct - st; - - ct = -tc5 * cx[12 + 4] + tc6 - tc7 * cx[12 + 5] - tc8 * cx[12 + 3]; - st = ts1 * cx[12 + 0] - ts2 + ts3 * cx[12 + 1] - ts4 * cx[12 + 2]; - out[outPos + 15] = ct + st; - out[outPos + 16] = ct - st; - } - } - - public final void mdct_sub48(final LameInternalFlags gfc, final float[] w0, - final float[] w1) { - float[] wk = w0; - int wkPos = 286; - /* thinking cache performance, ch->gr loop is better than gr->ch loop */ - for (int ch = 0; ch < gfc.channels_out; ch++) { - for (int gr = 0; gr < gfc.mode_gr; gr++) { - int band; - final GrInfo gi = (gfc.l3_side.tt[gr][ch]); - float[] mdct_enc = gi.xr; - int mdct_encPos = 0; - float[][] samp = gfc.sb_sample[ch][1 - gr]; - int sampPos = 0; - - for (int k = 0; k < 18 / 2; k++) { - window_subband(wk, wkPos, samp[sampPos]); - window_subband(wk, wkPos + 32, samp[sampPos + 1]); - sampPos += 2; - wkPos += 64; - /* - * Compensate for inversion in the analysis filter - */ - for (band = 1; band < 32; band += 2) { - samp[sampPos - 1][band] *= -1; - } - } - - /* - * Perform imdct of 18 previous subband samples + 18 current - * subband samples - */ - for (band = 0; band < 32; band++, mdct_encPos += 18) { - int type = gi.block_type; - float[][] band0 = gfc.sb_sample[ch][gr]; - float[][] band1 = gfc.sb_sample[ch][1 - gr]; - if (gi.mixed_block_flag != 0 && band < 2) - type = 0; - if (gfc.amp_filter[band] < 1e-12) { - Arrays.fill(mdct_enc, mdct_encPos + 0, - mdct_encPos + 18, 0); - } else { - if (gfc.amp_filter[band] < 1.0) { - for (int k = 0; k < 18; k++) - band1[k][order[band]] *= gfc.amp_filter[band]; - } - if (type == Encoder.SHORT_TYPE) { - for (int k = -NS / 4; k < 0; k++) { - float w = win[Encoder.SHORT_TYPE][k + 3]; - mdct_enc[mdct_encPos + k * 3 + 9] = band0[9 + k][order[band]] - * w - band0[8 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 18] = band0[14 - k][order[band]] - * w + band0[15 + k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 10] = band0[15 + k][order[band]] - * w - band0[14 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 19] = band1[2 - k][order[band]] - * w + band1[3 + k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 11] = band1[3 + k][order[band]] - * w - band1[2 - k][order[band]]; - mdct_enc[mdct_encPos + k * 3 + 20] = band1[8 - k][order[band]] - * w + band1[9 + k][order[band]]; - } - mdct_short(mdct_enc, mdct_encPos); - } else { - float work[] = new float[18]; - for (int k = -NL / 4; k < 0; k++) { - float a, b; - a = win[type][k + 27] - * band1[k + 9][order[band]] - + win[type][k + 36] - * band1[8 - k][order[band]]; - b = win[type][k + 9] - * band0[k + 9][order[band]] - - win[type][k + 18] - * band0[8 - k][order[band]]; - work[k + 9] = a - b * tantab_l[3 + k + 9]; - work[k + 18] = a * tantab_l[3 + k + 9] + b; - } - - mdct_long(mdct_enc, mdct_encPos, work); - } - } - /* - * Perform aliasing reduction butterfly - */ - if (type != Encoder.SHORT_TYPE && band != 0) { - for (int k = 7; k >= 0; --k) { - float bu, bd; - bu = mdct_enc[mdct_encPos + k] * ca[20 + k] - + mdct_enc[mdct_encPos + -1 - k] - * cs[28 + k]; - bd = mdct_enc[mdct_encPos + k] * cs[28 + k] - - mdct_enc[mdct_encPos + -1 - k] - * ca[20 + k]; - - mdct_enc[mdct_encPos + -1 - k] = bu; - mdct_enc[mdct_encPos + k] = bd; - } - } - } - } - wk = w1; - wkPos = 286; - if (gfc.mode_gr == 1) { - for (int i = 0; i < 18; i++) { - System.arraycopy(gfc.sb_sample[ch][1][i], 0, - gfc.sb_sample[ch][0][i], 0, 32); - } - } - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NsPsy.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NsPsy.java deleted file mode 100644 index f79b5f8fd..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/NsPsy.java +++ /dev/null @@ -1,21 +0,0 @@ -package mp3; - -/** - * Variables used for --nspsytune - * - * @author Ken - * - */ -public class NsPsy { - float last_en_subshort[][] = new float[4][9]; - int lastAttacks[] = new int[4]; - float pefirbuf[] = new float[19]; - float longfact[] = new float[Encoder.SBMAX_l]; - float shortfact[] = new float[Encoder.SBMAX_s]; - - /** - * short block tuning - */ - float attackthre; - float attackthre_s; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PSY.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PSY.java deleted file mode 100644 index d42c44da0..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PSY.java +++ /dev/null @@ -1,24 +0,0 @@ -package mp3; - -/** - * PSY Model related stuff - */ -public class PSY { - /** - * The dbQ stuff. - */ - float mask_adjust; - /** - * The dbQ stuff. - */ - float mask_adjust_short; - /* at transition from one scalefactor band to next */ - /** - * Band weight long scalefactor bands. - */ - float bo_l_weight[] = new float[Encoder.SBMAX_l]; - /** - * Band weight short scalefactor bands. - */ - float bo_s_weight[] = new float[Encoder.SBMAX_s]; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Parse.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Parse.java deleted file mode 100644 index ef838b8cd..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Parse.java +++ /dev/null @@ -1,1885 +0,0 @@ -/* - * Command line parsing related functions - * - * Copyright (c) 1999 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Parse.java,v 1.28 2011/05/24 22:17:17 kenchis Exp $ */ - -package mp3; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.PrintStream; -import java.io.RandomAccessFile; -import java.nio.ByteOrder; -import java.util.ArrayList; -import java.util.Scanner; - -import mp3.GetAudio.sound_file_format; - -public class Parse { - - private static boolean INTERNAL_OPTS = false; - - Version ver; - ID3Tag id3; - Presets pre; - - public final void setModules(Version ver2, ID3Tag id32, Presets pre2) { - this.ver = ver2; - this.id3 = id32; - this.pre = pre2; - } - - public GetAudio.sound_file_format input_format; - /** - * force byte swapping default=0 - */ - public boolean swapbytes = false; - /** - * Verbosity - */ - public int silent; - /** - * Ignore errors in values passed for tags - */ - private boolean ignore_tag_errors; - public boolean brhist; - /** - * to use Frank's time status display - */ - public float update_interval; - /** - * to adjust the number of samples truncated during decode - */ - public int mp3_delay; - /** - * user specified the value of the mp3 encoder delay to assume for decoding - */ - public boolean mp3_delay_set; - - public boolean disable_wav_header; - /** - * used by MP3 - */ - public MP3Data mp3input_data = new MP3Data(); - /** - * print info whether waveform clips - */ - public boolean print_clipping_info; - - /** - * WAV signed - */ - public boolean in_signed = true; - - public ByteOrder in_endian = ByteOrder.LITTLE_ENDIAN; - - public int in_bitwidth = 16; - - /** - * possible text encodings - */ - private enum TextEncoding { - /** - * bytes will be stored as-is into ID3 tags, which are Latin1/UCS2 per - * definition - */ - TENC_RAW, /** - * text will be converted from local encoding to Latin1, as - * ID3 needs it - */ - TENC_LATIN1, /** - * text will be converted from local encoding to UCS-2, as - * ID3v2 wants it - */ - TENC_UCS2 - } - - private boolean set_id3tag(final LameGlobalFlags gfp, final int type, - final String str) { - switch (type) { - case 'a': - id3.id3tag_set_artist(gfp, str); - return false; - case 't': - id3.id3tag_set_title(gfp, str); - return false; - case 'l': - id3.id3tag_set_album(gfp, str); - return false; - case 'g': - id3.id3tag_set_genre(gfp, str); - return false; - case 'c': - id3.id3tag_set_comment(gfp, str); - return false; - case 'n': - id3.id3tag_set_track(gfp, str); - return false; - case 'y': - id3.id3tag_set_year(gfp, str); - return false; - case 'v': - id3.id3tag_set_fieldvalue(gfp, str); - return false; - } - return false; - } - - private boolean set_id3v2tag(final LameGlobalFlags gfp, final int type, - final String str) { - switch (type) { - case 'a': - id3.id3tag_set_textinfo_ucs2(gfp, "TPE1", str); - return false; - case 't': - id3.id3tag_set_textinfo_ucs2(gfp, "TIT2", str); - return false; - case 'l': - id3.id3tag_set_textinfo_ucs2(gfp, "TALB", str); - return false; - case 'g': - id3.id3tag_set_textinfo_ucs2(gfp, "TCON", str); - return false; - case 'c': - id3.id3tag_set_comment(gfp, null, null, str, 0); - return false; - case 'n': - id3.id3tag_set_textinfo_ucs2(gfp, "TRCK", str); - return false; - } - return false; - } - - private boolean id3_tag(final LameGlobalFlags gfp, final int type, - final TextEncoding enc, final String str) { - String x = null; - boolean result; - switch (enc) { - default: - case TENC_RAW: - x = str; - break; - case TENC_LATIN1: - x = str/* toLatin1(str) */; - break; - case TENC_UCS2: - x = str/* toUcs2(str) */; - break; - } - switch (enc) { - default: - case TENC_RAW: - case TENC_LATIN1: - result = set_id3tag(gfp, type, x); - break; - case TENC_UCS2: - result = set_id3v2tag(gfp, type, x); - break; - } - return result; - } - - /** - * PURPOSE: Writes version and license to the file specified by fp - */ - private void lame_version_print(final PrintStream fp) { - final String b = ver.getLameOsBitness(); - final String v = ver.getLameVersion(); - final String u = ver.getLameUrl(); - final int lenb = b.length(); - final int lenv = v.length(); - final int lenu = u.length(); - /* line width of terminal in characters */ - final int lw = 80; - /* static width of text */ - final int sw = 16; - - if (lw >= lenb + lenv + lenu + sw || lw < lenu + 2) - /* text fits in 80 chars per line, or line even too small for url */ - if (lenb > 0) - fp.printf("LAME %s version %s (%s)\n\n", b, v, u); - else - fp.printf("LAME version %s (%s)\n\n", v, u); - else { - /* text too long, wrap url into next line, right aligned */ - if (lenb > 0) - fp.printf("LAME %s version %s\n%*s(%s)\n\n", b, v, lw - 2 - - lenu, "", u); - else - fp.printf("LAME version %s\n%*s(%s)\n\n", v, lw - 2 - lenu, "", - u); - } - } - - private void print_license(final PrintStream fp) { - /* print version & license */ - lame_version_print(fp); - fp.printf("Can I use LAME in my commercial program?\n" - + "\n" - + "Yes, you can, under the restrictions of the LGPL. In particular, you\n" - + "can include a compiled version of the LAME library (for example,\n" - + "lame.dll) with a commercial program. Some notable requirements of\n" - + "the LGPL:\n" + "\n"); - fp.printf("1. In your program, you cannot include any source code from LAME, with\n" - + " the exception of files whose only purpose is to describe the library\n" - + " interface (such as lame.h).\n" + "\n"); - fp.printf("2. Any modifications of LAME must be released under the LGPL.\n" - + " The LAME project (www.mp3dev.org) would appreciate being\n" - + " notified of any modifications.\n" + "\n"); - fp.printf("3. You must give prominent notice that your program is:\n" - + " A. using LAME (including version number)\n" - + " B. LAME is under the LGPL\n" - + " C. Provide a copy of the LGPL. (the file COPYING contains the LGPL)\n" - + " D. Provide a copy of LAME source, or a pointer where the LAME\n" - + " source can be obtained (such as http://sourceforge.net/projects/jsidplay2/)\n" - + " An example of prominent notice would be an \"About the LAME encoding engine\"\n" - + " button in some pull down menu within the executable of your program.\n" - + "\n"); - fp.printf("4. If you determine that distribution of LAME requires a patent license,\n" - + " you must obtain such license.\n" + "\n" + "\n"); - fp.printf("*** IMPORTANT NOTE ***\n" - + "\n" - + "The decoding functions provided in LAME use the mpglib decoding engine which\n" - + "is under the GPL. They may not be used by any program not released under the\n" - + "GPL unless you obtain such permission from the MPG123 project (www.mpg123.de).\n" - + "\n"); - } - - /** - * PURPOSE: Writes command line syntax to the file specified by fp - */ - public final void usage(final PrintStream fp, final String ProgramName) { - // print general syntax - lame_version_print(fp); - fp.printf( - "usage: %s [options] <infile> [outfile]\n" - + "\n" - + " <infile> and/or <outfile> can be \"-\", which means stdin/stdout.\n" - + "\n" - + "Try:\n" - + " \"%s --help\" for general usage information\n" - + " or:\n" - + " \"%s --preset help\" for information on suggested predefined settings\n" - + " or:\n" - + " \"%s --longhelp\"\n" - + " or \"%s -?\" for a complete options list\n\n", - ProgramName, ProgramName, ProgramName, ProgramName, ProgramName); - } - - /** - * PURPOSE: Writes command line syntax to the file specified by fp but only - * the most important ones, to fit on a vt100 terminal - */ - private void short_help(final LameGlobalFlags gfp, final PrintStream fp, - final String ProgramName) { - /* print short syntax help */ - lame_version_print(fp); - fp.printf( - "usage: %s [options] <infile> [outfile]\n" - + "\n" - + " <infile> and/or <outfile> can be \"-\", which means stdin/stdout.\n" - + "\n" + "RECOMMENDED:\n" - + " lame -V 2 input.wav output.mp3\n" + "\n", - ProgramName); - fp.printf( - "OPTIONS:\n" - + " -b bitrate set the bitrate, default 128 kbps\n" - + " -h higher quality, but a little slower. Recommended.\n" - + " -f fast mode (lower quality)\n" - + " -V n quality setting for VBR. default n=%d\n" - + " 0=high quality,bigger files. 9=smaller files\n", - gfp.VBR_q); - fp.printf(" --preset type type must be \"medium\", \"standard\", \"extreme\", \"insane\",\n" - + " or a value for an average desired bitrate and depending\n" - + " on the value specified, appropriate quality settings will\n" - + " be used.\n" - + " \"--preset help\" gives more info on these\n" - + "\n"); - fp.printf(" --longhelp full list of options\n" + "\n" - + " --license print License information\n\n"); - } - - private void long_help(final LameGlobalFlags gfp, final PrintStream fp, - final String ProgramName, final int lessmode) { - // print long syntax help - lame_version_print(fp); - fp.printf( - "usage: %s [options] <infile> [outfile]\n" - + "\n" - + " <infile> and/or <outfile> can be \"-\", which means stdin/stdout.\n" - + "\n" + "RECOMMENDED:\n" - + " lame -V2 input.wav output.mp3\n" + "\n", - ProgramName); - fp.printf("OPTIONS:\n" - + " Input options:\n" - + " --scale <arg> scale input (multiply PCM data) by <arg>\n" - + " --scale-l <arg> scale channel 0 (left) input (multiply PCM data) by <arg>\n" - + " --scale-r <arg> scale channel 1 (right) input (multiply PCM data) by <arg>\n" - + " --mp1input input file is a MPEG Layer I file\n" - + " --mp2input input file is a MPEG Layer II file\n" - + " --mp3input input file is a MPEG Layer III file\n" - + " --nogap <file1> <file2> <...>\n" - + " gapless encoding for a set of contiguous files\n" - + " --nogapout <dir>\n" - + " output dir for gapless encoding (must precede --nogap)\n" - + " --nogaptags allow the use of VBR tags in gapless encoding\n"); - fp.printf("\n" - + " Input options for RAW PCM:\n" - + " -r input is raw pcm\n" - + " -x force byte-swapping of input\n" - + " -s sfreq sampling frequency of input file (kHz) - default 44.1 kHz\n" - + " --bitwidth w input bit width is w (default 16)\n" - + " --signed input is signed (default)\n" - + " --unsigned input is unsigned\n" - + " --little-endian input is little-endian (default)\n" - + " --big-endian input is big-endian\n"); - - fp.printf(" Operational options:\n" - + " -a downmix from stereo to mono file for mono encoding\n" - + " -m <mode> (j)oint, (s)imple, (f)orce, (d)dual-mono, (m)ono\n" - + " default is (j) or (s) depending on bitrate\n" - + " joint = joins the best possible of MS and LR stereo\n" - + " simple = force LR stereo on all frames\n" - + " force = force MS stereo on all frames.\n" - + " --preset type type must be \"medium\", \"standard\", \"extreme\", \"insane\",\n" - + " or a value for an average desired bitrate and depending\n" - + " on the value specified, appropriate quality settings will\n" - + " be used.\n" - + " \"--preset help\" gives more info on these\n" - + " --comp <arg> choose bitrate to achive a compression ratio of <arg>\n"); - fp.printf(" --replaygain-fast compute RG fast but slightly inaccurately (default)\n" - + " --replaygain-accurate compute RG more accurately and find the peak sample\n" - + " --noreplaygain disable ReplayGain analysis\n" - + " --clipdetect enable --replaygain-accurate and print a message whether\n" - + " clipping occurs and how far the waveform is from full scale\n"); - fp.printf(" --freeformat produce a free format bitstream\n" - + " --decode input=mp3 file, output=wav\n" - + " -t disable writing wav header when using --decode\n"); - - fp.printf(" Verbosity:\n" - + " --disptime <arg>print progress report every arg seconds\n" - + " -S don't print progress report, VBR histograms\n" - + " --nohist disable VBR histogram display\n" - + " --silent don't print anything on screen\n" - + " --quiet don't print anything on screen\n" - + " --brief print more useful information\n" - + " --verbose print a lot of useful information\n" - + "\n"); - fp.printf(" Noise shaping & psycho acoustic algorithms:\n" - + " -q <arg> <arg> = 0...9. Default -q 5 \n" - + " -q 0: Highest quality, very slow \n" - + " -q 9: Poor quality, but fast \n" - + " -h Same as -q 2. Recommended.\n" - + " -f Same as -q 7. Fast, ok quality\n"); - - fp.printf(" CBR (constant bitrate, the default) options:\n" - + " -b <bitrate> set the bitrate in kbps, default 128 kbps\n" - + " --cbr enforce use of constant bitrate\n" - + "\n" - + " ABR options:\n" - + " --abr <bitrate> specify average bitrate desired (instead of quality)\n" - + "\n"); - fp.printf( - " VBR options:\n" - + " -V n quality setting for VBR. default n=%d\n" - + " 0=high quality,bigger files. 9=smaller files\n" - + " -v the same as -V 4\n" - + " --vbr-old use old variable bitrate (VBR) routine\n" - + " --vbr-new use new variable bitrate (VBR) routine (default)\n", - gfp.VBR_q); - fp.printf(" -b <bitrate> specify minimum allowed bitrate, default 32 kbps\n" - + " -B <bitrate> specify maximum allowed bitrate, default 320 kbps\n" - + " -F strictly enforce the -b option, for use with players that\n" - + " do not support low bitrate mp3\n" - + " -t disable writing LAME Tag\n" - + " -T enable and force writing LAME Tag\n"); - - fp.printf(" ATH related:\n" - + " --noath turns ATH down to a flat noise floor\n" - + " --athshort ignore GPSYCHO for short blocks, use ATH only\n" - + " --athonly ignore GPSYCHO completely, use ATH only\n" - + " --athtype n selects between different ATH types [0-4]\n" - + " --athlower x lowers ATH by x dB\n"); - fp.printf(" --athaa-type n ATH auto adjust: 0 'no' else 'loudness based'\n" - + - /** - * OBSOLETE - * " --athaa-loudapprox n n=1 total energy or n=2 equal loudness curve\n" - */ - " --athaa-sensitivity x activation offset in -/+ dB for ATH auto-adjustment\n" - + "\n"); - - fp.printf(" PSY related:\n" - + " --short use short blocks when appropriate\n" - + " --noshort do not use short blocks\n" - + " --allshort use only short blocks\n"); - fp.printf(" --temporal-masking x x=0 disables, x=1 enables temporal masking effect\n" - + " --nssafejoint M/S switching criterion\n" - + " --nsmsfix <arg> M/S switching tuning [effective 0-3.5]\n" - + " --interch x adjust inter-channel masking ratio\n" - + " --ns-bass x adjust masking for sfbs 0 - 6 (long) 0 - 5 (short)\n" - + " --ns-alto x adjust masking for sfbs 7 - 13 (long) 6 - 10 (short)\n" - + " --ns-treble x adjust masking for sfbs 14 - 21 (long) 11 - 12 (short)\n"); - fp.printf(" --ns-sfb21 x change ns-treble by x dB for sfb21\n" - + " --shortthreshold x,y short block switching threshold,\n" - + " x for L/R/M channel, y for S channel\n" - + " Noise Shaping related:\n" - + " --substep n use pseudo substep noise shaping method types 0-2\n"); - - fp.printf(" experimental switches:\n" - + " -X n[,m] selects between different noise measurements\n" - + " n for long block, m for short. if m is omitted, m = n\n" - + " -Y lets LAME ignore noise in sfb21, like in CBR\n" - + " -Z [n] currently no effects\n"); - - fp.printf(" MP3 header/stream options:\n" - + " -e <emp> de-emphasis n/5/c (obsolete)\n" - + " -c mark as copyright\n" - + " -o mark as non-original\n" - + " -p error protection. adds 16 bit checksum to every frame\n" - + " (the checksum is computed correctly)\n" - + " --nores disable the bit reservoir\n" - + " --strictly-enforce-ISO comply as much as possible to ISO MPEG spec\n" - + "\n"); - fp.printf(" Filter options:\n" - + " --lowpass <freq> frequency(kHz), lowpass filter cutoff above freq\n" - + " --lowpass-width <freq> frequency(kHz) - default 15%% of lowpass freq\n" - + " --highpass <freq> frequency(kHz), highpass filter cutoff below freq\n" - + " --highpass-width <freq> frequency(kHz) - default 15%% of highpass freq\n"); - fp.printf(" --resample <sfreq> sampling frequency of output file(kHz)- default=automatic\n"); - - fp.printf(" ID3 tag options:\n" - + " --tt <title> audio/song title (max 30 chars for version 1 tag)\n" - + " --ta <artist> audio/song artist (max 30 chars for version 1 tag)\n" - + " --tl <album> audio/song album (max 30 chars for version 1 tag)\n" - + " --ty <year> audio/song year of issue (1 to 9999)\n" - + " --tc <comment> user-defined text (max 30 chars for v1 tag, 28 for v1.1)\n" - + " --tn <track[/total]> audio/song track number and (optionally) the total\n" - + " number of tracks on the original recording. (track\n" - + " and total each 1 to 255. just the track number\n" - + " creates v1.1 tag, providing a total forces v2.0).\n" - + " --tg <genre> audio/song genre (name or number in list)\n" - + " --ti <file> audio/song albumArt (jpeg/png/gif file, 128KB max, v2.3)\n" - + " --tv <id=value> user-defined frame specified by id and value (v2.3 tag)\n"); - fp.printf(" --add-id3v2 force addition of version 2 tag\n" - + " --id3v1-only add only a version 1 tag\n" - + " --id3v2-only add only a version 2 tag\n" - + " --space-id3v1 pad version 1 tag with spaces instead of nulls\n" - + " --pad-id3v2 same as '--pad-id3v2-size 128'\n" - + " --pad-id3v2-size <value> adds version 2 tag, pad with extra <value> bytes\n" - + " --genre-list print alphabetically sorted ID3 genre list and exit\n" - + " --ignore-tag-errors ignore errors in values passed for tags\n" - + "\n"); - fp.printf(" Note: A version 2 tag will NOT be added unless one of the input fields\n" - + " won't fit in a version 1 tag (e.g. the title string is longer than 30\n" - + " characters), or the '--add-id3v2' or '--id3v2-only' options are used,\n" - + " or output is redirected to stdout.\n" - + "\nMisc:\n --license print License information\n\n"); - - display_bitrates(fp); - } - - public final void display_bitrates(final PrintStream fp) { - display_bitrate(fp, "1", 1, 1); - display_bitrate(fp, "2", 2, 0); - display_bitrate(fp, "2.5", 4, 0); - fp.println(); - } - - private void display_bitrate(final PrintStream fp, final String version, - final int d, final int indx) { - int nBitrates = 14; - if (d == 4) - nBitrates = 8; - - fp.printf( - "\nMPEG-%-3s layer III sample frequencies (kHz): %2d %2d %g\n" - + "bitrates (kbps):", version, 32 / d, 48 / d, 44.1 / d); - for (int i = 1; i <= nBitrates; i++) - fp.printf(" %2d", Tables.bitrate_table[indx][i]); - fp.println(); - } - - /** - * PURPOSE: Writes presetting info to #stdout# - */ - private void presets_longinfo_dm(final PrintStream msgfp) { - msgfp.printf("\n" - + "The --preset switches are aliases over LAME settings.\n" - + "\n" + "\n"); - msgfp.printf("To activate these presets:\n" + "\n" - + " For VBR modes (generally highest quality):\n" + "\n"); - msgfp.printf(" \"--preset medium\" This preset should provide near transparency\n" - + " to most people on most music.\n" - + "\n" - + " \"--preset standard\" This preset should generally be transparent\n" - + " to most people on most music and is already\n" - + " quite high in quality.\n" - + "\n"); - msgfp.printf(" \"--preset extreme\" If you have extremely good hearing and similar\n" - + " equipment, this preset will generally provide\n" - + " slightly higher quality than the \"standard\"\n" - + " mode.\n" + "\n"); - msgfp.printf(" For CBR 320kbps (highest quality possible from the --preset switches):\n" - + "\n" - + " \"--preset insane\" This preset will usually be overkill for most\n" - + " people and most situations, but if you must\n" - + " have the absolute highest quality with no\n" - + " regard to filesize, this is the way to go.\n" - + "\n"); - msgfp.printf(" For ABR modes (high quality per given bitrate but not as high as VBR):\n" - + "\n" - + " \"--preset <kbps>\" Using this preset will usually give you good\n" - + " quality at a specified bitrate. Depending on the\n" - + " bitrate entered, this preset will determine the\n"); - msgfp.printf(" optimal settings for that particular situation.\n" - + " While this approach works, it is not nearly as\n" - + " flexible as VBR, and usually will not attain the\n" - + " same level of quality as VBR at higher bitrates.\n" - + "\n"); - msgfp.printf("The following options are also available for the corresponding profiles:\n" - + "\n" - + " <fast> standard\n" - + " <fast> extreme\n" - + " insane\n" - + " <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n" - + " simply specify a bitrate. For example:\n" - + " \"--preset 185\" activates this\n" - + " preset and uses 185 as an average kbps.\n" - + "\n"); - msgfp.printf(" \"fast\" - Enables the fast VBR mode for a particular profile.\n" - + "\n"); - msgfp.printf(" \"cbr\" - If you use the ABR mode (read above) with a significant\n" - + " bitrate such as 80, 96, 112, 128, 160, 192, 224, 256, 320,\n" - + " you can use the \"cbr\" option to force CBR mode encoding\n" - + " instead of the standard abr mode. ABR does provide higher\n" - + " quality but CBR may be useful in situations such as when\n" - + " streaming an mp3 over the internet may be important.\n" - + "\n"); - msgfp.printf(" For example:\n" + "\n" - + " \"--preset fast standard <input file> <output file>\"\n" - + " or \"--preset cbr 192 <input file> <output file>\"\n" - + " or \"--preset 172 <input file> <output file>\"\n" - + " or \"--preset extreme <input file> <output file>\"\n" - + "\n" + "\n"); - msgfp.printf("A few aliases are also available for ABR mode:\n" - + "phone => 16kbps/mono phon+/lw/mw-eu/sw => 24kbps/mono\n" - + "mw-us => 40kbps/mono voice => 56kbps/mono\n" - + "fm/radio/tape => 112kbps hifi => 160kbps\n" - + "cd => 192kbps studio => 256kbps\n"); - } - - private int presets_set(final LameGlobalFlags gfp, final int fast, - final int cbr, String preset_name, final String ProgramName) { - int mono = 0; - - if ((preset_name.equals("help")) && (fast < 1) && (cbr < 1)) { - lame_version_print(System.out); - presets_longinfo_dm(System.out); - return -1; - } - - /* aliases for compatibility with old presets */ - - if (preset_name.equals("phone")) { - preset_name = "16"; - mono = 1; - } - if ((preset_name.equals("phon+")) || (preset_name.equals("lw")) - || (preset_name.equals("mw-eu")) || (preset_name.equals("sw"))) { - preset_name = "24"; - mono = 1; - } - if (preset_name.equals("mw-us")) { - preset_name = "40"; - mono = 1; - } - if (preset_name.equals("voice")) { - preset_name = "56"; - mono = 1; - } - if (preset_name.equals("fm")) { - preset_name = "112"; - } - if ((preset_name.equals("radio")) || (preset_name.equals("tape"))) { - preset_name = "112"; - } - if (preset_name.equals("hifi")) { - preset_name = "160"; - } - if (preset_name.equals("cd")) { - preset_name = "192"; - } - if (preset_name.equals("studio")) { - preset_name = "256"; - } - - if (preset_name.equals("medium")) { - pre.lame_set_VBR_q(gfp, 4); - if (fast > 0) { - gfp.VBR = VbrMode.vbr_mtrh; - } else { - gfp.VBR = VbrMode.vbr_rh; - } - return 0; - } - - if (preset_name.equals("standard")) { - pre.lame_set_VBR_q(gfp, 2); - if (fast > 0) { - gfp.VBR = VbrMode.vbr_mtrh; - } else { - gfp.VBR = VbrMode.vbr_rh; - } - return 0; - } - - else if (preset_name.equals("extreme")) { - pre.lame_set_VBR_q(gfp, 0); - if (fast > 0) { - gfp.VBR = VbrMode.vbr_mtrh; - } else { - gfp.VBR = VbrMode.vbr_rh; - } - return 0; - } - - else if ((preset_name.equals("insane")) && (fast < 1)) { - - gfp.preset = Lame.INSANE; - pre.apply_preset(gfp, Lame.INSANE, 1); - - return 0; - } - - /* Generic ABR Preset */ - if (((Integer.valueOf(preset_name)) > 0) && (fast < 1)) { - if ((Integer.valueOf(preset_name)) >= 8 - && (Integer.valueOf(preset_name)) <= 320) { - gfp.preset = Integer.valueOf(preset_name); - pre.apply_preset(gfp, Integer.valueOf(preset_name), 1); - - if (cbr == 1) - gfp.VBR = VbrMode.vbr_off; - - if (mono == 1) { - gfp.mode = MPEGMode.MONO; - } - - return 0; - - } else { - lame_version_print(System.err); - System.err - .printf("Error: The bitrate specified is out of the valid range for this preset\n" - + "\n" - + "When using this mode you must enter a value between \"32\" and \"320\"\n" - + "\n" - + "For further information try: \"%s --preset help\"\n", - ProgramName); - return -1; - } - } - - lame_version_print(System.err); - System.err - .printf("Error: You did not enter a valid profile and/or options with --preset\n" - + "\n" - + "Available profiles are:\n" - + "\n" - + " <fast> medium\n" - + " <fast> standard\n" - + " <fast> extreme\n" - + " insane\n" - + " <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n" - + " simply specify a bitrate. For example:\n" - + " \"--preset 185\" activates this\n" - + " preset and uses 185 as an average kbps.\n" - + "\n"); - System.err - .printf(" Some examples:\n" - + "\n" - + " or \"%s --preset fast standard <input file> <output file>\"\n" - + " or \"%s --preset cbr 192 <input file> <output file>\"\n" - + " or \"%s --preset 172 <input file> <output file>\"\n" - + " or \"%s --preset extreme <input file> <output file>\"\n" - + "\n" - + "For further information try: \"%s --preset help\"\n", - ProgramName, ProgramName, ProgramName, ProgramName, - ProgramName); - return -1; - } - - /** - * LAME is a simple frontend which just uses the file extension to determine - * the file type. Trying to analyze the file contents is well beyond the - * scope of LAME and should not be added. - */ - private sound_file_format filename_to_type(String FileName) { - int len = FileName.length(); - - if (len < 4) - return sound_file_format.sf_unknown; - - FileName = FileName.substring(len - 4); - if (FileName.equalsIgnoreCase(".mpg")) - return sound_file_format.sf_mp123; - if (FileName.equalsIgnoreCase(".mp1")) - return sound_file_format.sf_mp123; - if (FileName.equalsIgnoreCase(".mp2")) - return sound_file_format.sf_mp123; - if (FileName.equalsIgnoreCase(".mp3")) - return sound_file_format.sf_mp123; - if (FileName.equalsIgnoreCase(".wav")) - return sound_file_format.sf_wave; - if (FileName.equalsIgnoreCase(".aif")) - return sound_file_format.sf_aiff; - if (FileName.equalsIgnoreCase(".raw")) - return sound_file_format.sf_raw; - if (FileName.equalsIgnoreCase(".ogg")) - return sound_file_format.sf_ogg; - return GetAudio.sound_file_format.sf_unknown; - } - - private int resample_rate(double freq) { - if (freq >= 1.e3) - freq *= 1.e-3; - - switch ((int) freq) { - case 8: - return 8000; - case 11: - return 11025; - case 12: - return 12000; - case 16: - return 16000; - case 22: - return 22050; - case 24: - return 24000; - case 32: - return 32000; - case 44: - return 44100; - case 48: - return 48000; - default: - System.err.printf("Illegal resample frequency: %.3f kHz\n", freq); - return 0; - } - } - - private int set_id3_albumart(final LameGlobalFlags gfp, - final String file_name) { - int ret = -1; - RandomAccessFile fpi = null; - - if (file_name == null) { - return 0; - } - try { - fpi = new RandomAccessFile(file_name, "r"); - try { - int size = (int) (fpi.length() & Integer.MAX_VALUE); - byte[] albumart = new byte[size]; - fpi.readFully(albumart); - ret = id3.id3tag_set_albumart(gfp, albumart, size) ? 0 : 4; - } catch (IOException e) { - ret = 3; - } finally { - try { - fpi.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } catch (FileNotFoundException e1) { - ret = 1; - } - switch (ret) { - case 1: - System.err.printf("Could not find: '%s'.\n", file_name); - break; - case 2: - System.err - .printf("Insufficient memory for reading the albumart.\n"); - break; - case 3: - System.err.printf("Read error: '%s'.\n", file_name); - break; - case 4: - System.err - .printf("Unsupported image: '%s'.\nSpecify JPEG/PNG/GIF image (128KB maximum)\n", - file_name); - break; - default: - break; - } - return ret; - } - - private enum ID3TAG_MODE { - ID3TAG_MODE_DEFAULT, ID3TAG_MODE_V1_ONLY, ID3TAG_MODE_V2_ONLY - }; - - public static class NoGap { - int num_nogap; - } - - public int parse_args(final LameGlobalFlags gfp, - final ArrayList<String> argv, final StringBuilder inPath, - final StringBuilder outPath, final String[] nogap_inPath, - final NoGap ng) { - /* set to 1 if we parse an input file name */ - int input_file = 0; - int autoconvert = 0; - double val; - int nogap = 0; - /* set to 1 to use VBR tags in NOGAP mode */ - int nogap_tags = 0; - final String ProgramName = "lame"; - int count_nogap = 0; - /* is RG explicitly disabled by the user */ - int noreplaygain = 0; - ID3TAG_MODE id3tag_mode = ID3TAG_MODE.ID3TAG_MODE_DEFAULT; - - inPath.setLength(0); - outPath.setLength(0); - /* turn on display options. user settings may turn them off below */ - silent = 0; - ignore_tag_errors = false; - brhist = true; - mp3_delay = 0; - mp3_delay_set = false; - print_clipping_info = false; - disable_wav_header = false; - id3.id3tag_init(gfp); - - /* process args */ - for (int i = 0; i < argv.size(); i++) { - char c; - String token; - int tokenPos = 0; - String arg; - String nextArg; - int argUsed; - - token = argv.get(i); - if (token.charAt(tokenPos++) == '-') { - argUsed = 0; - nextArg = i + 1 < argv.size() ? argv.get(i + 1) : ""; - - if (token.length() - tokenPos == 0) { - /* The user wants to use stdin and/or stdout. */ - input_file = 1; - if (inPath.length() == 0) { - inPath.setLength(0); - inPath.append(argv.get(i)); - } else if (outPath.length() == 0) { - outPath.setLength(0); - outPath.append(argv.get(i)); - } - } - if (token.charAt(tokenPos) == '-') { /* GNU style */ - tokenPos++; - - if (token.substring(tokenPos).equalsIgnoreCase("resample")) { - argUsed = 1; - gfp.out_samplerate = resample_rate(Double - .parseDouble(nextArg)); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "vbr-old")) { - gfp.VBR = VbrMode.vbr_rh; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "vbr-new")) { - gfp.VBR = VbrMode.vbr_mtrh; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "vbr-mtrh")) { - gfp.VBR = VbrMode.vbr_mtrh; - - } else if (token.substring(tokenPos) - .equalsIgnoreCase("cbr")) { - gfp.VBR = VbrMode.vbr_off; - - } else if (token.substring(tokenPos) - .equalsIgnoreCase("abr")) { - argUsed = 1; - gfp.VBR = VbrMode.vbr_abr; - gfp.VBR_mean_bitrate_kbps = Integer.valueOf(nextArg); - /* - * values larger than 8000 are bps (like Fraunhofer), so - * it's strange to get 320000 bps MP3 when specifying - * 8000 bps MP3 - */ - if (gfp.VBR_mean_bitrate_kbps >= 8000) - gfp.VBR_mean_bitrate_kbps = (gfp.VBR_mean_bitrate_kbps + 500) / 1000; - - gfp.VBR_mean_bitrate_kbps = Math.min( - gfp.VBR_mean_bitrate_kbps, 320); - gfp.VBR_mean_bitrate_kbps = Math.max( - gfp.VBR_mean_bitrate_kbps, 8); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "r3mix")) { - gfp.preset = Lame.R3MIX; - pre.apply_preset(gfp, Lame.R3MIX, 1); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "bitwidth")) { - argUsed = 1; - in_bitwidth = Integer.valueOf(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "signed")) { - in_signed = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "unsigned")) { - in_signed = false; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "little-endian")) { - in_endian = ByteOrder.LITTLE_ENDIAN; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "big-endian")) { - in_endian = ByteOrder.BIG_ENDIAN; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "mp1input")) { - input_format = GetAudio.sound_file_format.sf_mp1; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "mp2input")) { - input_format = GetAudio.sound_file_format.sf_mp2; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "mp3input")) { - input_format = GetAudio.sound_file_format.sf_mp3; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "ogginput")) { - System.err - .printf("sorry, vorbis support in LAME is deprecated.\n"); - return -1; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "phone")) { - if (presets_set(gfp, 0, 0, token, ProgramName) < 0) - return -1; - System.err - .printf("Warning: --phone is deprecated, use --preset phone instead!"); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "voice")) { - if (presets_set(gfp, 0, 0, token, ProgramName) < 0) - return -1; - System.err - .printf("Warning: --voice is deprecated, use --preset voice instead!"); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "noshort")) { - gfp.short_blocks = ShortBlock.short_block_dispensed; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "short")) { - gfp.short_blocks = ShortBlock.short_block_allowed; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "allshort")) { - gfp.short_blocks = ShortBlock.short_block_forced; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "decode")) { - gfp.decode_only = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "decode-mp3delay")) { - mp3_delay = Integer.valueOf(nextArg); - mp3_delay_set = true; - argUsed = 1; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nores")) { - gfp.disable_reservoir = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "strictly-enforce-ISO")) { - gfp.strict_ISO = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "scale")) { - argUsed = 1; - gfp.scale = (float) Double.parseDouble(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "scale-l")) { - argUsed = 1; - gfp.scale_left = (float) Double.parseDouble(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "scale-r")) { - argUsed = 1; - gfp.scale_right = (float) Double.parseDouble(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "freeformat")) { - gfp.free_format = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "replaygain-fast")) { - gfp.findReplayGain = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "replaygain-accurate")) { - gfp.decode_on_the_fly = true; - gfp.findReplayGain = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "noreplaygain")) { - noreplaygain = 1; - gfp.findReplayGain = false; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "clipdetect")) { - print_clipping_info = true; - gfp.decode_on_the_fly = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nohist")) { - brhist = false; - - /* options for ID3 tag */ - } else if (token.substring(tokenPos).equalsIgnoreCase("tt")) { - argUsed = 1; - id3_tag(gfp, 't', TextEncoding.TENC_RAW, nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase("ta")) { - argUsed = 1; - id3_tag(gfp, 'a', TextEncoding.TENC_RAW, nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase("tl")) { - argUsed = 1; - id3_tag(gfp, 'l', TextEncoding.TENC_RAW, nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase("ty")) { - argUsed = 1; - id3_tag(gfp, 'y', TextEncoding.TENC_RAW, nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase("tc")) { - argUsed = 1; - id3_tag(gfp, 'c', TextEncoding.TENC_RAW, nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase("tn")) { - boolean ret = id3_tag(gfp, 'n', TextEncoding.TENC_RAW, - nextArg); - argUsed = 1; - if (ret) { - if (!ignore_tag_errors) { - if (id3tag_mode == ID3TAG_MODE.ID3TAG_MODE_V1_ONLY) { - System.err - .printf("The track number has to be between 1 and 255 for ID3v1.\n"); - return -1; - } else if (id3tag_mode == ID3TAG_MODE.ID3TAG_MODE_V2_ONLY) { - /* - * track will be stored as-is in ID3v2 case, - * so no problem here - */ - } else { - if (silent < 10) { - System.err - .printf("The track number has to be between 1 and 255 for ID3v1, ignored for ID3v1.\n"); - } - } - } - } - - } else if (token.substring(tokenPos).equalsIgnoreCase("tg")) { - id3_tag(gfp, 'g', TextEncoding.TENC_RAW, nextArg); - argUsed = 1; - - } else if (token.substring(tokenPos).equalsIgnoreCase("tv")) { - argUsed = 1; - if (id3_tag(gfp, 'v', TextEncoding.TENC_RAW, nextArg)) { - if (silent < 10) { - System.err.printf( - "Invalid field value: '%s'. Ignored\n", - nextArg); - } - } - - } else if (token.substring(tokenPos).equalsIgnoreCase("ti")) { - argUsed = 1; - if (set_id3_albumart(gfp, nextArg) != 0) { - if (!ignore_tag_errors) { - return -1; - } - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "ignore-tag-errors")) { - ignore_tag_errors = true; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "add-id3v2")) { - id3.id3tag_add_v2(gfp); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "id3v1-only")) { - id3.id3tag_v1_only(gfp); - id3tag_mode = ID3TAG_MODE.ID3TAG_MODE_V1_ONLY; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "id3v2-only")) { - id3.id3tag_v2_only(gfp); - id3tag_mode = ID3TAG_MODE.ID3TAG_MODE_V2_ONLY; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "space-id3v1")) { - id3.id3tag_space_v1(gfp); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "pad-id3v2")) { - id3.id3tag_pad_v2(gfp); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "pad-id3v2-size")) { - int n = Integer.valueOf(nextArg); - n = n <= 128000 ? n : 128000; - n = n >= 0 ? n : 0; - id3.id3tag_set_pad(gfp, n); - argUsed = 1; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "genre-list")) { - id3.id3tag_genre_list(new GenreListHandler() { - - public void genre_list_handler(int num, String name) { - System.out.printf("%3d %s\n", num, name); - } - - }); - return -2; - - // XXX Unsupported: some experimental switches for - // setting ID3 tags - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "lowpass")) { - val = Double.parseDouble(nextArg); - argUsed = 1; - if (val < 0) { - gfp.lowpassfreq = -1; - } else { - /* useful are 0.001 kHz...50 kHz, 50 Hz...50000 Hz */ - if (val < 0.001 || val > 50000.) { - System.err - .printf("Must specify lowpass with --lowpass freq, freq >= 0.001 kHz\n"); - return -1; - } - gfp.lowpassfreq = (int) (val - * (val < 50. ? 1.e3 : 1.e0) + 0.5); - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "lowpass-width")) { - val = Double.parseDouble(nextArg); - argUsed = 1; - /* useful are 0.001 kHz...16 kHz, 16 Hz...50000 Hz */ - if (val < 0.001 || val > 50000.) { - System.err - .printf("Must specify lowpass width with --lowpass-width freq, freq >= 0.001 kHz\n"); - return -1; - } - gfp.lowpassfreq = (int) (val - * (val < 16. ? 1.e3 : 1.e0) + 0.5); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "highpass")) { - val = Double.parseDouble(nextArg); - argUsed = 1; - if (val < 0.0) { - gfp.highpassfreq = -1; - } else { - /* useful are 0.001 kHz...16 kHz, 16 Hz...50000 Hz */ - if (val < 0.001 || val > 50000.) { - System.err - .printf("Must specify highpass with --highpass freq, freq >= 0.001 kHz\n"); - return -1; - } - gfp.highpassfreq = (int) (val - * (val < 16. ? 1.e3 : 1.e0) + 0.5); - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "highpass-width")) { - val = Double.parseDouble(nextArg); - argUsed = 1; - /* useful are 0.001 kHz...16 kHz, 16 Hz...50000 Hz */ - if (val < 0.001 || val > 50000.) { - System.err - .printf("Must specify highpass width with --highpass-width freq, freq >= 0.001 kHz\n"); - return -1; - } - gfp.highpasswidth = (int) val; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "comp")) { - argUsed = 1; - val = Double.parseDouble(nextArg); - if (val < 1.0) { - System.err - .printf("Must specify compression ratio >= 1.0\n"); - return -1; - } - gfp.compression_ratio = (float) val; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "notemp")) { - gfp.useTemporal = false; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "interch")) { - argUsed = 1; - gfp.interChRatio = (float) Double.parseDouble(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "temporal-masking")) { - argUsed = 1; - gfp.useTemporal = Integer.valueOf(nextArg) != 0; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nssafejoint")) { - gfp.exp_nspsytune = gfp.exp_nspsytune | 2; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nsmsfix")) { - argUsed = 1; - gfp.msfix = (float) Double.parseDouble(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "ns-bass")) { - argUsed = 1; - { - double d; - int k; - d = Double.parseDouble(nextArg); - k = (int) (d * 4); - if (k < -32) - k = -32; - if (k > 31) - k = 31; - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2); - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "ns-alto")) { - argUsed = 1; - { - double d; - int k; - d = Double.parseDouble(nextArg); - k = (int) (d * 4); - if (k < -32) - k = -32; - if (k > 31) - k = 31; - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 8); - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "ns-treble")) { - argUsed = 1; - { - double d; - int k; - d = Double.parseDouble(nextArg); - k = (int) (d * 4); - if (k < -32) - k = -32; - if (k > 31) - k = 31; - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 14); - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "ns-sfb21")) { - /* - * to be compatible with Naoki's original code, ns-sfb21 - * specifies how to change ns-treble for sfb21 - */ - argUsed = 1; - { - double d; - int k; - d = Double.parseDouble(nextArg); - k = (int) (d * 4); - if (k < -32) - k = -32; - if (k > 31) - k = 31; - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 20); - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nspsytune2")) { - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "quiet") - || token.substring(tokenPos).equalsIgnoreCase( - "silent")) { - silent = 10; /* on a scale from 1 to 10 be very silent */ - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "brief")) { - silent = -5; /* print few info on screen */ - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "verbose")) { - silent = -10; /* print a lot on screen */ - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "version") - || token.substring(tokenPos).equalsIgnoreCase( - "license")) { - print_license(System.out); - return -2; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "help") - || token.substring(tokenPos).equalsIgnoreCase( - "usage")) { - short_help(gfp, System.out, ProgramName); - return -2; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "longhelp")) { - long_help(gfp, System.out, ProgramName, 0 /* lessmode=NO */); - return -2; - - } else if (token.substring(tokenPos).equalsIgnoreCase("?")) { - long_help(gfp, System.out, ProgramName, 1 /* lessmode=YES */); - return -2; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "preset") - || token.substring(tokenPos).equalsIgnoreCase( - "alt-preset")) { - argUsed = 1; - { - int fast = 0, cbr = 0; - - while ((nextArg.equals("fast")) - || (nextArg.equals("cbr"))) { - - if ((nextArg.equals("fast")) && (fast < 1)) - fast = 1; - if ((nextArg.equals("cbr")) && (cbr < 1)) - cbr = 1; - - argUsed++; - nextArg = i + argUsed < argv.size() ? argv - .get(i + argUsed) : ""; - } - - if (presets_set(gfp, fast, cbr, nextArg, - ProgramName) < 0) - return -1; - } - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "disptime")) { - argUsed = 1; - update_interval = (float) Double.parseDouble(nextArg); - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nogaptags")) { - nogap_tags = 1; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nogapout")) { - outPath.setLength(0); - outPath.append(nextArg); - argUsed = 1; - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "nogap")) { - nogap = 1; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "tune")) { /* without helptext */ - argUsed = 1; - { - gfp.tune_value_a = (float) Double - .parseDouble(nextArg); - gfp.tune = true; - } - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "shortthreshold")) { - { - float x, y; - Scanner sc = new Scanner(nextArg); - x = sc.nextFloat(); - if (!sc.hasNext()) { - y = x; - } else { - sc.nextByte(); - y = sc.nextFloat(); - } - argUsed = 1; - gfp.internal_flags.nsPsy.attackthre = x; - gfp.internal_flags.nsPsy.attackthre_s = y; - } - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "maskingadjust")) { /* without helptext */ - argUsed = 1; - gfp.maskingadjust = (float) Double.parseDouble(nextArg); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "maskingadjustshort")) { /* without helptext */ - argUsed = 1; - gfp.maskingadjust_short = (float) Double - .parseDouble(nextArg); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "athcurve")) { /* without helptext */ - argUsed = 1; - gfp.ATHcurve = (float) Double.parseDouble(nextArg); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "no-preset-tune")) { /* without helptext */ - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "substep")) { - argUsed = 1; - gfp.internal_flags.substep_shaping = Integer - .valueOf(nextArg); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "sbgain")) { /* without helptext */ - argUsed = 1; - gfp.internal_flags.subblock_gain = Integer - .valueOf(nextArg); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "sfscale")) { /* without helptext */ - gfp.internal_flags.noise_shaping = 2; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "noath")) { - gfp.noATH = true; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "athonly")) { - gfp.ATHonly = true; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "athshort")) { - gfp.ATHshort = true; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "athlower")) { - argUsed = 1; - gfp.ATHlower = -(float) Double.parseDouble(nextArg) / 10.0f; - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "athtype")) { - argUsed = 1; - gfp.ATHtype = Integer.valueOf(nextArg); - - } else if (INTERNAL_OPTS - && token.substring(tokenPos).equalsIgnoreCase( - "athaa-type")) { - /* - * switch for developing, no DOCU - */ - argUsed = 1; - /* - * once was 1:Gaby, 2:Robert, 3:Jon, else:off - */ - gfp.athaa_type = Integer.valueOf(nextArg); - /* - * now: 0:off else:Jon - */ - - } else if (token.substring(tokenPos).equalsIgnoreCase( - "athaa-sensitivity")) { - argUsed = 1; - gfp.athaa_sensitivity = (float) Double - .parseDouble(nextArg); - - } else { - { - System.err.printf("%s: unrecognized option --%s\n", - ProgramName, token); - return -1; - } - } - i += argUsed; - - } else { - while (tokenPos < token.length()) { - c = token.charAt(tokenPos++); - - arg = tokenPos < token.length() ? token : nextArg; - switch (c) { - case 'm': - argUsed = 1; - - switch (arg.charAt(0)) { - case 's': - gfp.mode = MPEGMode.STEREO; - break; - case 'd': - gfp.mode = MPEGMode.DUAL_CHANNEL; - break; - case 'f': - gfp.force_ms = true; - /* FALLTHROUGH */ - case 'j': - gfp.mode = MPEGMode.JOINT_STEREO; - break; - case 'm': - gfp.mode = MPEGMode.MONO; - break; - case 'a': - gfp.mode = MPEGMode.JOINT_STEREO; - break; - default: - System.err - .printf("%s: -m mode must be s/d/j/f/m not %s\n", - ProgramName, arg); - return -1; - } - break; - - case 'V': - argUsed = 1; - /* to change VBR default look in lame.h */ - if (gfp.VBR == VbrMode.vbr_off) { - gfp.VBR_q = VbrMode.vbr_default.ordinal(); - gfp.VBR_q_frac = 0; - } - gfp.VBR_q = (int) (float) Double.parseDouble(arg); - gfp.VBR_q_frac = (float) Double.parseDouble(arg) - - gfp.VBR_q; - break; - case 'v': - /* to change VBR default look in lame.h */ - if (gfp.VBR == VbrMode.vbr_off) - gfp.VBR = VbrMode.vbr_mtrh; - break; - - case 'q': - argUsed = 1; - { - int tmp_quality = Integer.valueOf(arg); - - /* - * XXX should we move this into - * lame_set_quality()? - */ - if (tmp_quality < 0) - tmp_quality = 0; - if (tmp_quality > 9) - tmp_quality = 9; - - gfp.quality = tmp_quality; - } - break; - case 'f': - gfp.quality = 7; - break; - case 'h': - gfp.quality = 2; - break; - - case 's': - argUsed = 1; - val = Double.parseDouble(arg); - gfp.in_samplerate = (int) (val - * (val <= 192 ? 1.e3 : 1.e0) + 0.5); - break; - case 'b': - argUsed = 1; - gfp.brate = Integer.valueOf(arg); - - if (gfp.brate > 320) { - gfp.disable_reservoir = true; - } - gfp.VBR_min_bitrate_kbps = gfp.brate; - break; - case 'B': - argUsed = 1; - gfp.VBR_max_bitrate_kbps = Integer.valueOf(arg); - break; - case 'F': - gfp.VBR_hard_min = 1; - break; - case 't': /* dont write VBR tag */ - gfp.bWriteVbrTag = false; - disable_wav_header = true; - break; - case 'T': /* do write VBR tag */ - gfp.bWriteVbrTag = true; - nogap_tags = 1; - disable_wav_header = false; - break; - case 'r': /* force raw pcm input file */ - input_format = sound_file_format.sf_raw; - break; - case 'x': /* force byte swapping */ - swapbytes = true; - break; - case 'p': - /* - * (jo) error_protection: add crc16 information to - * stream - */ - gfp.error_protection = true; - break; - case 'a': - /* - * autoconvert input file from stereo to mono - for - * mono mp3 encoding - */ - autoconvert = 1; - gfp.mode = MPEGMode.MONO; - break; - case 'S': - silent = 10; - break; - case 'X': - /* - * experimental switch -X: the differnt types of - * quant compare are tough to communicate to - * endusers, so they shouldn't bother to toy around - * with them - */ - { - int x, y; - Scanner sc = new Scanner(arg); - x = sc.nextInt(); - if (!sc.hasNext()) { - y = x; - } else { - sc.nextByte(); - y = sc.nextInt(); - } - argUsed = 1; - if (INTERNAL_OPTS) { - gfp.quant_comp = x; - gfp.quant_comp_short = y; - } - } - break; - case 'Y': - gfp.experimentalY = true; - break; - case 'Z': - /* - * experimental switch -Z: this switch is obsolete - */ - { - int n = 1; - Scanner sc = new Scanner(arg); - n = sc.nextInt(); - if (INTERNAL_OPTS) { - gfp.experimentalZ = n; - } - } - break; - case 'e': - argUsed = 1; - - switch (arg.charAt(0)) { - case 'n': - gfp.emphasis = 0; - break; - case '5': - gfp.emphasis = 1; - break; - case 'c': - gfp.emphasis = 3; - break; - default: - System.err.printf( - "%s: -e emp must be n/5/c not %s\n", - ProgramName, arg); - return -1; - } - break; - case 'c': - gfp.copyright = 1; - break; - case 'o': - gfp.original = 0; - break; - - case '?': - long_help(gfp, System.out, ProgramName, 0 /* - * LESSMODE=NO - */); - return -1; - - default: - System.err.printf("%s: unrecognized option -%c\n", - ProgramName, c); - return -1; - } - if (argUsed != 0) { - if (arg == token) - token = ""; /* no more from token */ - else - ++i; /* skip arg we used */ - arg = ""; - argUsed = 0; - } - } - } - } else { - if (nogap != 0) { - if ((ng != null) && (count_nogap < ng.num_nogap)) { - nogap_inPath[count_nogap++] = argv.get(i); - input_file = 1; - } else { - /* sorry, calling program did not allocate enough space */ - System.err - .printf("Error: 'nogap option'. Calling program does not allow nogap option, or\n" - + "you have exceeded maximum number of input files for the nogap option\n"); - ng.num_nogap = -1; - return -1; - } - } else { - /* normal options: inputfile [outputfile] */ - if (inPath.length() == 0) { - inPath.setLength(0); - inPath.append(argv.get(i)); - input_file = 1; - } else { - if (outPath.length() == 0) { - outPath.setLength(0); - outPath.append(argv.get(i)); - } else { - System.err.printf("%s: excess arg %s\n", - ProgramName, argv.get(i)); - return -1; - } - } - } - } - } /* loop over args */ - - if (0 == input_file) { - usage(System.out, ProgramName); - return -1; - } - - if (inPath.toString().charAt(0) == '-') - silent = (silent <= 1 ? 1 : silent); - - if (outPath.length() == 0 && count_nogap == 0) { - outPath.setLength(0); - outPath.append(inPath.substring(0, inPath.length() - 4)); - if (gfp.decode_only) { - outPath.append(".mp3.wav"); - } else { - outPath.append(".mp3"); - } - } - - /* RG is enabled by default */ - if (0 == noreplaygain) - gfp.findReplayGain = true; - - /* disable VBR tags with nogap unless the VBR tags are forced */ - if (nogap != 0 && gfp.bWriteVbrTag && nogap_tags == 0) { - System.out - .println("Note: Disabling VBR Xing/Info tag since it interferes with --nogap\n"); - gfp.bWriteVbrTag = false; - } - - /* some file options not allowed with stdout */ - if (outPath.toString().charAt(0) == '-') { - gfp.bWriteVbrTag = false; /* turn off VBR tag */ - } - - /* if user did not explicitly specify input is mp3, check file name */ - if (input_format == sound_file_format.sf_unknown) - input_format = filename_to_type(inPath.toString()); - - if (input_format == sound_file_format.sf_ogg) { - System.err.printf("sorry, vorbis support in LAME is deprecated.\n"); - return -1; - } - /* default guess for number of channels */ - if (autoconvert != 0) - gfp.num_channels = 2; - else if (MPEGMode.MONO == gfp.mode) - gfp.num_channels = 1; - else - gfp.num_channels = 2; - - if (gfp.free_format) { - if (gfp.brate < 8 || gfp.brate > 640) { - System.err - .printf("For free format, specify a bitrate between 8 and 640 kbps\n"); - System.err.printf("with the -b <bitrate> option\n"); - return -1; - } - } - if (ng != null) - ng.num_nogap = count_nogap; - return 0; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PlottingData.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PlottingData.java deleted file mode 100644 index 1d63692f4..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PlottingData.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * GTK plotting routines source file - * - * Copyright (c) 1999 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package mp3; - -/** - * used by the frame analyzer - */ -public class PlottingData { - /** - * current frame number - */ - int frameNum; - int frameNum123; - /** - * number of pcm samples read for this frame - */ - int num_samples; - /** - * starting time of frame, in seconds - */ - double frametime; - double pcmdata[][] = new double[2][1600]; - double pcmdata2[][] = new double[2][1152 + 1152 - Encoder.DECDELAY]; - double xr[][][] = new double[2][2][576]; - public double mpg123xr[][][] = new double[2][2][576]; - double ms_ratio[] = new double[2]; - double ms_ener_ratio[] = new double[2]; - - /* L,R, M and S values */ - - /** - * psymodel is one ahead - */ - double energy_save[][] = new double[4][Encoder.BLKSIZE]; - double energy[][][] = new double[2][4][Encoder.BLKSIZE]; - double pe[][] = new double[2][4]; - double thr[][][] = new double[2][4][Encoder.SBMAX_l]; - double en[][][] = new double[2][4][Encoder.SBMAX_l]; - double thr_s[][][] = new double[2][4][3 * Encoder.SBMAX_s]; - double en_s[][][] = new double[2][4][3 * Encoder.SBMAX_s]; - /** - * psymodel is one ahead - */ - double ers_save[] = new double[4]; - double ers[][] = new double[2][4]; - - public double sfb[][][] = new double[2][2][Encoder.SBMAX_l]; - public double sfb_s[][][] = new double[2][2][3 * Encoder.SBMAX_s]; - double LAMEsfb[][][] = new double[2][2][Encoder.SBMAX_l]; - double LAMEsfb_s[][][] = new double[2][2][3 * Encoder.SBMAX_s]; - - int LAMEqss[][] = new int[2][2]; - public int qss[][] = new int[2][2]; - public int big_values[][] = new int[2][2]; - public int sub_gain[][][] = new int[2][2][3]; - - double xfsf[][][] = new double[2][2][Encoder.SBMAX_l]; - double xfsf_s[][][] = new double[2][2][3 * Encoder.SBMAX_s]; - - int over[][] = new int[2][2]; - double tot_noise[][] = new double[2][2]; - double max_noise[][] = new double[2][2]; - double over_noise[][] = new double[2][2]; - int over_SSD[][] = new int[2][2]; - int blocktype[][] = new int[2][2]; - public int scalefac_scale[][] = new int[2][2]; - public int preflag[][] = new int[2][2]; - public int mpg123blocktype[][] = new int[2][2]; - public int mixed[][] = new int[2][2]; - public int mainbits[][] = new int[2][2]; - public int sfbits[][] = new int[2][2]; - int LAMEmainbits[][] = new int[2][2]; - int LAMEsfbits[][] = new int[2][2]; - public int framesize, stereo, js, ms_stereo, i_stereo, emph, bitrate, - sampfreq, maindata; - public int crc, padding; - public int scfsi[] = new int[2], mean_bits, resvsize; - int totbits; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Presets.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Presets.java deleted file mode 100644 index a27e69f3a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Presets.java +++ /dev/null @@ -1,423 +0,0 @@ -package mp3; - -public class Presets { - Lame lame; - - public final void setModules(Lame lame) { - this.lame = lame; - } - - /** - * <PRE> - * Switch mappings for VBR mode VBR_RH - * vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix - * </PRE> - */ - private static final VBRPresets vbr_old_switch_map[] = { - new VBRPresets(0, 9, 9, 0, 5.20f, 125.0f, -4.2f, -6.3f, 4.8f, 1f, 0f, 0f, 2, 21, 0.97f), - new VBRPresets(1, 9, 9, 0, 5.30f, 125.0f, -3.6f, -5.6f, 4.5f, 1.5f, 0f, 0f, 2, 21, 1.35f), - new VBRPresets(2, 9, 9, 0, 5.60f, 125.0f, -2.2f, -3.5f, 2.8f, 2f, 0f, 0f, 2, 21, 1.49f), - new VBRPresets(3, 9, 9, 1, 5.80f, 130.0f, -1.8f, -2.8f, 2.6f, 3f, -4f, 0f, 2, 20, 1.64f), - new VBRPresets(4, 9, 9, 1, 6.00f, 135.0f, -0.7f, -1.1f, 1.1f, 3.5f, -8f, 0f, 2, 0, 1.79f), - new VBRPresets(5, 9, 9, 1, 6.40f, 140.0f, 0.5f, 0.4f, -7.5f, 4f, -12f, 0.0002f, 0, 0, 1.95f), - new VBRPresets(6, 9, 9, 1, 6.60f, 145.0f, 0.67f, 0.65f, -14.7f, 6.5f, -19f, 0.0004f, 0, 0, 2.30f), - new VBRPresets(7, 9, 9, 1, 6.60f, 145.0f, 0.8f, 0.75f, -19.7f, 8f, -22f, 0.0006f, 0, 0, 2.70f), - new VBRPresets(8, 9, 9, 1, 6.60f, 145.0f, 1.2f, 1.15f, -27.5f, 10f, -23f, 0.0007f, 0, 0, 0f ), - new VBRPresets(9, 9, 9, 1, 6.60f, 145.0f, 1.6f, 1.6f, -36f, 11f, -25f, 0.0008f, 0, 0, 0f ), - new VBRPresets(10, 9, 9, 1, 6.60f, 145.0f, 2.0f, 2.0f, -36f, 12f, -25f, 0.0008f, 0, 0, 0f ) - }; - - /** - * <PRE> - * vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix - * </PRE> - */ - private static final VBRPresets vbr_psy_switch_map[] = { - new VBRPresets(0, 9, 9, 0, 4.20f, 25.0f, -7.0f, -4.0f, 7.5f, 1f, 0f, 0f, 2, 26, 0.97f), - new VBRPresets(1, 9, 9, 0, 4.20f, 25.0f, -5.6f, -3.6f, 4.5f, 1.5f, 0f, 0f, 2, 21, 1.35f), - new VBRPresets(2, 9, 9, 0, 4.20f, 25.0f, -4.4f, -1.8f, 2f, 2f, 0f, 0f, 2, 18, 1.49f), - new VBRPresets(3, 9, 9, 1, 4.20f, 25.0f, -3.4f, -1.25f, 1.1f, 3f, -4f, 0f, 2, 15, 1.64f), - new VBRPresets(4, 9, 9, 1, 4.20f, 25.0f, -2.2f, 0.1f, 0f, 3.5f, -8f, 0f, 2, 0, 1.79f), - new VBRPresets(5, 9, 9, 1, 4.20f, 25.0f, -1.0f, 1.65f, -7.7f, 4f, -12f, 0.0002f, 0, 0, 1.95f), - new VBRPresets(6, 9, 9, 1, 4.20f, 25.0f, -0.0f, 2.47f, -7.7f, 6.5f, -19f, 0.0004f, 0, 0, 2f ), - new VBRPresets(7, 9, 9, 1, 4.20f, 25.0f, 0.5f, 2.0f, -14.5f, 8f, -22f, 0.0006f, 0, 0, 2f ), - new VBRPresets(8, 9, 9, 1, 4.20f, 25.0f, 1.0f, 2.4f, -22.0f, 10f, -23f, 0.0007f, 0, 0, 2f ), - new VBRPresets(9, 9, 9, 1, 4.20f, 25.0f, 1.5f, 2.95f, -30.0f, 11f, -25f, 0.0008f, 0, 0, 2f ), - new VBRPresets(10, 9, 9, 1, 4.20f, 25.0f, 2.0f, 2.95f, -36.0f, 12f, -30f, 0.0008f, 0, 0, 2f ) - }; - - private void apply_vbr_preset(final LameGlobalFlags gfp, final int a, - final int enforce) { - final VBRPresets[] vbr_preset = gfp.VBR == VbrMode.vbr_rh ? vbr_old_switch_map - : vbr_psy_switch_map; - - float x = gfp.VBR_q_frac; - VBRPresets p = vbr_preset[a]; - VBRPresets q = vbr_preset[a + 1]; - final VBRPresets set = p; - - // NOOP(vbr_q); - // NOOP(quant_comp); - // NOOP(quant_comp_s); - // NOOP(expY); - p.st_lrm = p.st_lrm + x * (q.st_lrm - p.st_lrm); - // LERP(st_lrm); - p.st_s = p.st_s + x * (q.st_s - p.st_s); - // LERP(st_s); - p.masking_adj = p.masking_adj + x * (q.masking_adj - p.masking_adj); - // LERP(masking_adj); - p.masking_adj_short = p.masking_adj_short + x - * (q.masking_adj_short - p.masking_adj_short); - // LERP(masking_adj_short); - p.ath_lower = p.ath_lower + x * (q.ath_lower - p.ath_lower); - // LERP(ath_lower); - p.ath_curve = p.ath_curve + x * (q.ath_curve - p.ath_curve); - // LERP(ath_curve); - p.ath_sensitivity = p.ath_sensitivity + x - * (q.ath_sensitivity - p.ath_sensitivity); - // LERP(ath_sensitivity); - p.interch = p.interch + x * (q.interch - p.interch); - // LERP(interch); - // NOOP(safejoint); - // NOOP(sfb21mod); - p.msfix = p.msfix + x * (q.msfix - p.msfix); - // LERP(msfix); - - lame_set_VBR_q(gfp, set.vbr_q); - - if (enforce != 0) - gfp.quant_comp = set.quant_comp; - else if (!(Math.abs(gfp.quant_comp - -1) > 0)) - gfp.quant_comp = set.quant_comp; - // SET_OPTION(quant_comp, set.quant_comp, -1); - if (enforce != 0) - gfp.quant_comp_short = set.quant_comp_s; - else if (!(Math.abs(gfp.quant_comp_short - -1) > 0)) - gfp.quant_comp_short = set.quant_comp_s; - // SET_OPTION(quant_comp_short, set.quant_comp_s, -1); - if (set.expY != 0) { - gfp.experimentalY = set.expY != 0; - } - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre = set.st_lrm; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre = set.st_lrm; - // SET_OPTION(short_threshold_lrm, set.st_lrm, -1); - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre_s = set.st_s; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre_s = set.st_s; - // SET_OPTION(short_threshold_s, set.st_s, -1); - if (enforce != 0) - gfp.maskingadjust = set.masking_adj; - else if (!(Math.abs(gfp.maskingadjust - 0) > 0)) - gfp.maskingadjust = set.masking_adj; - // SET_OPTION(maskingadjust, set.masking_adj, 0); - if (enforce != 0) - gfp.maskingadjust_short = set.masking_adj_short; - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = set.masking_adj_short; - // SET_OPTION(maskingadjust_short, set.masking_adj_short, 0); - if (enforce != 0) - gfp.ATHlower = -set.ath_lower / 10.0f; - else if (!(Math.abs((-gfp.ATHlower * 10.0) - 0) > 0)) - gfp.ATHlower = -set.ath_lower / 10.0f; - // SET_OPTION(ATHlower, set.ath_lower, 0); - if (enforce != 0) - gfp.ATHcurve = set.ath_curve; - else if (!(Math.abs(gfp.ATHcurve - -1) > 0)) - gfp.ATHcurve = set.ath_curve; - // SET_OPTION(ATHcurve, set.ath_curve, -1); - if (enforce != 0) - gfp.athaa_sensitivity = set.ath_sensitivity; - else if (!(Math.abs(gfp.athaa_sensitivity - -1) > 0)) - gfp.athaa_sensitivity = set.ath_sensitivity; - // SET_OPTION(athaa_sensitivity, set.ath_sensitivity, 0); - if (set.interch > 0) { - if (enforce != 0) - gfp.interChRatio = set.interch; - else if (!(Math.abs(gfp.interChRatio - -1) > 0)) - gfp.interChRatio = set.interch; - // SET_OPTION(interChRatio, set.interch, -1); - } - - /* parameters for which there is no proper set/get interface */ - if (set.safejoint > 0) { - gfp.exp_nspsytune = gfp.exp_nspsytune | set.safejoint; - } - if (set.sfb21mod > 0) { - gfp.exp_nspsytune = gfp.exp_nspsytune | (set.sfb21mod << 20); - } - if (enforce != 0) - gfp.msfix = set.msfix; - else if (!(Math.abs(gfp.msfix - -1) > 0)) - gfp.msfix = set.msfix; - // SET_OPTION(msfix, set.msfix, -1); - - if (enforce == 0) { - gfp.VBR_q = a; - gfp.VBR_q_frac = x; - } - } - - /** - * <PRE> - * Switch mappings for ABR mode - * - * kbps quant q_s safejoint nsmsfix st_lrm st_s ns-bass scale msk ath_lwr ath_curve interch , sfscale - * </PRE> - */ - private static final ABRPresets abr_switch_map[] = { - new ABRPresets( 8, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -30.0f, 11f, 0.0012f, 1), /* 8, impossible to use in stereo */ - new ABRPresets( 16, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -25.0f, 11f, 0.0010f, 1), /* 16 */ - new ABRPresets( 24, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -20.0f, 11f, 0.0010f, 1), /* 24 */ - new ABRPresets( 32, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -15.0f, 11f, 0.0010f, 1), /* 32 */ - new ABRPresets( 40, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -10.0f, 11f, 0.0009f, 1), /* 40 */ - new ABRPresets( 48, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -10.0f, 11f, 0.0009f, 1), /* 48 */ - new ABRPresets( 56, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -6.0f, 11f, 0.0008f, 1), /* 56 */ - new ABRPresets( 64, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, -2.0f, 11f, 0.0008f, 1), /* 64 */ - new ABRPresets( 80, 9, 9, 0, 0f, 6.60f, 145f, 0f, 0.95f, 0f, .0f, 8f, 0.0007f, 1), /* 80 */ - new ABRPresets( 96, 9, 9, 0, 2.50f, 6.60f, 145f, 0f, 0.95f, 0f, 1.0f, 5.5f, 0.0006f, 1), /* 96 */ - new ABRPresets(112, 9, 9, 0, 2.25f, 6.60f, 145f, 0f, 0.95f, 0f, 2.0f, 4.5f, 0.0005f, 1), /* 112 */ - new ABRPresets(128, 9, 9, 0, 1.95f, 6.40f, 140f, 0f, 0.95f, 0f, 3.0f, 4f, 0.0002f, 1), /* 128 */ - new ABRPresets(160, 9, 9, 1, 1.79f, 6.00f, 135f, 0f, 0.95f, -2f, 5.0f, 3.5f, 0f, 1), /* 160 */ - new ABRPresets(192, 9, 9, 1, 1.49f, 5.60f, 125f, 0f, 0.97f, -4f, 7.0f, 3f, 0f, 0), /* 192 */ - new ABRPresets(224, 9, 9, 1, 1.25f, 5.20f, 125f, 0f, 0.98f, -6f, 9.0f, 2f, 0f, 0), /* 224 */ - new ABRPresets(256, 9, 9, 1, 0.97f, 5.20f, 125f, 0f, 1.00f, -8f, 10.0f, 1f, 0f, 0), /* 256 */ - new ABRPresets(320, 9, 9, 1, 0.90f, 5.20f, 125f, 0f, 1.00f, -10f, 12.0f, 0f, 0f, 0) /* 320 */ - }; - - private int apply_abr_preset(final LameGlobalFlags gfp, final int preset, - final int enforce) { - /* Variables for the ABR stuff */ - int actual_bitrate = preset; - - int r = lame.nearestBitrateFullIndex(preset); - - gfp.VBR = VbrMode.vbr_abr; - gfp.VBR_mean_bitrate_kbps = actual_bitrate; - gfp.VBR_mean_bitrate_kbps = Math.min(gfp.VBR_mean_bitrate_kbps, 320); - gfp.VBR_mean_bitrate_kbps = Math.max(gfp.VBR_mean_bitrate_kbps, 8); - gfp.brate = gfp.VBR_mean_bitrate_kbps; - if (gfp.VBR_mean_bitrate_kbps > 320) { - gfp.disable_reservoir = true; - } - - /* parameters for which there is no proper set/get interface */ - if (abr_switch_map[r].safejoint > 0) - gfp.exp_nspsytune = gfp.exp_nspsytune | 2; /* safejoint */ - - if (abr_switch_map[r].sfscale > 0) { - gfp.internal_flags.noise_shaping = 2; - } - /* ns-bass tweaks */ - if (Math.abs(abr_switch_map[r].nsbass) > 0) { - int k = (int) (abr_switch_map[r].nsbass * 4); - if (k < 0) - k += 64; - gfp.exp_nspsytune = gfp.exp_nspsytune | (k << 2); - } - - if (enforce != 0) - gfp.quant_comp = abr_switch_map[r].quant_comp; - else if (!(Math.abs(gfp.quant_comp - -1) > 0)) - gfp.quant_comp = abr_switch_map[r].quant_comp; - // SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1); - if (enforce != 0) - gfp.quant_comp_short = abr_switch_map[r].quant_comp_s; - else if (!(Math.abs(gfp.quant_comp_short - -1) > 0)) - gfp.quant_comp_short = abr_switch_map[r].quant_comp_s; - // SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1); - - if (enforce != 0) - gfp.msfix = abr_switch_map[r].nsmsfix; - else if (!(Math.abs(gfp.msfix - -1) > 0)) - gfp.msfix = abr_switch_map[r].nsmsfix; - // SET_OPTION(msfix, abr_switch_map[r].nsmsfix, -1); - - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre = abr_switch_map[r].st_lrm; - // SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1); - if (enforce != 0) - gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s; - else if (!(Math.abs(gfp.internal_flags.nsPsy.attackthre_s - -1) > 0)) - gfp.internal_flags.nsPsy.attackthre_s = abr_switch_map[r].st_s; - // SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1); - - /* - * ABR seems to have big problems with clipping, especially at low - * bitrates - */ - /* - * so we compensate for that here by using a scale value depending on - * bitrate - */ - if (enforce != 0) - gfp.scale = abr_switch_map[r].scale; - else if (!(Math.abs(gfp.scale - -1) > 0)) - gfp.scale = abr_switch_map[r].scale; - // SET_OPTION(scale, abr_switch_map[r].scale, -1); - - if (enforce != 0) - gfp.maskingadjust = abr_switch_map[r].masking_adj; - else if (!(Math.abs(gfp.maskingadjust - 0) > 0)) - gfp.maskingadjust = abr_switch_map[r].masking_adj; - // SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0); - if (abr_switch_map[r].masking_adj > 0) { - if (enforce != 0) - gfp.maskingadjust_short = (float) (abr_switch_map[r].masking_adj * .9); - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = (float) (abr_switch_map[r].masking_adj * .9); - // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * - // .9, 0); - } else { - if (enforce != 0) - gfp.maskingadjust_short = (float) (abr_switch_map[r].masking_adj * 1.1); - else if (!(Math.abs(gfp.maskingadjust_short - 0) > 0)) - gfp.maskingadjust_short = (float) (abr_switch_map[r].masking_adj * 1.1); - // SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * - // 1.1, 0); - } - - if (enforce != 0) - gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.f; - else if (!(Math.abs((-gfp.ATHlower * 10.f) - 0) > 0)) - gfp.ATHlower = -abr_switch_map[r].ath_lower / 10.f; - // SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0); - if (enforce != 0) - gfp.ATHcurve = abr_switch_map[r].ath_curve; - else if (!(Math.abs(gfp.ATHcurve - -1) > 0)) - gfp.ATHcurve = abr_switch_map[r].ath_curve; - // SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1); - - if (enforce != 0) - gfp.interChRatio = abr_switch_map[r].interch; - else if (!(Math.abs(gfp.interChRatio - -1) > 0)) - gfp.interChRatio = abr_switch_map[r].interch; - // SET_OPTION(interChRatio, abr_switch_map[r].interch, -1); - - return preset; - } - - public final int apply_preset(final LameGlobalFlags gfp, int preset, - final int enforce) { - /* translate legacy presets */ - switch (preset) { - case Lame.R3MIX: { - preset = Lame.V3; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.MEDIUM: { - preset = Lame.V4; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.MEDIUM_FAST: { - preset = Lame.V4; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.STANDARD: { - preset = Lame.V2; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.STANDARD_FAST: { - preset = Lame.V2; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.EXTREME: { - preset = Lame.V0; - gfp.VBR = VbrMode.vbr_rh; - break; - } - case Lame.EXTREME_FAST: { - preset = Lame.V0; - gfp.VBR = VbrMode.vbr_mtrh; - break; - } - case Lame.INSANE: { - preset = 320; - gfp.preset = preset; - apply_abr_preset(gfp, preset, enforce); - gfp.VBR = VbrMode.vbr_off; - return preset; - } - } - - gfp.preset = preset; - { - switch (preset) { - case Lame.V9: - apply_vbr_preset(gfp, 9, enforce); - return preset; - case Lame.V8: - apply_vbr_preset(gfp, 8, enforce); - return preset; - case Lame.V7: - apply_vbr_preset(gfp, 7, enforce); - return preset; - case Lame.V6: - apply_vbr_preset(gfp, 6, enforce); - return preset; - case Lame.V5: - apply_vbr_preset(gfp, 5, enforce); - return preset; - case Lame.V4: - apply_vbr_preset(gfp, 4, enforce); - return preset; - case Lame.V3: - apply_vbr_preset(gfp, 3, enforce); - return preset; - case Lame.V2: - apply_vbr_preset(gfp, 2, enforce); - return preset; - case Lame.V1: - apply_vbr_preset(gfp, 1, enforce); - return preset; - case Lame.V0: - apply_vbr_preset(gfp, 0, enforce); - return preset; - default: - break; - } - } - if (8 <= preset && preset <= 320) { - return apply_abr_preset(gfp, preset, enforce); - } - - /* no corresponding preset found */ - gfp.preset = 0; - return preset; - } - - // Rest from getset.c: - - /** - * VBR quality level.<BR> - * 0 = highest<BR> - * 9 = lowest - */ - public int lame_set_VBR_q(final LameGlobalFlags gfp, int VBR_q) { - int ret = 0; - - if (0 > VBR_q) { - /* Unknown VBR quality level! */ - ret = -1; - VBR_q = 0; - } - if (9 < VBR_q) { - ret = -1; - VBR_q = 9; - } - - gfp.VBR_q = VBR_q; - gfp.VBR_q_frac = 0; - return ret; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PsyModel.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PsyModel.java deleted file mode 100644 index c394d39ea..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/PsyModel.java +++ /dev/null @@ -1,2942 +0,0 @@ -/* - * psymodel.c - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 2001-2002 Naoki Shibata - * Copyright (c) 2000-2003 Takehiro Tominaga - * Copyright (c) 2000-2008 Robert Hegemann - * Copyright (c) 2000-2005 Gabriel Bouvigne - * Copyright (c) 2000-2005 Alexander Leidinger - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: PsyModel.java,v 1.27 2011/05/24 20:48:06 kenchis Exp $ */ - - -/* -PSYCHO ACOUSTICS - - -This routine computes the psycho acoustics, delayed by one granule. - -Input: buffer of PCM data (1024 samples). - -This window should be centered over the 576 sample granule window. -The routine will compute the psycho acoustics for -this granule, but return the psycho acoustics computed -for the *previous* granule. This is because the block -type of the previous granule can only be determined -after we have computed the psycho acoustics for the following -granule. - -Output: maskings and energies for each scalefactor band. -block type, PE, and some correlation measures. -The PE is used by CBR modes to determine if extra bits -from the bit reservoir should be used. The correlation -measures are used to determine mid/side or regular stereo. -*/ -/* -Notation: - -barks: a non-linear frequency scale. Mapping from frequency to - barks is given by freq2bark() - -scalefactor bands: The spectrum (frequencies) are broken into - SBMAX "scalefactor bands". Thes bands - are determined by the MPEG ISO spec. In - the noise shaping/quantization code, we allocate - bits among the partition bands to achieve the - best possible quality - -partition bands: The spectrum is also broken into about - 64 "partition bands". Each partition - band is about .34 barks wide. There are about 2-5 - partition bands for each scalefactor band. - -LAME computes all psycho acoustic information for each partition -band. Then at the end of the computations, this information -is mapped to scalefactor bands. The energy in each scalefactor -band is taken as the sum of the energy in all partition bands -which overlap the scalefactor band. The maskings can be computed -in the same way (and thus represent the average masking in that band) -or by taking the minmum value multiplied by the number of -partition bands used (which represents a minimum masking in that band). -*/ -/* -The general outline is as follows: - -1. compute the energy in each partition band -2. compute the tonality in each partition band -3. compute the strength of each partion band "masker" -4. compute the masking (via the spreading function applied to each masker) -5. Modifications for mid/side masking. - -Each partition band is considiered a "masker". The strength -of the i'th masker in band j is given by: - - s3(bark(i)-bark(j))*strength(i) - -The strength of the masker is a function of the energy and tonality. -The more tonal, the less masking. LAME uses a simple linear formula -(controlled by NMT and TMN) which says the strength is given by the -energy divided by a linear function of the tonality. -*/ -/* -s3() is the "spreading function". It is given by a formula -determined via listening tests. - -The total masking in the j'th partition band is the sum over -all maskings i. It is thus given by the convolution of -the strength with s3(), the "spreading function." - -masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength - -where "o" = convolution operator. s3 is given by a formula determined -via listening tests. It is normalized so that s3 o 1 = 1. - -Note: instead of a simple convolution, LAME also has the -option of using "additive masking" - -The most critical part is step 2, computing the tonality of each -partition band. LAME has two tonality estimators. The first -is based on the ISO spec, and measures how predictiable the -signal is over time. The more predictable, the more tonal. -The second measure is based on looking at the spectrum of -a single granule. The more peaky the spectrum, the more -tonal. By most indications, the latter approach is better. - -Finally, in step 5, the maskings for the mid and side -channel are possibly increased. Under certain circumstances, -noise in the mid & side channels is assumed to also -be masked by strong maskers in the L or R channels. - - -Other data computed by the psy-model: - -ms_ratio side-channel / mid-channel masking ratio (for previous granule) -ms_ratio_next side-channel / mid-channel masking ratio for this granule - -percep_entropy[2] L and R values (prev granule) of PE - A measure of how - much pre-echo is in the previous granule -percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy -energy[4] L,R,M,S energy in each channel, prev granule -blocktype_d[2] block type to use for previous granule -*/ -package mp3; - -import java.util.Arrays; - -public class PsyModel { - - private FFT fft = new FFT(); - - private static final float LOG10 = 2.30258509299404568402f; - - private static final int rpelev = 2; - private static final int rpelev2 = 16; - private static final int rpelev_s = 2; - private static final int rpelev2_s = 16; - - /* size of each partition band, in barks: */ - private static final float DELBARK = .34f; - - /* tuned for output level (sensitive to energy scale) */ - private static final float VO_SCALE = (1.f / (14752 * 14752) / (Encoder.BLKSIZE / 2)); - - private static final float temporalmask_sustain_sec = 0.01f; - - private static final float NS_PREECHO_ATT0 = 0.8f; - private static final float NS_PREECHO_ATT1 = 0.6f; - private static final float NS_PREECHO_ATT2 = 0.3f; - - private static final float NS_MSFIX = 3.5f; - public static final float NSATTACKTHRE = 4.4f; - public static final int NSATTACKTHRE_S = 25; - - private static final int NSFIRLEN = 21; - - /* size of each partition band, in barks: */ - private static final float LN_TO_LOG10 = 0.2302585093f; - - private static final float NON_LINEAR_SCALE_ENERGY(float x) { - return x; - } - - /** - * <PRE> - * L3psycho_anal. Compute psycho acoustics. - * - * Data returned to the calling program must be delayed by one - * granule. - * - * This is done in two places. - * If we do not need to know the blocktype, the copying - * can be done here at the top of the program: we copy the data for - * the last granule (computed during the last call) before it is - * overwritten with the new data. It looks like this: - * - * 0. static psymodel_data - * 1. calling_program_data = psymodel_data - * 2. compute psymodel_data - * - * For data which needs to know the blocktype, the copying must be - * done at the end of this loop, and the old values must be saved: - * - * 0. static psymodel_data_old - * 1. compute psymodel_data - * 2. compute possible block type of this granule - * 3. compute final block type of previous granule based on #2. - * 4. calling_program_data = psymodel_data_old - * 5. psymodel_data_old = psymodel_data - * psycho_loudness_approx - * jd - 2001 mar 12 - * in: energy - BLKSIZE/2 elements of frequency magnitudes ^ 2 - * gfp - uses out_samplerate, ATHtype (also needed for ATHformula) - * returns: loudness^2 approximation, a positive value roughly tuned for a value - * of 1.0 for signals near clipping. - * notes: When calibrated, feeding this function binary white noise at sample - * values +32767 or -32768 should return values that approach 3. - * ATHformula is used to approximate an equal loudness curve. - * future: Data indicates that the shape of the equal loudness curve varies - * with intensity. This function might be improved by using an equal - * loudness curve shaped for typical playback levels (instead of the - * ATH, that is shaped for the threshold). A flexible realization might - * simply bend the existing ATH curve to achieve the desired shape. - * However, the potential gain may not be enough to justify an effort. - * </PRE> - */ - private float psycho_loudness_approx(final float[] energy, - final LameInternalFlags gfc) { - float loudness_power = 0.0f; - /* apply weights to power in freq. bands */ - for (int i = 0; i < Encoder.BLKSIZE / 2; ++i) - loudness_power += energy[i] * gfc.ATH.eql_w[i]; - loudness_power *= VO_SCALE; - - return loudness_power; - } - - private void compute_ffts(final LameGlobalFlags gfp, - final float fftenergy[], final float fftenergy_s[][], - final float wsamp_l[][], final int wsamp_lPos, - final float wsamp_s[][][], final int wsamp_sPos, final int gr_out, - final int chn, final float[] buffer[], final int bufPos) { - final LameInternalFlags gfc = gfp.internal_flags; - if (chn < 2) { - fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos); - fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos); - } - /* FFT data for mid and side channel is derived from L & R */ - else if (chn == 2) { - for (int j = Encoder.BLKSIZE - 1; j >= 0; --j) { - final float l = wsamp_l[wsamp_lPos + 0][j]; - final float r = wsamp_l[wsamp_lPos + 1][j]; - wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5f; - wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5f; - } - for (int b = 2; b >= 0; --b) { - for (int j = Encoder.BLKSIZE_s - 1; j >= 0; --j) { - final float l = wsamp_s[wsamp_sPos + 0][b][j]; - final float r = wsamp_s[wsamp_sPos + 1][b][j]; - wsamp_s[wsamp_sPos + 0][b][j] = (l + r) * Util.SQRT2 * 0.5f; - wsamp_s[wsamp_sPos + 1][b][j] = (l - r) * Util.SQRT2 * 0.5f; - } - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]); - fftenergy[0] *= fftenergy[0]; - - for (int j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) { - final float re = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 - j]; - final float im = (wsamp_l[wsamp_lPos + 0])[Encoder.BLKSIZE / 2 + j]; - fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5f); - } - for (int b = 2; b >= 0; --b) { - fftenergy_s[b][0] = (wsamp_s[wsamp_sPos + 0])[b][0]; - fftenergy_s[b][0] *= fftenergy_s[b][0]; - for (int j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) { - final float re = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s - / 2 - j]; - final float im = (wsamp_s[wsamp_sPos + 0])[b][Encoder.BLKSIZE_s - / 2 + j]; - fftenergy_s[b][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5f); - } - } - /* total energy */ - { - float totalenergy = 0.0f; - for (int j = 11; j < Encoder.HBLKSIZE; j++) - totalenergy += fftenergy[j]; - - gfc.tot_ener[chn] = totalenergy; - } - - if (gfp.analysis) { - for (int j = 0; j < Encoder.HBLKSIZE; j++) { - gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j]; - gfc.pinfo.energy_save[chn][j] = fftenergy[j]; - } - gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn]; - } - - /********************************************************************* - * compute loudness approximation (used for ATH auto-level adjustment) - *********************************************************************/ - if (gfp.athaa_loudapprox == 2 && chn < 2) { - // no loudness for mid/side ch - gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn]; - gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc); - } - } - - /* mask_add optimization */ - /* init the limit values used to avoid computing log in mask_add when it is not necessary */ - - /** - * <PRE> - * For example, with i = 10*log10(m2/m1)/10*16 (= log10(m2/m1)*16) - * - * abs(i)>8 is equivalent (as i is an integer) to - * abs(i)>=9 - * i>=9 || i<=-9 - * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16 - * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16) - * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16 - * exp10 is strictly increasing thus this is equivalent to - * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants - * </PRE> - */ - - /** - * as in if(i>8) - */ - private static final int I1LIMIT = 8; - /** - * as in if(i>24) . changed 23 - */ - private static final int I2LIMIT = 23; - /** - * as in if(m<15) - */ - private static final int MLIMIT = 15; - - private float ma_max_i1; - private float ma_max_i2; - private float ma_max_m; - - /** - * This is the masking table:<BR> - * According to tonality, values are going from 0dB (TMN) to 9.3dB (NMT).<BR> - * After additive masking computation, 8dB are added, so final values are - * going from 8dB to 17.3dB - * - * pow(10, -0.0..-0.6) - */ - private static final float tab[] = { 1.0f, 0.79433f, 0.63096f, 0.63096f, - 0.63096f, 0.63096f, 0.63096f, 0.25119f, 0.11749f }; - - private void init_mask_add_max_values() { - ma_max_i1 = (float) Math.pow(10, (I1LIMIT + 1) / 16.0); - ma_max_i2 = (float) Math.pow(10, (I2LIMIT + 1) / 16.0); - ma_max_m = (float) Math.pow(10, (MLIMIT) / 10.0); - } - - private static final float table1[] = { 3.3246f * 3.3246f, - 3.23837f * 3.23837f, 3.15437f * 3.15437f, 3.00412f * 3.00412f, - 2.86103f * 2.86103f, 2.65407f * 2.65407f, 2.46209f * 2.46209f, - 2.284f * 2.284f, 2.11879f * 2.11879f, 1.96552f * 1.96552f, - 1.82335f * 1.82335f, 1.69146f * 1.69146f, 1.56911f * 1.56911f, - 1.46658f * 1.46658f, 1.37074f * 1.37074f, 1.31036f * 1.31036f, - 1.25264f * 1.25264f, 1.20648f * 1.20648f, 1.16203f * 1.16203f, - 1.12765f * 1.12765f, 1.09428f * 1.09428f, 1.0659f * 1.0659f, - 1.03826f * 1.03826f, 1.01895f * 1.01895f, 1 }; - - private static final float table2[] = { 1.33352f * 1.33352f, - 1.35879f * 1.35879f, 1.38454f * 1.38454f, 1.39497f * 1.39497f, - 1.40548f * 1.40548f, 1.3537f * 1.3537f, 1.30382f * 1.30382f, - 1.22321f * 1.22321f, 1.14758f * 1.14758f, 1 }; - - private static final float table3[] = { 2.35364f * 2.35364f, - 2.29259f * 2.29259f, 2.23313f * 2.23313f, 2.12675f * 2.12675f, - 2.02545f * 2.02545f, 1.87894f * 1.87894f, 1.74303f * 1.74303f, - 1.61695f * 1.61695f, 1.49999f * 1.49999f, 1.39148f * 1.39148f, - 1.29083f * 1.29083f, 1.19746f * 1.19746f, 1.11084f * 1.11084f, - 1.03826f * 1.03826f }; - - /** - * addition of simultaneous masking Naoki Shibata 2000/7 - */ - private float mask_add(float m1, float m2, final int kk, final int b, - final LameInternalFlags gfc, final int shortblock) { - float ratio; - - if (m2 > m1) { - if (m2 < (m1 * ma_max_i2)) - ratio = m2 / m1; - else - return (m1 + m2); - } else { - if (m1 >= (m2 * ma_max_i2)) - return (m1 + m2); - ratio = m1 / m2; - } - - /* Should always be true, just checking */ - assert (m1 >= 0); - assert (m2 >= 0); - - m1 += m2; - if (((long) (b + 3) & 0xffffffffL) <= 3 + 3) { - /* approximately, 1 bark = 3 partitions */ - /* 65% of the cases */ - /* originally 'if(i > 8)' */ - if (ratio >= ma_max_i1) { - /* 43% of the total */ - return m1; - } - - /* 22% of the total */ - int i = (int) (Util.FAST_LOG10_X(ratio, 16.0f)); - return m1 * table2[i]; - } - - /** - * <PRE> - * m<15 equ log10((m1+m2)/gfc.ATH.cb[k])<1.5 - * equ (m1+m2)/gfc.ATH.cb[k]<10^1.5 - * equ (m1+m2)<10^1.5 * gfc.ATH.cb[k] - * </PRE> - */ - - int i = (int) Util.FAST_LOG10_X(ratio, 16.0f); - if (shortblock != 0) { - m2 = gfc.ATH.cb_s[kk] * gfc.ATH.adjust; - } else { - m2 = gfc.ATH.cb_l[kk] * gfc.ATH.adjust; - } - assert (m2 >= 0); - if (m1 < ma_max_m * m2) { - /* 3% of the total */ - /* Originally if (m > 0) { */ - if (m1 > m2) { - float f, r; - - f = 1.0f; - if (i <= 13) - f = table3[i]; - - r = Util.FAST_LOG10_X(m1 / m2, 10.0f / 15.0f); - return m1 * ((table1[i] - f) * r + f); - } - - if (i > 13) - return m1; - - return m1 * table3[i]; - } - - /* 10% of total */ - return m1 * table1[i]; - } - - private static final float table2_[] = { 1.33352f * 1.33352f, - 1.35879f * 1.35879f, 1.38454f * 1.38454f, 1.39497f * 1.39497f, - 1.40548f * 1.40548f, 1.3537f * 1.3537f, 1.30382f * 1.30382f, - 1.22321f * 1.22321f, 1.14758f * 1.14758f, 1 }; - - /** - * addition of simultaneous masking Naoki Shibata 2000/7 - */ - private float vbrpsy_mask_add(float m1, float m2, final int b) { - float ratio; - - if (m1 < 0) { - m1 = 0; - } - if (m2 < 0) { - m2 = 0; - } - if (m1 <= 0) { - return m2; - } - if (m2 <= 0) { - return m1; - } - if (m2 > m1) { - ratio = m2 / m1; - } else { - ratio = m1 / m2; - } - if (-2 <= b && b <= 2) { - /* approximately, 1 bark = 3 partitions */ - /* originally 'if(i > 8)' */ - if (ratio >= ma_max_i1) { - return m1 + m2; - } else { - int i = (int) (Util.FAST_LOG10_X(ratio, 16.0f)); - return (m1 + m2) * table2_[i]; - } - } - if (ratio < ma_max_i2) { - return m1 + m2; - } - if (m1 < m2) { - m1 = m2; - } - return m1; - } - - /** - * compute interchannel masking effects - */ - private void calc_interchannel_masking(final LameGlobalFlags gfp, - final float ratio) { - final LameInternalFlags gfc = gfp.internal_flags; - if (gfc.channels_out > 1) { - for (int sb = 0; sb < Encoder.SBMAX_l; sb++) { - float l = gfc.thm[0].l[sb]; - float r = gfc.thm[1].l[sb]; - gfc.thm[0].l[sb] += r * ratio; - gfc.thm[1].l[sb] += l * ratio; - } - for (int sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (int sblock = 0; sblock < 3; sblock++) { - float l = gfc.thm[0].s[sb][sblock]; - float r = gfc.thm[1].s[sb][sblock]; - gfc.thm[0].s[sb][sblock] += r * ratio; - gfc.thm[1].s[sb][sblock] += l * ratio; - } - } - } - } - - /** - * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper - */ - private void msfix1(final LameInternalFlags gfc) { - for (int sb = 0; sb < Encoder.SBMAX_l; sb++) { - /* use this fix if L & R masking differs by 2db or less */ - /* if db = 10*log10(x2/x1) < 2 */ - /* if (x2 < 1.58*x1) { */ - if (gfc.thm[0].l[sb] > 1.58 * gfc.thm[1].l[sb] - || gfc.thm[1].l[sb] > 1.58 * gfc.thm[0].l[sb]) - continue; - - float mld = gfc.mld_l[sb] * gfc.en[3].l[sb]; - float rmid = Math.max(gfc.thm[2].l[sb], - Math.min(gfc.thm[3].l[sb], mld)); - - mld = gfc.mld_l[sb] * gfc.en[2].l[sb]; - float rside = Math.max(gfc.thm[3].l[sb], - Math.min(gfc.thm[2].l[sb], mld)); - gfc.thm[2].l[sb] = rmid; - gfc.thm[3].l[sb] = rside; - } - - for (int sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (int sblock = 0; sblock < 3; sblock++) { - if (gfc.thm[0].s[sb][sblock] > 1.58 * gfc.thm[1].s[sb][sblock] - || gfc.thm[1].s[sb][sblock] > 1.58 * gfc.thm[0].s[sb][sblock]) - continue; - - float mld = gfc.mld_s[sb] * gfc.en[3].s[sb][sblock]; - float rmid = Math.max(gfc.thm[2].s[sb][sblock], - Math.min(gfc.thm[3].s[sb][sblock], mld)); - - mld = gfc.mld_s[sb] * gfc.en[2].s[sb][sblock]; - float rside = Math.max(gfc.thm[3].s[sb][sblock], - Math.min(gfc.thm[2].s[sb][sblock], mld)); - - gfc.thm[2].s[sb][sblock] = rmid; - gfc.thm[3].s[sb][sblock] = rside; - } - } - } - - /** - * Adjust M/S maskings if user set "msfix" - * - * Naoki Shibata 2000 - */ - private void ns_msfix(final LameInternalFlags gfc, float msfix, - final float athadjust) { - float msfix2 = msfix; - float athlower = (float) Math.pow(10, athadjust); - - msfix *= 2.0f; - msfix2 *= 2.0f; - for (int sb = 0; sb < Encoder.SBMAX_l; sb++) { - float thmLR, thmM, thmS, ath; - ath = (gfc.ATH.cb_l[gfc.bm_l[sb]]) * athlower; - thmLR = Math.min(Math.max(gfc.thm[0].l[sb], ath), - Math.max(gfc.thm[1].l[sb], ath)); - thmM = Math.max(gfc.thm[2].l[sb], ath); - thmS = Math.max(gfc.thm[3].l[sb], ath); - if (thmLR * msfix < thmM + thmS) { - float f = thmLR * msfix2 / (thmM + thmS); - thmM *= f; - thmS *= f; - assert (thmM + thmS > 0); - } - gfc.thm[2].l[sb] = Math.min(thmM, gfc.thm[2].l[sb]); - gfc.thm[3].l[sb] = Math.min(thmS, gfc.thm[3].l[sb]); - } - - athlower *= ((float) Encoder.BLKSIZE_s / Encoder.BLKSIZE); - for (int sb = 0; sb < Encoder.SBMAX_s; sb++) { - for (int sblock = 0; sblock < 3; sblock++) { - float thmLR, thmM, thmS, ath; - ath = (gfc.ATH.cb_s[gfc.bm_s[sb]]) * athlower; - thmLR = Math.min(Math.max(gfc.thm[0].s[sb][sblock], ath), - Math.max(gfc.thm[1].s[sb][sblock], ath)); - thmM = Math.max(gfc.thm[2].s[sb][sblock], ath); - thmS = Math.max(gfc.thm[3].s[sb][sblock], ath); - - if (thmLR * msfix < thmM + thmS) { - float f = thmLR * msfix / (thmM + thmS); - thmM *= f; - thmS *= f; - assert (thmM + thmS > 0); - } - gfc.thm[2].s[sb][sblock] = Math.min(gfc.thm[2].s[sb][sblock], - thmM); - gfc.thm[3].s[sb][sblock] = Math.min(gfc.thm[3].s[sb][sblock], - thmS); - } - } - } - - /** - * short block threshold calculation (part 2) - * - * partition band bo_s[sfb] is at the transition from scalefactor band sfb - * to the next one sfb+1; enn and thmm have to be split between them - */ - private void convert_partition2scalefac_s(final LameInternalFlags gfc, - final float[] eb, final float[] thr, final int chn, final int sblock) { - int sb, b; - float enn = 0.0f; - float thmm = 0.0f; - for (sb = b = 0; sb < Encoder.SBMAX_s; ++b, ++sb) { - int bo_s_sb = gfc.bo_s[sb]; - int npart_s = gfc.npart_s; - int b_lim = bo_s_sb < npart_s ? bo_s_sb : npart_s; - while (b < b_lim) { - assert (eb[b] >= 0); - // iff failed, it may indicate some index error elsewhere - assert (thr[b] >= 0); - enn += eb[b]; - thmm += thr[b]; - b++; - } - gfc.en[chn].s[sb][sblock] = enn; - gfc.thm[chn].s[sb][sblock] = thmm; - - if (b >= npart_s) { - ++sb; - break; - } - assert (eb[b] >= 0); - // iff failed, it may indicate some index error elsewhere - assert (thr[b] >= 0); - { - /* at transition sfb . sfb+1 */ - float w_curr = gfc.PSY.bo_s_weight[sb]; - float w_next = 1.0f - w_curr; - enn = w_curr * eb[b]; - thmm = w_curr * thr[b]; - gfc.en[chn].s[sb][sblock] += enn; - gfc.thm[chn].s[sb][sblock] += thmm; - enn = w_next * eb[b]; - thmm = w_next * thr[b]; - } - } - /* zero initialize the rest */ - for (; sb < Encoder.SBMAX_s; ++sb) { - gfc.en[chn].s[sb][sblock] = 0; - gfc.thm[chn].s[sb][sblock] = 0; - } - } - - /** - * longblock threshold calculation (part 2) - */ - private void convert_partition2scalefac_l(final LameInternalFlags gfc, - final float[] eb, final float[] thr, final int chn) { - int sb, b; - float enn = 0.0f; - float thmm = 0.0f; - for (sb = b = 0; sb < Encoder.SBMAX_l; ++b, ++sb) { - int bo_l_sb = gfc.bo_l[sb]; - int npart_l = gfc.npart_l; - int b_lim = bo_l_sb < npart_l ? bo_l_sb : npart_l; - while (b < b_lim) { - assert (eb[b] >= 0); - // iff failed, it may indicate some index error elsewhere - assert (thr[b] >= 0); - enn += eb[b]; - thmm += thr[b]; - b++; - } - gfc.en[chn].l[sb] = enn; - gfc.thm[chn].l[sb] = thmm; - - if (b >= npart_l) { - ++sb; - break; - } - assert (eb[b] >= 0); - assert (thr[b] >= 0); - { - /* at transition sfb . sfb+1 */ - float w_curr = gfc.PSY.bo_l_weight[sb]; - float w_next = 1.0f - w_curr; - enn = w_curr * eb[b]; - thmm = w_curr * thr[b]; - gfc.en[chn].l[sb] += enn; - gfc.thm[chn].l[sb] += thmm; - enn = w_next * eb[b]; - thmm = w_next * thr[b]; - } - } - /* zero initialize the rest */ - for (; sb < Encoder.SBMAX_l; ++sb) { - gfc.en[chn].l[sb] = 0; - gfc.thm[chn].l[sb] = 0; - } - } - - private void compute_masking_s(final LameGlobalFlags gfp, - final float fftenergy_s[][], final float[] eb, final float[] thr, - final int chn, final int sblock) { - final LameInternalFlags gfc = gfp.internal_flags; - int j, b; - - for (b = j = 0; b < gfc.npart_s; ++b) { - float ebb = 0, m = 0; - int n = gfc.numlines_s[b]; - for (int i = 0; i < n; ++i, ++j) { - float el = fftenergy_s[sblock][j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - } - assert (b == gfc.npart_s); - assert (j == 129); - for (j = b = 0; b < gfc.npart_s; b++) { - int kk = gfc.s3ind_s[b][0]; - float ecb = gfc.s3_ss[j++] * eb[kk]; - ++kk; - while (kk <= gfc.s3ind_s[b][1]) { - ecb += gfc.s3_ss[j] * eb[kk]; - ++j; - ++kk; - } - - { /* limit calculated threshold by previous granule */ - float x = rpelev_s * gfc.nb_s1[chn][b]; - thr[b] = Math.min(ecb, x); - } - if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) { - /* limit calculated threshold by even older granule */ - float x = rpelev2_s * gfc.nb_s2[chn][b]; - float y = thr[b]; - thr[b] = Math.min(x, y); - } - - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = ecb; - assert (thr[b] >= 0); - } - for (; b <= Encoder.CBANDS; ++b) { - eb[b] = 0; - thr[b] = 0; - } - } - - private void block_type_set(final LameGlobalFlags gfp, - final int[] uselongblock, final int[] blocktype_d, - final int[] blocktype) { - final LameInternalFlags gfc = gfp.internal_flags; - - if (gfp.short_blocks == ShortBlock.short_block_coupled - /* force both channels to use the same block type */ - /* this is necessary if the frame is to be encoded in ms_stereo. */ - /* But even without ms_stereo, FhG does this */ - && !(uselongblock[0] != 0 && uselongblock[1] != 0)) - uselongblock[0] = uselongblock[1] = 0; - - /* - * update the blocktype of the previous granule, since it depends on - * what happend in this granule - */ - for (int chn = 0; chn < gfc.channels_out; chn++) { - blocktype[chn] = Encoder.NORM_TYPE; - /* disable short blocks */ - if (gfp.short_blocks == ShortBlock.short_block_dispensed) - uselongblock[chn] = 1; - if (gfp.short_blocks == ShortBlock.short_block_forced) - uselongblock[chn] = 0; - - if (uselongblock[chn] != 0) { - /* no attack : use long blocks */ - assert (gfc.blocktype_old[chn] != Encoder.START_TYPE); - if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE) - blocktype[chn] = Encoder.STOP_TYPE; - } else { - /* attack : use short blocks */ - blocktype[chn] = Encoder.SHORT_TYPE; - if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) { - gfc.blocktype_old[chn] = Encoder.START_TYPE; - } - if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE) - gfc.blocktype_old[chn] = Encoder.SHORT_TYPE; - } - - blocktype_d[chn] = gfc.blocktype_old[chn]; - // value returned to calling program - gfc.blocktype_old[chn] = blocktype[chn]; - // save for next call to l3psy_anal - } - } - - private float NS_INTERP(final float x, final float y, final float r) { - /* was pow((x),(r))*pow((y),1-(r)) */ - if (r >= 1.0) { - /* 99.7% of the time */ - return x; - } - if (r <= 0.0) - return y; - if (y > 0.0) { - /* rest of the time */ - return (float) (Math.pow(x / y, r) * y); - } - /* never happens */ - return 0.0f; - } - - /** - * these values are tuned only for 44.1kHz... - */ - private static final float regcoef_s[] = { 11.8f, 13.6f, 17.2f, 32f, 46.5f, - 51.3f, 57.5f, 67.1f, 71.5f, 84.6f, 97.6f, 130f, - /* 255.8 */ - }; - - private float pecalc_s(final III_psy_ratio mr, - final float masking_lower) { - float pe_s = 1236.28f / 4; - for (int sb = 0; sb < Encoder.SBMAX_s - 1; sb++) { - for (int sblock = 0; sblock < 3; sblock++) { - float thm = mr.thm.s[sb][sblock]; - assert (sb < regcoef_s.length); - if (thm > 0.0) { - float x = thm * masking_lower; - float en = mr.en.s[sb][sblock]; - if (en > x) { - if (en > x * 1e10) { - pe_s += regcoef_s[sb] * (10.0f * LOG10); - } else { - assert (x > 0); - pe_s += regcoef_s[sb] * Util.FAST_LOG10(en / x); - } - } - } - } - } - - return pe_s; - } - - /** - * these values are tuned only for 44.1kHz... - */ - private static final float regcoef_l[] = { 6.8f, 5.8f, 5.8f, 6.4f, 6.5f, 9.9f, - 12.1f, 14.4f, 15f, 18.9f, 21.6f, 26.9f, 34.2f, 40.2f, 46.8f, 56.5f, - 60.7f, 73.9f, 85.7f, 93.4f, 126.1f, - /* 241.3 */ - }; - - private float pecalc_l(final III_psy_ratio mr, - final float masking_lower) { - float pe_l = 1124.23f / 4; - for (int sb = 0; sb < Encoder.SBMAX_l - 1; sb++) { - float thm = mr.thm.l[sb]; - assert (sb < regcoef_l.length); - if (thm > 0.0) { - float x = thm * masking_lower; - float en = mr.en.l[sb]; - if (en > x) { - if (en > x * 1e10) { - pe_l += regcoef_l[sb] * (10.0f * LOG10); - } else { - assert (x > 0); - pe_l += regcoef_l[sb] * Util.FAST_LOG10(en / x); - } - } - } - } - return pe_l; - } - - private void calc_energy(final LameInternalFlags gfc, - final float[] fftenergy, final float[] eb, final float[] max, - final float[] avg) { - int b, j; - - for (b = j = 0; b < gfc.npart_l; ++b) { - float ebb = 0, m = 0; - int i; - for (i = 0; i < gfc.numlines_l[b]; ++i, ++j) { - float el = fftenergy[j]; - assert (el >= 0); - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - max[b] = m; - avg[b] = ebb * gfc.rnumlines_l[b]; - assert (gfc.rnumlines_l[b] >= 0); - assert (ebb >= 0); - assert (eb[b] >= 0); - assert (max[b] >= 0); - assert (avg[b] >= 0); - } - } - - private void calc_mask_index_l(final LameInternalFlags gfc, - final float[] max, final float[] avg, final int[] mask_idx) { - int last_tab_entry = tab.length - 1; - int b = 0; - float a = avg[b] + avg[b + 1]; - assert (a >= 0); - if (a > 0.0) { - float m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert ((gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1) > 0); - a = 20.0f * (m * 2.0f - a) - / (a * (gfc.numlines_l[b] + gfc.numlines_l[b + 1] - 1)); - int k = (int) a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - - for (b = 1; b < gfc.npart_l - 1; b++) { - a = avg[b - 1] + avg[b] + avg[b + 1]; - assert (a >= 0); - if (a > 0.0) { - float m = max[b - 1]; - if (m < max[b]) - m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert ((gfc.numlines_l[b - 1] + gfc.numlines_l[b] - + gfc.numlines_l[b + 1] - 1) > 0); - a = 20.0f - * (m * 3.0f - a) - / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - + gfc.numlines_l[b + 1] - 1)); - int k = (int) a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - assert (b > 0); - assert (b == gfc.npart_l - 1); - - a = avg[b - 1] + avg[b]; - assert (a >= 0); - if (a > 0.0) { - float m = max[b - 1]; - if (m < max[b]) - m = max[b]; - assert ((gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1) > 0); - a = 20.0f * (m * 2.0f - a) - / (a * (gfc.numlines_l[b - 1] + gfc.numlines_l[b] - 1)); - int k = (int) a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - assert (b == (gfc.npart_l - 1)); - } - - private static final float fircoef[] = { - -8.65163e-18f * 2, -0.00851586f * 2, -6.74764e-18f * 2, 0.0209036f * 2, - -3.36639e-17f * 2, -0.0438162f * 2, -1.54175e-17f * 2, 0.0931738f * 2, - -5.52212e-17f * 2, -0.313819f * 2 - }; - - public final int L3psycho_anal_ns(final LameGlobalFlags gfp, - final float[] buffer[], final int bufPos, final int gr_out, - final III_psy_ratio masking_ratio[][], - final III_psy_ratio masking_MS_ratio[][], - final float percep_entropy[], final float percep_MS_entropy[], - final float energy[], final int blocktype_d[]) { - /* - * to get a good cache performance, one has to think about the sequence, - * in which the variables are used. - */ - final LameInternalFlags gfc = gfp.internal_flags; - - /* fft and energy calculation */ - float wsamp_L[][] = new float[2][Encoder.BLKSIZE]; - float wsamp_S[][][] = new float[2][3][Encoder.BLKSIZE_s]; - - /* convolution */ - float eb_l[] = new float[Encoder.CBANDS + 1], eb_s[] = new float[Encoder.CBANDS + 1]; - float thr[] = new float[Encoder.CBANDS + 2]; - - /* block type */ - int blocktype[] = new int[2], uselongblock[] = new int[2]; - - /* usual variables like loop indices, etc.. */ - int numchn, chn; - int b, i, j, k; - int sb, sblock; - - /* variables used for --nspsytune */ - float ns_hpfsmpl[][] = new float[2][576]; - float pcfact; - - int mask_idx_l[] = new int[Encoder.CBANDS + 2], mask_idx_s[] = new int[Encoder.CBANDS + 2]; - - Arrays.fill(mask_idx_s, 0); - - numchn = gfc.channels_out; - /* chn=2 and 3 = Mid and Side channels */ - if (gfp.mode == MPEGMode.JOINT_STEREO) - numchn = 4; - - if (gfp.VBR == VbrMode.vbr_off) - pcfact = gfc.ResvMax == 0 ? 0f : ((float) gfc.ResvSize) - / gfc.ResvMax * 0.5f; - else if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh - || gfp.VBR == VbrMode.vbr_mt) { - pcfact = 0.6f; - } else - pcfact = 1.0f; - - /********************************************************************** - * Apply HPF of fs/4 to the input signal. This is used for attack - * detection / handling. - **********************************************************************/ - /* Don't copy the input buffer into a temporary buffer */ - /* unroll the loop 2 times */ - for (chn = 0; chn < gfc.channels_out; chn++) { - /* apply high pass filter of fs/4 */ - final float[] firbuf = buffer[chn]; - int firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192; - assert (fircoef.length == ((NSFIRLEN - 1) / 2)); - for (i = 0; i < 576; i++) { - float sum1, sum2; - sum1 = firbuf[firbufPos + i + 10]; - sum2 = 0.0f; - for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { - sum1 += fircoef[j] - * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i - + NSFIRLEN - j]); - sum2 += fircoef[j + 1] - * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos - + i + NSFIRLEN - j - 1]); - } - ns_hpfsmpl[chn][i] = sum1 + sum2; - } - masking_ratio[gr_out][chn].en.assign(gfc.en[chn]); - masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]); - if (numchn > 2) { - /* MS maskings */ - /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */ - masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]); - masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]); - } - } - - for (chn = 0; chn < numchn; chn++) { - float wsamp_l[][]; - float wsamp_s[][][]; - float en_subshort[] = new float[12]; - float en_short[] = { 0, 0, 0, 0 }; - float attack_intensity[] = new float[12]; - int ns_uselongblock = 1; - float attackThreshold; - float max[] = new float[Encoder.CBANDS], avg[] = new float[Encoder.CBANDS]; - int ns_attacks[] = { 0, 0, 0, 0 }; - float fftenergy[] = new float[Encoder.HBLKSIZE]; - float fftenergy_s[][] = new float[3][Encoder.HBLKSIZE_s]; - - /* - * rh 20040301: the following loops do access one off the limits so - * I increase the array dimensions by one and initialize the - * accessed values to zero - */ - assert (gfc.npart_s <= Encoder.CBANDS); - assert (gfc.npart_l <= Encoder.CBANDS); - - /*************************************************************** - * determine the block type (window type) - ***************************************************************/ - /* calculate energies of each sub-shortblocks */ - for (i = 0; i < 3; i++) { - en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6]; - assert (gfc.nsPsy.last_en_subshort[chn][i + 4] > 0); - attack_intensity[i] = en_subshort[i] - / gfc.nsPsy.last_en_subshort[chn][i + 4]; - en_short[0] += en_subshort[i]; - } - - if (chn == 2) { - for (i = 0; i < 576; i++) { - float l, r; - l = ns_hpfsmpl[0][i]; - r = ns_hpfsmpl[1][i]; - ns_hpfsmpl[0][i] = l + r; - ns_hpfsmpl[1][i] = l - r; - } - } - { - float[] pf = ns_hpfsmpl[chn & 1]; - int pfPos = 0; - for (i = 0; i < 9; i++) { - int pfe = pfPos + 576 / 9; - float p = 1.f; - for (; pfPos < pfe; pfPos++) - if (p < Math.abs(pf[pfPos])) - p = Math.abs(pf[pfPos]); - - gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p; - en_short[1 + i / 3] += p; - if (p > en_subshort[i + 3 - 2]) { - assert (en_subshort[i + 3 - 2] > 0); - p = p / en_subshort[i + 3 - 2]; - } else if (en_subshort[i + 3 - 2] > p * 10.0f) { - assert (p > 0); - p = en_subshort[i + 3 - 2] / (p * 10.0f); - } else - p = 0.0f; - attack_intensity[i + 3] = p; - } - } - - if (gfp.analysis) { - float x = attack_intensity[0]; - for (i = 1; i < 12; i++) - if (x < attack_intensity[i]) - x = attack_intensity[i]; - gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn]; - gfc.pinfo.ers_save[chn] = x; - } - - /* compare energies between sub-shortblocks */ - attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s - : gfc.nsPsy.attackthre; - for (i = 0; i < 12; i++) - if (0 == ns_attacks[i / 3] - && attack_intensity[i] > attackThreshold) - ns_attacks[i / 3] = (i % 3) + 1; - - /* - * should have energy change between short blocks, in order to avoid - * periodic signals - */ - for (i = 1; i < 4; i++) { - float ratio; - if (en_short[i - 1] > en_short[i]) { - assert (en_short[i] > 0); - ratio = en_short[i - 1] / en_short[i]; - } else { - assert (en_short[i - 1] > 0); - ratio = en_short[i] / en_short[i - 1]; - } - if (ratio < 1.7) { - ns_attacks[i] = 0; - if (i == 1) - ns_attacks[0] = 0; - } - } - - if (ns_attacks[0] != 0 && gfc.nsPsy.lastAttacks[chn] != 0) - ns_attacks[0] = 0; - - if (gfc.nsPsy.lastAttacks[chn] == 3 - || (ns_attacks[0] + ns_attacks[1] + ns_attacks[2] + ns_attacks[3]) != 0) { - ns_uselongblock = 0; - - if (ns_attacks[1] != 0 && ns_attacks[0] != 0) - ns_attacks[1] = 0; - if (ns_attacks[2] != 0 && ns_attacks[1] != 0) - ns_attacks[2] = 0; - if (ns_attacks[3] != 0 && ns_attacks[2] != 0) - ns_attacks[3] = 0; - } - - if (chn < 2) { - uselongblock[chn] = ns_uselongblock; - } else { - if (ns_uselongblock == 0) { - uselongblock[0] = uselongblock[1] = 0; - } - } - - /* - * there is a one granule delay. Copy maskings computed last call - * into masking_ratio to return to calling program. - */ - energy[chn] = gfc.tot_ener[chn]; - - /********************************************************************* - * compute FFTs - *********************************************************************/ - wsamp_s = wsamp_S; - wsamp_l = wsamp_L; - compute_ffts(gfp, fftenergy, fftenergy_s, wsamp_l, (chn & 1), - wsamp_s, (chn & 1), gr_out, chn, buffer, bufPos); - - /********************************************************************* - * Calculate the energy and the tonality of each partition. - *********************************************************************/ - calc_energy(gfc, fftenergy, eb_l, max, avg); - calc_mask_index_l(gfc, max, avg, mask_idx_l); - /* compute masking thresholds for short blocks */ - for (sblock = 0; sblock < 3; sblock++) { - float enn, thmm; - compute_masking_s(gfp, fftenergy_s, eb_s, thr, chn, sblock); - convert_partition2scalefac_s(gfc, eb_s, thr, chn, sblock); - /**** short block pre-echo control ****/ - for (sb = 0; sb < Encoder.SBMAX_s; sb++) { - thmm = gfc.thm[chn].s[sb][sblock]; - - thmm *= NS_PREECHO_ATT0; - if (ns_attacks[sblock] >= 2 || ns_attacks[sblock + 1] == 1) { - int idx = (sblock != 0) ? sblock - 1 : 2; - double p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT1 * pcfact); - thmm = (float) Math.min(thmm, p); - } - - if (ns_attacks[sblock] == 1) { - int idx = (sblock != 0) ? sblock - 1 : 2; - double p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = (float) Math.min(thmm, p); - } else if ((sblock != 0 && ns_attacks[sblock - 1] == 3) - || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) { - int idx = (sblock != 2) ? sblock + 1 : 0; - double p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = (float) Math.min(thmm, p); - } - - /* pulse like signal detection for fatboy.wav and so on */ - enn = en_subshort[sblock * 3 + 3] - + en_subshort[sblock * 3 + 4] - + en_subshort[sblock * 3 + 5]; - if (en_subshort[sblock * 3 + 5] * 6 < enn) { - thmm *= 0.5; - if (en_subshort[sblock * 3 + 4] * 6 < enn) - thmm *= 0.5; - } - - gfc.thm[chn].s[sb][sblock] = thmm; - } - } - gfc.nsPsy.lastAttacks[chn] = ns_attacks[2]; - - /********************************************************************* - * convolve the partitioned energy and unpredictability with the - * spreading function, s3_l[b][k] - ********************************************************************/ - k = 0; - { - for (b = 0; b < gfc.npart_l; b++) { - /* - * convolve the partitioned energy with the spreading - * function - */ - int kk = gfc.s3ind[b][0]; - float eb2 = eb_l[kk] * tab[mask_idx_l[kk]]; - float ecb = gfc.s3_ll[k++] * eb2; - while (++kk <= gfc.s3ind[b][1]) { - eb2 = eb_l[kk] * tab[mask_idx_l[kk]]; - ecb = mask_add(ecb, gfc.s3_ll[k++] * eb2, kk, kk - b, - gfc, 0); - } - ecb *= 0.158489319246111; /* pow(10,-0.8) */ - - /**** long block pre-echo control ****/ - /** - * <PRE> - * dont use long block pre-echo control if previous granule was - * a short block. This is to avoid the situation: - * frame0: quiet (very low masking) - * frame1: surge (triggers short blocks) - * frame2: regular frame. looks like pre-echo when compared to - * frame0, but all pre-echo was in frame1. - * </PRE> - */ - /* - * chn=0,1 L and R channels - * - * chn=2,3 S and M channels. - */ - - if (gfc.blocktype_old[chn & 1] == Encoder.SHORT_TYPE) - thr[b] = ecb; - else - thr[b] = NS_INTERP( - Math.min(ecb, Math.min(rpelev - * gfc.nb_1[chn][b], rpelev2 - * gfc.nb_2[chn][b])), ecb, pcfact); - - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = ecb; - } - } - for (; b <= Encoder.CBANDS; ++b) { - eb_l[b] = 0; - thr[b] = 0; - } - /* compute masking thresholds for long blocks */ - convert_partition2scalefac_l(gfc, eb_l, thr, chn); - } /* end loop over chn */ - - if (gfp.mode == MPEGMode.STEREO || gfp.mode == MPEGMode.JOINT_STEREO) { - if (gfp.interChRatio > 0.0) { - calc_interchannel_masking(gfp, gfp.interChRatio); - } - } - - if (gfp.mode == MPEGMode.JOINT_STEREO) { - float msfix; - msfix1(gfc); - msfix = gfp.msfix; - if (Math.abs(msfix) > 0.0) - ns_msfix(gfc, msfix, gfp.ATHlower * gfc.ATH.adjust); - } - - /*************************************************************** - * determine final block type - ***************************************************************/ - block_type_set(gfp, uselongblock, blocktype_d, blocktype); - - /********************************************************************* - * compute the value of PE to return ... no delay and advance - *********************************************************************/ - for (chn = 0; chn < numchn; chn++) { - float[] ppe; - int ppePos = 0; - int type; - III_psy_ratio mr; - - if (chn > 1) { - ppe = percep_MS_entropy; - ppePos = -2; - type = Encoder.NORM_TYPE; - if (blocktype_d[0] == Encoder.SHORT_TYPE - || blocktype_d[1] == Encoder.SHORT_TYPE) - type = Encoder.SHORT_TYPE; - mr = masking_MS_ratio[gr_out][chn - 2]; - } else { - ppe = percep_entropy; - ppePos = 0; - type = blocktype_d[chn]; - mr = masking_ratio[gr_out][chn]; - } - - if (type == Encoder.SHORT_TYPE) - ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower); - else - ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower); - - if (gfp.analysis) - gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn]; - - } - return 0; - } - - private void vbrpsy_compute_fft_l(final LameGlobalFlags gfp, - final float[] buffer[], final int bufPos, final int chn, - final int gr_out, final float fftenergy[], final float wsamp_l[][], - final int wsamp_lPos) { - final LameInternalFlags gfc = gfp.internal_flags; - if (chn < 2) { - fft.fft_long(gfc, wsamp_l[wsamp_lPos], chn, buffer, bufPos); - } else if (chn == 2) { - /* FFT data for mid and side channel is derived from L & R */ - for (int j = Encoder.BLKSIZE - 1; j >= 0; --j) { - float l = wsamp_l[wsamp_lPos + 0][j]; - float r = wsamp_l[wsamp_lPos + 1][j]; - wsamp_l[wsamp_lPos + 0][j] = (l + r) * Util.SQRT2 * 0.5f; - wsamp_l[wsamp_lPos + 1][j] = (l - r) * Util.SQRT2 * 0.5f; - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy[0] = NON_LINEAR_SCALE_ENERGY(wsamp_l[wsamp_lPos + 0][0]); - fftenergy[0] *= fftenergy[0]; - - for (int j = Encoder.BLKSIZE / 2 - 1; j >= 0; --j) { - float re = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 - j]; - float im = wsamp_l[wsamp_lPos + 0][Encoder.BLKSIZE / 2 + j]; - fftenergy[Encoder.BLKSIZE / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5f); - } - /* total energy */ - { - float totalenergy = 0.0f; - for (int j = 11; j < Encoder.HBLKSIZE; j++) - totalenergy += fftenergy[j]; - - gfc.tot_ener[chn] = totalenergy; - } - - if (gfp.analysis) { - for (int j = 0; j < Encoder.HBLKSIZE; j++) { - gfc.pinfo.energy[gr_out][chn][j] = gfc.pinfo.energy_save[chn][j]; - gfc.pinfo.energy_save[chn][j] = fftenergy[j]; - } - gfc.pinfo.pe[gr_out][chn] = gfc.pe[chn]; - } - } - - private void vbrpsy_compute_fft_s(final LameGlobalFlags gfp, - final float[] buffer[], final int bufPos, final int chn, - final int sblock, final float fftenergy_s[][], - final float wsamp_s[][][], int wsamp_sPos) { - final LameInternalFlags gfc = gfp.internal_flags; - - if (sblock == 0 && chn < 2) { - fft.fft_short(gfc, wsamp_s[wsamp_sPos], chn, buffer, bufPos); - } - if (chn == 2) { - /* FFT data for mid and side channel is derived from L & R */ - for (int j = Encoder.BLKSIZE_s - 1; j >= 0; --j) { - float l = wsamp_s[wsamp_sPos+0][sblock][j]; - float r = wsamp_s[wsamp_sPos+1][sblock][j]; - wsamp_s[wsamp_sPos+0][sblock][j] = (l + r) * Util.SQRT2 * 0.5f; - wsamp_s[wsamp_sPos+1][sblock][j] = (l - r) * Util.SQRT2 * 0.5f; - } - } - - /********************************************************************* - * compute energies - *********************************************************************/ - fftenergy_s[sblock][0] = wsamp_s[wsamp_sPos+0][sblock][0]; - fftenergy_s[sblock][0] *= fftenergy_s[sblock][0]; - for (int j = Encoder.BLKSIZE_s / 2 - 1; j >= 0; --j) { - float re = wsamp_s[wsamp_sPos+0][sblock][Encoder.BLKSIZE_s / 2 - j]; - float im = wsamp_s[wsamp_sPos+0][sblock][Encoder.BLKSIZE_s / 2 + j]; - fftenergy_s[sblock][Encoder.BLKSIZE_s / 2 - j] = NON_LINEAR_SCALE_ENERGY((re - * re + im * im) * 0.5f); - } - } - - /** - * compute loudness approximation (used for ATH auto-level adjustment) - */ - private void vbrpsy_compute_loudness_approximation_l(LameGlobalFlags gfp, - int gr_out, int chn, float fftenergy[]) { - final LameInternalFlags gfc = gfp.internal_flags; - if (gfp.athaa_loudapprox == 2 && chn < 2) { - // no loudness for mid/side ch - gfc.loudness_sq[gr_out][chn] = gfc.loudness_sq_save[chn]; - gfc.loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc); - } - } - - private static final float fircoef_[] = { -8.65163e-18f * 2, - -0.00851586f * 2, -6.74764e-18f * 2, 0.0209036f * 2, - -3.36639e-17f * 2, -0.0438162f * 2, -1.54175e-17f * 2, - 0.0931738f * 2, -5.52212e-17f * 2, -0.313819f * 2 }; - - /** - * Apply HPF of fs/4 to the input signal. This is used for attack detection - * / handling. - */ - private void vbrpsy_attack_detection(final LameGlobalFlags gfp, - final float[] buffer[], final int bufPos, final int gr_out, - final III_psy_ratio masking_ratio[][], - final III_psy_ratio masking_MS_ratio[][], - final float energy[], float sub_short_factor[][], - final int ns_attacks[][], final int uselongblock[]) { - float ns_hpfsmpl[][] = new float[2][576]; - final LameInternalFlags gfc = gfp.internal_flags; - int n_chn_out = gfc.channels_out; - /* chn=2 and 3 = Mid and Side channels */ - int n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 : n_chn_out; - /* Don't copy the input buffer into a temporary buffer */ - /* unroll the loop 2 times */ - for (int chn = 0; chn < n_chn_out; chn++) { - /* apply high pass filter of fs/4 */ - final float[] firbuf = buffer[chn]; - int firbufPos = bufPos + 576 - 350 - NSFIRLEN + 192; - assert (fircoef_.length == ((NSFIRLEN - 1) / 2)); - for (int i = 0; i < 576; i++) { - float sum1, sum2; - sum1 = firbuf[firbufPos + i + 10]; - sum2 = 0.0f; - for (int j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { - sum1 += fircoef_[j] - * (firbuf[firbufPos + i + j] + firbuf[firbufPos + i - + NSFIRLEN - j]); - sum2 += fircoef_[j + 1] - * (firbuf[firbufPos + i + j + 1] + firbuf[firbufPos - + i + NSFIRLEN - j - 1]); - } - ns_hpfsmpl[chn][i] = sum1 + sum2; - } - masking_ratio[gr_out][chn].en.assign(gfc.en[chn]); - masking_ratio[gr_out][chn].thm.assign(gfc.thm[chn]); - if (n_chn_psy > 2) { - /* MS maskings */ - /* percep_MS_entropy [chn-2] = gfc . pe [chn]; */ - masking_MS_ratio[gr_out][chn].en.assign(gfc.en[chn + 2]); - masking_MS_ratio[gr_out][chn].thm.assign(gfc.thm[chn + 2]); - } - } - for (int chn = 0; chn < n_chn_psy; chn++) { - float attack_intensity[] = new float[12]; - float en_subshort[] = new float[12]; - float en_short[] = { 0, 0, 0, 0 }; - float[] pf = ns_hpfsmpl[chn & 1]; - int pfPos = 0; - final float attackThreshold = (chn == 3) ? gfc.nsPsy.attackthre_s - : gfc.nsPsy.attackthre; - int ns_uselongblock = 1; - - if (chn == 2) { - for (int i = 0, j = 576; j > 0; ++i, --j) { - final float l = ns_hpfsmpl[0][i]; - final float r = ns_hpfsmpl[1][i]; - ns_hpfsmpl[0][i] = l + r; - ns_hpfsmpl[1][i] = l - r; - } - } - /*************************************************************** - * determine the block type (window type) - ***************************************************************/ - /* calculate energies of each sub-shortblocks */ - for (int i = 0; i < 3; i++) { - en_subshort[i] = gfc.nsPsy.last_en_subshort[chn][i + 6]; - assert (gfc.nsPsy.last_en_subshort[chn][i + 4] > 0); - attack_intensity[i] = en_subshort[i] - / gfc.nsPsy.last_en_subshort[chn][i + 4]; - en_short[0] += en_subshort[i]; - } - - for (int i = 0; i < 9; i++) { - final int pfe = pfPos + 576 / 9; - float p = 1.f; - for (; pfPos < pfe; pfPos++) - if (p < Math.abs(pf[pfPos])) - p = Math.abs(pf[pfPos]); - - gfc.nsPsy.last_en_subshort[chn][i] = en_subshort[i + 3] = p; - en_short[1 + i / 3] += p; - if (p > en_subshort[i + 3 - 2]) { - assert (en_subshort[i + 3 - 2] > 0); - p = p / en_subshort[i + 3 - 2]; - } else if (en_subshort[i + 3 - 2] > p * 10.0) { - assert (p > 0); - p = en_subshort[i + 3 - 2] / (p * 10.0f); - } else { - p = 0.0f; - } - attack_intensity[i + 3] = p; - } - /* pulse like signal detection for fatboy.wav and so on */ - for (int i = 0; i < 3; ++i) { - final float enn = en_subshort[i * 3 + 3] - + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5]; - float factor = 1.f; - if (en_subshort[i * 3 + 5] * 6 < enn) { - factor *= 0.5f; - if (en_subshort[i * 3 + 4] * 6 < enn) { - factor *= 0.5f; - } - } - sub_short_factor[chn][i] = factor; - } - - if (gfp.analysis) { - float x = attack_intensity[0]; - for (int i = 1; i < 12; i++) { - if (x < attack_intensity[i]) { - x = attack_intensity[i]; - } - } - gfc.pinfo.ers[gr_out][chn] = gfc.pinfo.ers_save[chn]; - gfc.pinfo.ers_save[chn] = x; - } - - /* compare energies between sub-shortblocks */ - for (int i = 0; i < 12; i++) { - if (0 == ns_attacks[chn][i / 3] - && attack_intensity[i] > attackThreshold) { - ns_attacks[chn][i / 3] = (i % 3) + 1; - } - } - - /* - * should have energy change between short blocks, in order to avoid - * periodic signals - */ - /* Good samples to show the effect are Trumpet test songs */ - /* - * GB: tuned (1) to avoid too many short blocks for test sample - * TRUMPET - */ - /* - * RH: tuned (2) to let enough short blocks through for test sample - * FSOL and SNAPS - */ - for (int i = 1; i < 4; i++) { - final float u = en_short[i - 1]; - final float v = en_short[i]; - final float m = Math.max(u, v); - if (m < 40000) { /* (2) */ - if (u < 1.7 * v && v < 1.7 * u) { /* (1) */ - if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) { - ns_attacks[chn][0] = 0; - } - ns_attacks[chn][i] = 0; - } - } - } - - if (ns_attacks[chn][0] <= gfc.nsPsy.lastAttacks[chn]) { - ns_attacks[chn][0] = 0; - } - - if (gfc.nsPsy.lastAttacks[chn] == 3 - || (ns_attacks[chn][0] + ns_attacks[chn][1] - + ns_attacks[chn][2] + ns_attacks[chn][3]) != 0) { - ns_uselongblock = 0; - - if (ns_attacks[chn][1] != 0 && ns_attacks[chn][0] != 0) { - ns_attacks[chn][1] = 0; - } - if (ns_attacks[chn][2] != 0 && ns_attacks[chn][1] != 0) { - ns_attacks[chn][2] = 0; - } - if (ns_attacks[chn][3] != 0 && ns_attacks[chn][2] != 0) { - ns_attacks[chn][3] = 0; - } - } - if (chn < 2) { - uselongblock[chn] = ns_uselongblock; - } else { - if (ns_uselongblock == 0) { - uselongblock[0] = uselongblock[1] = 0; - } - } - - /* - * there is a one granule delay. Copy maskings computed last call - * into masking_ratio to return to calling program. - */ - energy[chn] = gfc.tot_ener[chn]; - } - } - - private void vbrpsy_skip_masking_s(final LameInternalFlags gfc, - final int chn, final int sblock) { - if (sblock == 0) { - for (int b = 0; b < gfc.npart_s; b++) { - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = 0; - } - } - } - - private void vbrpsy_skip_masking_l(final LameInternalFlags gfc, - final int chn) { - for (int b = 0; b < gfc.npart_l; b++) { - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = 0; - } - } - - private void psyvbr_calc_mask_index_s(final LameInternalFlags gfc, - final float[] max, final float[] avg, final int[] mask_idx) { - int last_tab_entry = tab.length - 1; - int b = 0; - float a = avg[b] + avg[b + 1]; - assert (a >= 0); - if (a > 0.0) { - float m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert ((gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1) > 0); - a = 20.0f * (m * 2.0f - a) - / (a * (gfc.numlines_s[b] + gfc.numlines_s[b + 1] - 1)); - int k = (int) a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - - for (b = 1; b < gfc.npart_s - 1; b++) { - a = avg[b - 1] + avg[b] + avg[b + 1]; - assert (b + 1 < gfc.npart_s); - assert (a >= 0); - if (a > 0.0) { - float m = max[b - 1]; - if (m < max[b]) - m = max[b]; - if (m < max[b + 1]) - m = max[b + 1]; - assert ((gfc.numlines_s[b - 1] + gfc.numlines_s[b] - + gfc.numlines_s[b + 1] - 1) > 0); - a = 20.0f - * (m * 3.0f - a) - / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - + gfc.numlines_s[b + 1] - 1)); - int k = (int) a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - } - assert (b > 0); - assert (b == gfc.npart_s - 1); - - a = avg[b - 1] + avg[b]; - assert (a >= 0); - if (a > 0.0) { - float m = max[b - 1]; - if (m < max[b]) - m = max[b]; - assert ((gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1) > 0); - a = 20.0f * (m * 2.0f - a) - / (a * (gfc.numlines_s[b - 1] + gfc.numlines_s[b] - 1)); - int k = (int) a; - if (k > last_tab_entry) - k = last_tab_entry; - mask_idx[b] = k; - } else { - mask_idx[b] = 0; - } - assert (b == (gfc.npart_s - 1)); - } - - private void vbrpsy_compute_masking_s(final LameGlobalFlags gfp, - final float[] fftenergy_s[], final float[] eb, final float[] thr, - final int chn, final int sblock) { - final LameInternalFlags gfc = gfp.internal_flags; - float max[] = new float[Encoder.CBANDS], avg[] = new float[Encoder.CBANDS]; - int i, j, b; - int mask_idx_s[] = new int[Encoder.CBANDS]; - - for (b = j = 0; b < gfc.npart_s; ++b) { - float ebb = 0, m = 0; - int n = gfc.numlines_s[b]; - for (i = 0; i < n; ++i, ++j) { - float el = fftenergy_s[sblock][j]; - ebb += el; - if (m < el) - m = el; - } - eb[b] = ebb; - assert (ebb >= 0); - max[b] = m; - assert (n > 0); - avg[b] = ebb / n; - assert (avg[b] >= 0); - } - assert (b == gfc.npart_s); - assert (j == 129); - for (; b < Encoder.CBANDS; ++b) { - max[b] = 0; - avg[b] = 0; - } - psyvbr_calc_mask_index_s(gfc, max, avg, mask_idx_s); - for (j = b = 0; b < gfc.npart_s; b++) { - int kk = gfc.s3ind_s[b][0]; - int last = gfc.s3ind_s[b][1]; - int dd, dd_n; - float x, ecb, avg_mask; - dd = mask_idx_s[kk]; - dd_n = 1; - ecb = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]]; - ++j; - ++kk; - while (kk <= last) { - dd += mask_idx_s[kk]; - dd_n += 1; - x = gfc.s3_ss[j] * eb[kk] * tab[mask_idx_s[kk]]; - ecb = vbrpsy_mask_add(ecb, x, kk - b); - ++j; - ++kk; - } - dd = (1 + 2 * dd) / (2 * dd_n); - avg_mask = tab[dd] * 0.5f; - ecb *= avg_mask; - thr[b] = ecb; - gfc.nb_s2[chn][b] = gfc.nb_s1[chn][b]; - gfc.nb_s1[chn][b] = ecb; - { - /* - * if THR exceeds EB, the quantization routines will take the - * difference from other bands. in case of strong tonal samples - * (tonaltest.wav) this leads to heavy distortions. that's why - * we limit THR here. - */ - x = max[b]; - x *= gfc.minval_s[b]; - x *= avg_mask; - if (thr[b] > x) { - thr[b] = x; - } - } - if (gfc.masking_lower > 1) { - thr[b] *= gfc.masking_lower; - } - if (thr[b] > eb[b]) { - thr[b] = eb[b]; - } - if (gfc.masking_lower < 1) { - thr[b] *= gfc.masking_lower; - } - - assert (thr[b] >= 0); - } - for (; b < Encoder.CBANDS; ++b) { - eb[b] = 0; - thr[b] = 0; - } - } - - private void vbrpsy_compute_masking_l(final LameInternalFlags gfc, - final float fftenergy[], final float eb_l[], final float thr[], - final int chn) { - float max[] = new float[Encoder.CBANDS], avg[] = new float[Encoder.CBANDS]; - int mask_idx_l[] = new int[Encoder.CBANDS + 2]; - int b; - - /********************************************************************* - * Calculate the energy and the tonality of each partition. - *********************************************************************/ - calc_energy(gfc, fftenergy, eb_l, max, avg); - calc_mask_index_l(gfc, max, avg, mask_idx_l); - - /********************************************************************* - * convolve the partitioned energy and unpredictability with the - * spreading function, s3_l[b][k] - ********************************************************************/ - int k = 0; - for (b = 0; b < gfc.npart_l; b++) { - float x, ecb, avg_mask, t; - /* convolve the partitioned energy with the spreading function */ - int kk = gfc.s3ind[b][0]; - int last = gfc.s3ind[b][1]; - int dd = 0, dd_n = 0; - dd = mask_idx_l[kk]; - dd_n += 1; - ecb = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]]; - ++k; - ++kk; - while (kk <= last) { - dd += mask_idx_l[kk]; - dd_n += 1; - x = gfc.s3_ll[k] * eb_l[kk] * tab[mask_idx_l[kk]]; - t = vbrpsy_mask_add(ecb, x, kk - b); - ecb = t; - ++k; - ++kk; - } - dd = (1 + 2 * dd) / (2 * dd_n); - avg_mask = tab[dd] * 0.5f; - ecb *= avg_mask; - - /**** long block pre-echo control ****/ - /** - * <PRE> - * dont use long block pre-echo control if previous granule was - * a short block. This is to avoid the situation: - * frame0: quiet (very low masking) - * frame1: surge (triggers short blocks) - * frame2: regular frame. looks like pre-echo when compared to - * frame0, but all pre-echo was in frame1. - * </PRE> - */ - /* - * chn=0,1 L and R channels chn=2,3 S and M channels. - */ - if (gfc.blocktype_old[chn & 0x01] == Encoder.SHORT_TYPE) { - float ecb_limit = rpelev * gfc.nb_1[chn][b]; - if (ecb_limit > 0) { - thr[b] = Math.min(ecb, ecb_limit); - } else { - /** - * <PRE> - * Robert 071209: - * Because we don't calculate long block psy when we know a granule - * should be of short blocks, we don't have any clue how the granule - * before would have looked like as a long block. So we have to guess - * a little bit for this END_TYPE block. - * Most of the time we get away with this sloppyness. (fingers crossed :) - * The speed increase is worth it. - * </PRE> - */ - thr[b] = Math.min(ecb, eb_l[b] * NS_PREECHO_ATT2); - } - } else { - float ecb_limit_2 = rpelev2 * gfc.nb_2[chn][b]; - float ecb_limit_1 = rpelev * gfc.nb_1[chn][b]; - float ecb_limit; - if (ecb_limit_2 <= 0) { - ecb_limit_2 = ecb; - } - if (ecb_limit_1 <= 0) { - ecb_limit_1 = ecb; - } - if (gfc.blocktype_old[chn & 0x01] == Encoder.NORM_TYPE) { - ecb_limit = Math.min(ecb_limit_1, ecb_limit_2); - } else { - ecb_limit = ecb_limit_1; - } - thr[b] = Math.min(ecb, ecb_limit); - } - gfc.nb_2[chn][b] = gfc.nb_1[chn][b]; - gfc.nb_1[chn][b] = ecb; - { - /* - * if THR exceeds EB, the quantization routines will take the - * difference from other bands. in case of strong tonal samples - * (tonaltest.wav) this leads to heavy distortions. that's why - * we limit THR here. - */ - x = max[b]; - x *= gfc.minval_l[b]; - x *= avg_mask; - if (thr[b] > x) { - thr[b] = x; - } - } - if (gfc.masking_lower > 1) { - thr[b] *= gfc.masking_lower; - } - if (thr[b] > eb_l[b]) { - thr[b] = eb_l[b]; - } - if (gfc.masking_lower < 1) { - thr[b] *= gfc.masking_lower; - } - assert (thr[b] >= 0); - } - for (; b < Encoder.CBANDS; ++b) { - eb_l[b] = 0; - thr[b] = 0; - } - } - - private void vbrpsy_compute_block_type(final LameGlobalFlags gfp, - final int[] uselongblock) { - final LameInternalFlags gfc = gfp.internal_flags; - - if (gfp.short_blocks == ShortBlock.short_block_coupled - /* force both channels to use the same block type */ - /* this is necessary if the frame is to be encoded in ms_stereo. */ - /* But even without ms_stereo, FhG does this */ - && !(uselongblock[0] != 0 && uselongblock[1] != 0)) - uselongblock[0] = uselongblock[1] = 0; - - for (int chn = 0; chn < gfc.channels_out; chn++) { - /* disable short blocks */ - if (gfp.short_blocks == ShortBlock.short_block_dispensed) { - uselongblock[chn] = 1; - } - if (gfp.short_blocks == ShortBlock.short_block_forced) { - uselongblock[chn] = 0; - } - } - } - - private void vbrpsy_apply_block_type(final LameGlobalFlags gfp, - final int[] uselongblock, final int[] blocktype_d) { - final LameInternalFlags gfc = gfp.internal_flags; - - /* - * update the blocktype of the previous granule, since it depends on - * what happend in this granule - */ - for (int chn = 0; chn < gfc.channels_out; chn++) { - int blocktype = Encoder.NORM_TYPE; - /* disable short blocks */ - - if (uselongblock[chn] != 0) { - /* no attack : use long blocks */ - assert (gfc.blocktype_old[chn] != Encoder.START_TYPE); - if (gfc.blocktype_old[chn] == Encoder.SHORT_TYPE) - blocktype = Encoder.STOP_TYPE; - } else { - /* attack : use short blocks */ - blocktype = Encoder.SHORT_TYPE; - if (gfc.blocktype_old[chn] == Encoder.NORM_TYPE) { - gfc.blocktype_old[chn] = Encoder.START_TYPE; - } - if (gfc.blocktype_old[chn] == Encoder.STOP_TYPE) - gfc.blocktype_old[chn] = Encoder.SHORT_TYPE; - } - - blocktype_d[chn] = gfc.blocktype_old[chn]; - // value returned to calling program - gfc.blocktype_old[chn] = blocktype; - // save for next call to l3psy_anal - } - } - - /** - * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper - */ - private void vbrpsy_compute_MS_thresholds(final float eb[][], - final float thr[][], final float cb_mld[], final float ath_cb[], - final float athadjust, final float msfix, final int n) { - float msfix2 = msfix * 2; - float athlower = msfix > 0 ? (float) Math.pow(10, athadjust) : 1f; - float rside, rmid; - for (int b = 0; b < n; ++b) { - float ebM = eb[2][b]; - float ebS = eb[3][b]; - float thmL = thr[0][b]; - float thmR = thr[1][b]; - float thmM = thr[2][b]; - float thmS = thr[3][b]; - - /* use this fix if L & R masking differs by 2db or less */ - if (thmL <= 1.58 * thmR && thmR <= 1.58 * thmL) { - float mld_m = cb_mld[b] * ebS; - float mld_s = cb_mld[b] * ebM; - rmid = Math.max(thmM, Math.min(thmS, mld_m)); - rside = Math.max(thmS, Math.min(thmM, mld_s)); - } else { - rmid = thmM; - rside = thmS; - } - if (msfix > 0) { - /***************************************************************/ - /* Adjust M/S maskings if user set "msfix" */ - /***************************************************************/ - /* Naoki Shibata 2000 */ - float thmLR, thmMS; - float ath = ath_cb[b] * athlower; - thmLR = Math.min(Math.max(thmL, ath), Math.max(thmR, ath)); - thmM = Math.max(rmid, ath); - thmS = Math.max(rside, ath); - thmMS = thmM + thmS; - if (thmMS > 0 && (thmLR * msfix2) < thmMS) { - float f = thmLR * msfix2 / thmMS; - thmM *= f; - thmS *= f; - assert (thmMS > 0); - } - rmid = Math.min(thmM, rmid); - rside = Math.min(thmS, rside); - } - if (rmid > ebM) { - rmid = ebM; - } - if (rside > ebS) { - rside = ebS; - } - thr[2][b] = rmid; - thr[3][b] = rside; - } - } - - public final int L3psycho_anal_vbr(final LameGlobalFlags gfp, - final float[] buffer[], final int bufPos, final int gr_out, - final III_psy_ratio masking_ratio[][], - final III_psy_ratio masking_MS_ratio[][], - final float percep_entropy[], final float percep_MS_entropy[], - final float energy[], final int blocktype_d[]) { - final LameInternalFlags gfc = gfp.internal_flags; - - /* fft and energy calculation */ - float wsamp_l[][]; - float wsamp_s[][][]; - float fftenergy[] = new float[Encoder.HBLKSIZE]; - float fftenergy_s[][] = new float[3][Encoder.HBLKSIZE_s]; - float wsamp_L[][] = new float[2][Encoder.BLKSIZE]; - float wsamp_S[][][] = new float[2][3][Encoder.BLKSIZE_s]; - float eb[][] = new float[4][Encoder.CBANDS], thr[][] = new float[4][Encoder.CBANDS]; - - float sub_short_factor[][] = new float[4][3]; - float pcfact = 0.6f; - - /* block type */ - int ns_attacks[][] = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } }; - int uselongblock[] = new int[2]; - - /* usual variables like loop indices, etc.. */ - - /* chn=2 and 3 = Mid and Side channels */ - int n_chn_psy = (gfp.mode == MPEGMode.JOINT_STEREO) ? 4 - : gfc.channels_out; - - vbrpsy_attack_detection(gfp, buffer, bufPos, gr_out, masking_ratio, - masking_MS_ratio, energy, sub_short_factor, ns_attacks, - uselongblock); - - vbrpsy_compute_block_type(gfp, uselongblock); - - /* LONG BLOCK CASE */ - { - for (int chn = 0; chn < n_chn_psy; chn++) { - int ch01 = chn & 0x01; - wsamp_l = wsamp_L; - vbrpsy_compute_fft_l(gfp, buffer, bufPos, chn, gr_out, - fftenergy, wsamp_l, ch01); - - vbrpsy_compute_loudness_approximation_l(gfp, gr_out, chn, - fftenergy); - - if (uselongblock[ch01] != 0) { - vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn], - chn); - } else { - vbrpsy_skip_masking_l(gfc, chn); - } - } - if ((uselongblock[0] + uselongblock[1]) == 2) { - /* M/S channel */ - if (gfp.mode == MPEGMode.JOINT_STEREO) { - vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_l, - gfc.ATH.cb_l, gfp.ATHlower * gfc.ATH.adjust, - gfp.msfix, gfc.npart_l); - } - } - /* TODO: apply adaptive ATH masking here ?? */ - for (int chn = 0; chn < n_chn_psy; chn++) { - int ch01 = chn & 0x01; - if (uselongblock[ch01] != 0) { - convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn); - } - } - } - - /* SHORT BLOCKS CASE */ - { - for (int sblock = 0; sblock < 3; sblock++) { - for (int chn = 0; chn < n_chn_psy; ++chn) { - int ch01 = chn & 0x01; - - if (uselongblock[ch01] != 0) { - vbrpsy_skip_masking_s(gfc, chn, sblock); - } else { - /* compute masking thresholds for short blocks */ - wsamp_s = wsamp_S; - vbrpsy_compute_fft_s(gfp, buffer, bufPos, chn, sblock, - fftenergy_s, wsamp_s, ch01); - vbrpsy_compute_masking_s(gfp, fftenergy_s, eb[chn], - thr[chn], chn, sblock); - } - } - if ((uselongblock[0] + uselongblock[1]) == 0) { - /* M/S channel */ - if (gfp.mode == MPEGMode.JOINT_STEREO) { - vbrpsy_compute_MS_thresholds(eb, thr, gfc.mld_cb_s, - gfc.ATH.cb_s, gfp.ATHlower * gfc.ATH.adjust, - gfp.msfix, gfc.npart_s); - } - /* L/R channel */ - } - /* TODO: apply adaptive ATH masking here ?? */ - for (int chn = 0; chn < n_chn_psy; ++chn) { - int ch01 = chn & 0x01; - if (0 == uselongblock[ch01]) { - convert_partition2scalefac_s(gfc, eb[chn], thr[chn], - chn, sblock); - } - } - } - - /**** short block pre-echo control ****/ - for (int chn = 0; chn < n_chn_psy; chn++) { - int ch01 = chn & 0x01; - - if (uselongblock[ch01] != 0) { - continue; - } - for (int sb = 0; sb < Encoder.SBMAX_s; sb++) { - float new_thmm[] = new float[3]; - for (int sblock = 0; sblock < 3; sblock++) { - float thmm = gfc.thm[chn].s[sb][sblock]; - thmm *= NS_PREECHO_ATT0; - - if (ns_attacks[chn][sblock] >= 2 - || ns_attacks[chn][sblock + 1] == 1) { - int idx = (sblock != 0) ? sblock - 1 : 2; - double p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT1 * pcfact); - thmm = (float) Math.min(thmm, p); - } else if (ns_attacks[chn][sblock] == 1) { - int idx = (sblock != 0) ? sblock - 1 : 2; - double p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = (float) Math.min(thmm, p); - } else if ((sblock != 0 && ns_attacks[chn][sblock - 1] == 3) - || (sblock == 0 && gfc.nsPsy.lastAttacks[chn] == 3)) { - int idx = (sblock != 2) ? sblock + 1 : 0; - double p = NS_INTERP(gfc.thm[chn].s[sb][idx], thmm, - NS_PREECHO_ATT2 * pcfact); - thmm = (float) Math.min(thmm, p); - } - - /* pulse like signal detection for fatboy.wav and so on */ - thmm *= sub_short_factor[chn][sblock]; - - new_thmm[sblock] = thmm; - } - for (int sblock = 0; sblock < 3; sblock++) { - gfc.thm[chn].s[sb][sblock] = new_thmm[sblock]; - } - } - } - } - for (int chn = 0; chn < n_chn_psy; chn++) { - gfc.nsPsy.lastAttacks[chn] = ns_attacks[chn][2]; - } - - /*************************************************************** - * determine final block type - ***************************************************************/ - vbrpsy_apply_block_type(gfp, uselongblock, blocktype_d); - - /********************************************************************* - * compute the value of PE to return ... no delay and advance - *********************************************************************/ - for (int chn = 0; chn < n_chn_psy; chn++) { - float[] ppe; - int ppePos; - int type; - III_psy_ratio mr; - - if (chn > 1) { - ppe = percep_MS_entropy; - ppePos = -2; - type = Encoder.NORM_TYPE; - if (blocktype_d[0] == Encoder.SHORT_TYPE - || blocktype_d[1] == Encoder.SHORT_TYPE) - type = Encoder.SHORT_TYPE; - mr = masking_MS_ratio[gr_out][chn - 2]; - } else { - ppe = percep_entropy; - ppePos = 0; - type = blocktype_d[chn]; - mr = masking_ratio[gr_out][chn]; - } - - if (type == Encoder.SHORT_TYPE) { - ppe[ppePos + chn] = pecalc_s(mr, gfc.masking_lower); - } else { - ppe[ppePos + chn] = pecalc_l(mr, gfc.masking_lower); - } - - if (gfp.analysis) { - gfc.pinfo.pe[gr_out][chn] = ppe[ppePos + chn]; - } - } - return 0; - } - - private float s3_func_x(final float bark, final float hf_slope) { - float tempx = bark, tempy; - - if (tempx >= 0) { - tempy = -tempx * 27; - } else { - tempy = tempx * hf_slope; - } - if (tempy <= -72.0) { - return 0; - } - return (float) Math.exp(tempy * LN_TO_LOG10); - } - - private float norm_s3_func_x(final float hf_slope) { - double lim_a = 0, lim_b = 0; - { - double x = 0, l, h; - for (x = 0; s3_func_x((float) x, hf_slope) > 1e-20; x -= 1) - ; - l = x; - h = 0; - while (Math.abs(h - l) > 1e-12) { - x = (h + l) / 2; - if (s3_func_x((float) x, hf_slope) > 0) { - h = x; - } else { - l = x; - } - } - lim_a = l; - } - { - double x = 0, l, h; - for (x = 0; s3_func_x((float) x, hf_slope) > 1e-20; x += 1) - ; - l = 0; - h = x; - while (Math.abs(h - l) > 1e-12) { - x = (h + l) / 2; - if (s3_func_x((float) x, hf_slope) > 0) { - l = x; - } else { - h = x; - } - } - lim_b = h; - } - { - double sum = 0; - final int m = 1000; - int i; - for (i = 0; i <= m; ++i) { - double x = lim_a + i * (lim_b - lim_a) / m; - double y = s3_func_x((float) x, hf_slope); - sum += y; - } - { - double norm = (m + 1) / (sum * (lim_b - lim_a)); - /* printf( "norm = %lf\n",norm); */ - return (float) norm; - } - } - } - - /** - * The spreading function. Values returned in units of energy - */ - private float s3_func(final float bark) { - float tempx, x, tempy, temp; - tempx = bark; - if (tempx >= 0) - tempx *= 3; - else - tempx *= 1.5; - - if (tempx >= 0.5 && tempx <= 2.5) { - temp = tempx - 0.5f; - x = 8.0f * (temp * temp - 2.0f * temp); - } else - x = 0.0f; - tempx += 0.474; - tempy = 15.811389f + 7.5f * tempx - 17.5f - * (float) Math.sqrt(1.0 + tempx * tempx); - - if (tempy <= -60.0) - return 0.0f; - - tempx = (float) Math.exp((x + tempy) * LN_TO_LOG10); - - /** - * <PRE> - * Normalization. The spreading function should be normalized so that: - * +inf - * / - * | s3 [ bark ] d(bark) = 1 - * / - * -inf - * </PRE> - */ - tempx /= .6609193; - return tempx; - } - - /** - * see for example "Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7 - */ - private float freq2bark(float freq) { - /* input: freq in hz output: barks */ - if (freq < 0) - freq = 0; - freq = freq * 0.001f; - return 13.0f * (float) Math.atan(.76 * freq) + 3.5f - * (float) Math.atan(freq * freq / (7.5 * 7.5)); - } - - private int init_numline(final int[] numlines, final int[] bo, - final int[] bm, final float[] bval, final float[] bval_width, - final float[] mld, final float[] bo_w, float sfreq, - final int blksize, final int[] scalepos, final float deltafreq, - final int sbmax) { - float b_frq[] = new float[Encoder.CBANDS + 1]; - float sample_freq_frac = sfreq / (sbmax > 15 ? 2 * 576 : 2 * 192); - int partition[] = new int[Encoder.HBLKSIZE]; - int i; - sfreq /= blksize; - int j = 0; - int ni = 0; - /* compute numlines, the number of spectral lines in each partition band */ - /* each partition band should be about DELBARK wide. */ - for (i = 0; i < Encoder.CBANDS; i++) { - float bark1; - int j2; - bark1 = freq2bark(sfreq * j); - - b_frq[i] = sfreq * j; - - for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK - && j2 <= blksize / 2; j2++) - ; - - numlines[i] = j2 - j; - ni = i + 1; - - while (j < j2) { - assert (j < Encoder.HBLKSIZE); - partition[j++] = i; - } - if (j > blksize / 2) { - j = blksize / 2; - ++i; - break; - } - } - assert (i < Encoder.CBANDS); - b_frq[i] = sfreq * j; - - for (int sfb = 0; sfb < sbmax; sfb++) { - int i1, i2, start, end; - float arg; - start = scalepos[sfb]; - end = scalepos[sfb + 1]; - - i1 = (int) Math.floor(.5 + deltafreq * (start - .5)); - if (i1 < 0) - i1 = 0; - i2 = (int) Math.floor(.5 + deltafreq * (end - .5)); - - if (i2 > blksize / 2) - i2 = blksize / 2; - - bm[sfb] = (partition[i1] + partition[i2]) / 2; - bo[sfb] = partition[i2]; - - float f_tmp = sample_freq_frac * end; - /* - * calculate how much of this band belongs to current scalefactor - * band - */ - bo_w[sfb] = (f_tmp - b_frq[bo[sfb]]) - / (b_frq[bo[sfb] + 1] - b_frq[bo[sfb]]); - if (bo_w[sfb] < 0) { - bo_w[sfb] = 0; - } else { - if (bo_w[sfb] > 1) { - bo_w[sfb] = 1; - } - } - /* setup stereo demasking thresholds */ - /* formula reverse enginerred from plot in paper */ - arg = freq2bark(sfreq * scalepos[sfb] * deltafreq); - arg = ((float) Math.min(arg, 15.5) / 15.5f); - - mld[sfb] = (float) Math.pow(10.0, - 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5); - } - - /* compute bark values of each critical band */ - j = 0; - for (int k = 0; k < ni; k++) { - final int w = numlines[k]; - float bark1, bark2; - - bark1 = freq2bark(sfreq * (j)); - bark2 = freq2bark(sfreq * (j + w - 1)); - bval[k] = .5f * (bark1 + bark2); - - bark1 = freq2bark(sfreq * (j - .5f)); - bark2 = freq2bark(sfreq * (j + w - .5f)); - bval_width[k] = bark2 - bark1; - j += w; - } - - return ni; - } - - private float[] init_s3_values(final int s3ind[][], final int npart, - final float[] bval, final float[] bval_width, final float[] norm, - final boolean use_old_s3) { - float s3[][] = new float[Encoder.CBANDS][Encoder.CBANDS]; - /* - * The s3 array is not linear in the bark scale. - * - * bval[x] should be used to get the bark value. - */ - int j; - int numberOfNoneZero = 0; - - /** - * <PRE> - * s[i][j], the value of the spreading function, - * centered at band j (masker), for band i (maskee) - * - * i.e.: sum over j to spread into signal barkval=i - * NOTE: i and j are used opposite as in the ISO docs - * </PRE> - */ - if (use_old_s3) { - for (int i = 0; i < npart; i++) { - for (j = 0; j < npart; j++) { - float v = s3_func(bval[i] - bval[j]) * bval_width[j]; - s3[i][j] = v * norm[i]; - } - } - } else { - for (j = 0; j < npart; j++) { - float hf_slope = 15 + Math.min(21 / bval[j], 12); - float s3_x_norm = norm_s3_func_x(hf_slope); - for (int i = 0; i < npart; i++) { - float v = s3_x_norm - * s3_func_x(bval[i] - bval[j], hf_slope) - * bval_width[j]; - s3[i][j] = v * norm[i]; - } - } - } - for (int i = 0; i < npart; i++) { - for (j = 0; j < npart; j++) { - if (s3[i][j] > 0.0f) - break; - } - s3ind[i][0] = j; - - for (j = npart - 1; j > 0; j--) { - if (s3[i][j] > 0.0f) - break; - } - s3ind[i][1] = j; - numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1); - } - - float[] p = new float[numberOfNoneZero]; - - int k = 0; - for (int i = 0; i < npart; i++) - for (j = s3ind[i][0]; j <= s3ind[i][1]; j++) - p[k++] = s3[i][j]; - - return p; - } - - private float stereo_demask(double f) { - /* setup stereo demasking thresholds */ - /* formula reverse enginerred from plot in paper */ - double arg = freq2bark((float) f); - arg = (Math.min(arg, 15.5) / 15.5); - - return (float) Math.pow(10.0, - 1.25 * (1 - Math.cos(Math.PI * arg)) - 2.5); - } - - /** - * NOTE: the bitrate reduction from the inter-channel masking effect is low - * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr - * does not use this feature. (Robert 071216) - */ - public final int psymodel_init(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - int i; - boolean useOldS3 = true; - float bvl_a = 13, bvl_b = 24; - float snr_l_a = 0, snr_l_b = 0; - float snr_s_a = -8.25f, snr_s_b = -4.5f; - - float bval[] = new float[Encoder.CBANDS]; - float bval_width[] = new float[Encoder.CBANDS]; - float norm[] = new float[Encoder.CBANDS]; - final float sfreq = gfp.out_samplerate; - - switch (gfp.experimentalZ) { - default: - case 0: - useOldS3 = true; - break; - case 1: - useOldS3 = (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) ? false - : true; - break; - case 2: - useOldS3 = false; - break; - case 3: - bvl_a = 8; - snr_l_a = -1.75f; - snr_l_b = -0.0125f; - snr_s_a = -8.25f; - snr_s_b = -2.25f; - break; - } - gfc.ms_ener_ratio_old = .25f; - gfc.blocktype_old[0] = gfc.blocktype_old[1] = Encoder.NORM_TYPE; - // the vbr header is long blocks - - for (i = 0; i < 4; ++i) { - for (int j = 0; j < Encoder.CBANDS; ++j) { - gfc.nb_1[i][j] = 1e20f; - gfc.nb_2[i][j] = 1e20f; - gfc.nb_s1[i][j] = gfc.nb_s2[i][j] = 1.0f; - } - for (int sb = 0; sb < Encoder.SBMAX_l; sb++) { - gfc.en[i].l[sb] = 1e20f; - gfc.thm[i].l[sb] = 1e20f; - } - for (int j = 0; j < 3; ++j) { - for (int sb = 0; sb < Encoder.SBMAX_s; sb++) { - gfc.en[i].s[sb][j] = 1e20f; - gfc.thm[i].s[sb][j] = 1e20f; - } - gfc.nsPsy.lastAttacks[i] = 0; - } - for (int j = 0; j < 9; j++) - gfc.nsPsy.last_en_subshort[i][j] = 10.f; - } - - /* init. for loudness approx. -jd 2001 mar 27 */ - gfc.loudness_sq_save[0] = gfc.loudness_sq_save[1] = 0.0f; - - /************************************************************************* - * now compute the psychoacoustic model specific constants - ************************************************************************/ - /* compute numlines, bo, bm, bval, bval_width, mld */ - - gfc.npart_l = init_numline(gfc.numlines_l, gfc.bo_l, gfc.bm_l, bval, - bval_width, gfc.mld_l, gfc.PSY.bo_l_weight, sfreq, - Encoder.BLKSIZE, gfc.scalefac_band.l, Encoder.BLKSIZE - / (2.0f * 576f), Encoder.SBMAX_l); - assert (gfc.npart_l < Encoder.CBANDS); - /* compute the spreading function */ - for (i = 0; i < gfc.npart_l; i++) { - double snr = snr_l_a; - if (bval[i] >= bvl_a) { - snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a - * (bvl_b - bval[i]) / (bvl_b - bvl_a); - } - norm[i] = (float) Math.pow(10.0, snr / 10.0); - if (gfc.numlines_l[i] > 0) { - gfc.rnumlines_l[i] = 1.0f / gfc.numlines_l[i]; - } else { - gfc.rnumlines_l[i] = 0; - } - } - gfc.s3_ll = init_s3_values(gfc.s3ind, gfc.npart_l, bval, bval_width, - norm, useOldS3); - - /* compute long block specific values, ATH and MINVAL */ - int j = 0; - for (i = 0; i < gfc.npart_l; i++) { - double x; - - /* ATH */ - x = Float.MAX_VALUE; - for (int k = 0; k < gfc.numlines_l[i]; k++, j++) { - final float freq = sfreq * j / (1000.0f * Encoder.BLKSIZE); - float level; - /* - * ATH below 100 Hz constant, not further climbing - */ - level = ATHformula(freq * 1000, gfp) - 20; - // scale to FFT units; returned value is in dB - level = (float) Math.pow(10., 0.1 * level); - // convert from dB . energy - level *= gfc.numlines_l[i]; - if (x > level) - x = level; - } - gfc.ATH.cb_l[i] = (float) x; - - /* - * MINVAL. For low freq, the strength of the masking is limited by - * minval this is an ISO MPEG1 thing, dont know if it is really - * needed - */ - /* - * FIXME: it does work to reduce low-freq problems in S53-Wind-Sax - * and lead-voice samples, but introduces some 3 kbps bit bloat too. - * TODO: Further refinement of the shape of this hack. - */ - x = -20 + bval[i] * 20 / 10; - if (x > 6) { - x = 100; - } - if (x < -15) { - x = -15; - } - x -= 8.; - gfc.minval_l[i] = (float) (Math.pow(10.0, x / 10.) * gfc.numlines_l[i]); - } - - /************************************************************************ - * do the same things for short blocks - ************************************************************************/ - gfc.npart_s = init_numline(gfc.numlines_s, gfc.bo_s, gfc.bm_s, bval, - bval_width, gfc.mld_s, gfc.PSY.bo_s_weight, sfreq, - Encoder.BLKSIZE_s, gfc.scalefac_band.s, Encoder.BLKSIZE_s - / (2.0f * 192), Encoder.SBMAX_s); - assert (gfc.npart_s < Encoder.CBANDS); - - /* SNR formula. short block is normalized by SNR. is it still right ? */ - j = 0; - for (i = 0; i < gfc.npart_s; i++) { - double x; - double snr = snr_s_a; - if (bval[i] >= bvl_a) { - snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a - * (bvl_b - bval[i]) / (bvl_b - bvl_a); - } - norm[i] = (float) Math.pow(10.0, snr / 10.0); - - /* ATH */ - x = Float.MAX_VALUE; - for (int k = 0; k < gfc.numlines_s[i]; k++, j++) { - final float freq = sfreq * j / (1000.0f * Encoder.BLKSIZE_s); - float level; - /* freq = Min(.1,freq); *//* - * ATH below 100 Hz constant, not - * further climbing - */ - level = ATHformula(freq * 1000, gfp) - 20; - // scale to FFT units; returned value is in dB - level = (float) Math.pow(10., 0.1 * level); - // convert from dB . energy - level *= gfc.numlines_s[i]; - if (x > level) - x = level; - } - gfc.ATH.cb_s[i] = (float) x; - - /* - * MINVAL. For low freq, the strength of the masking is limited by - * minval this is an ISO MPEG1 thing, dont know if it is really - * needed - */ - x = (-7.0 + bval[i] * 7.0 / 12.0); - if (bval[i] > 12) { - x *= 1 + Math.log(1 + x) * 3.1; - } - if (bval[i] < 12) { - x *= 1 + Math.log(1 - x) * 2.3; - } - if (x < -15) { - x = -15; - } - x -= 8; - gfc.minval_s[i] = (float) Math.pow(10.0, x / 10) - * gfc.numlines_s[i]; - } - - gfc.s3_ss = init_s3_values(gfc.s3ind_s, gfc.npart_s, bval, bval_width, - norm, useOldS3); - - init_mask_add_max_values(); - fft.init_fft(gfc); - - /* setup temporal masking */ - gfc.decay = (float) Math.exp(-1.0 * LOG10 - / (temporalmask_sustain_sec * sfreq / 192.0)); - - { - float msfix; - msfix = NS_MSFIX; - if ((gfp.exp_nspsytune & 2) != 0) - msfix = 1.0f; - if (Math.abs(gfp.msfix) > 0.0) - msfix = gfp.msfix; - gfp.msfix = msfix; - - /* - * spread only from npart_l bands. Normally, we use the spreading - * function to convolve from npart_l down to npart_l bands - */ - for (int b = 0; b < gfc.npart_l; b++) - if (gfc.s3ind[b][1] > gfc.npart_l - 1) - gfc.s3ind[b][1] = gfc.npart_l - 1; - } - - /* - * prepare for ATH auto adjustment: we want to decrease the ATH by 12 dB - * per second - */ - float frame_duration = (576.f * gfc.mode_gr / sfreq); - gfc.ATH.decay = (float) Math.pow(10., -12. / 10. * frame_duration); - gfc.ATH.adjust = 0.01f; /* minimum, for leading low loudness */ - gfc.ATH.adjustLimit = 1.0f; /* on lead, allow adjust up to maximum */ - - assert (gfc.bo_l[Encoder.SBMAX_l - 1] <= gfc.npart_l); - assert (gfc.bo_s[Encoder.SBMAX_s - 1] <= gfc.npart_s); - - if (gfp.ATHtype != -1) { - /* compute equal loudness weights (eql_w) */ - float freq; - final float freq_inc = (float) gfp.out_samplerate - / (float) (Encoder.BLKSIZE); - float eql_balance = 0.0f; - freq = 0.0f; - for (i = 0; i < Encoder.BLKSIZE / 2; ++i) { - /* convert ATH dB to relative power (not dB) */ - /* to determine eql_w */ - freq += freq_inc; - gfc.ATH.eql_w[i] = 1.f / (float) Math.pow(10, - ATHformula(freq, gfp) / 10); - eql_balance += gfc.ATH.eql_w[i]; - } - eql_balance = 1.0f / eql_balance; - for (i = Encoder.BLKSIZE / 2; --i >= 0;) { /* scale weights */ - gfc.ATH.eql_w[i] *= eql_balance; - } - } - { - for (int b = j = 0; b < gfc.npart_s; ++b) { - for (i = 0; i < gfc.numlines_s[b]; ++i) { - ++j; - } - } - assert (j == 129); - for (int b = j = 0; b < gfc.npart_l; ++b) { - for (i = 0; i < gfc.numlines_l[b]; ++i) { - ++j; - } - } - assert (j == 513); - } - j = 0; - for (i = 0; i < gfc.npart_l; i++) { - final float freq = sfreq * (j + gfc.numlines_l[i] / 2) - / (1.0f * Encoder.BLKSIZE); - gfc.mld_cb_l[i] = stereo_demask(freq); - j += gfc.numlines_l[i]; - } - for (; i < Encoder.CBANDS; ++i) { - gfc.mld_cb_l[i] = 1; - } - j = 0; - for (i = 0; i < gfc.npart_s; i++) { - final float freq = sfreq * (j + gfc.numlines_s[i] / 2) - / (1.0f * Encoder.BLKSIZE_s); - gfc.mld_cb_s[i] = stereo_demask(freq); - j += gfc.numlines_s[i]; - } - for (; i < Encoder.CBANDS; ++i) { - gfc.mld_cb_s[i] = 1; - } - return 0; - } - - /** - * Those ATH formulas are returning their minimum value for input = -1 - */ - private float ATHformula_GB(float f, final float value) { - /** - * <PRE> - * from Painter & Spanias - * modified by Gabriel Bouvigne to better fit the reality - * ath = 3.640 * pow(f,-0.8) - * - 6.800 * exp(-0.6*pow(f-3.4,2.0)) - * + 6.000 * exp(-0.15*pow(f-8.7,2.0)) - * + 0.6* 0.001 * pow(f,4.0); - * - * - * In the past LAME was using the Painter &Spanias formula. - * But we had some recurrent problems with HF content. - * We measured real ATH values, and found the older formula - * to be inaccurate in the higher part. So we made this new - * formula and this solved most of HF problematic test cases. - * The tradeoff is that in VBR mode it increases a lot the - * bitrate. - * </PRE> - */ - - /* - * This curve can be adjusted according to the VBR scale: it adjusts - * from something close to Painter & Spanias on V9 up to Bouvigne's - * formula for V0. This way the VBR bitrate is more balanced according - * to the -V value. - */ - - // the following Hack allows to ask for the lowest value - if (f < -.3) - f = 3410; - - // convert to khz - f /= 1000; - f = (float) Math.max(0.1, f); - - float ath = 3.640f * (float) Math.pow(f, -0.8) - 6.800f - * (float) Math.exp(-0.6 * Math.pow(f - 3.4, 2.0)) + 6.000f - * (float) Math.exp(-0.15 * Math.pow(f - 8.7, 2.0)) - + (0.6f + 0.04f * value) * 0.001f * (float) Math.pow(f, 4.0); - return ath; - } - - public final float ATHformula(final float f, final LameGlobalFlags gfp) { - float ath; - switch (gfp.ATHtype) { - case 0: - ath = ATHformula_GB(f, 9); - break; - case 1: - // over sensitive, should probably be removed - ath = ATHformula_GB(f, -1); - break; - case 2: - ath = ATHformula_GB(f, 0); - break; - case 3: - // modification of GB formula by Roel - ath = ATHformula_GB(f, 1) + 6; - break; - case 4: - ath = ATHformula_GB(f, gfp.ATHcurve); - break; - default: - ath = ATHformula_GB(f, 0); - break; - } - return ath; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Quantize.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Quantize.java deleted file mode 100644 index a9928832f..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Quantize.java +++ /dev/null @@ -1,1478 +0,0 @@ -/* - * MP3 quantization - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 1999-2003 Takehiro Tominaga - * Copyright (c) 2000-2007 Robert Hegemann - * Copyright (c) 2001-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Quantize.java,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */ - -package mp3; - -import java.util.Arrays; - -public class Quantize { - BitStream bs; - Reservoir rv; - QuantizePVT qupvt; - VBRQuantize vbr = new VBRQuantize(); - Takehiro tk; - - public final void setModules(BitStream bs, Reservoir rv, QuantizePVT qupvt, - Takehiro tk) { - this.bs = bs; - this.rv = rv; - this.qupvt = qupvt; - this.tk = tk; - this.vbr.setModules(qupvt, tk); - } - - /** - * convert from L/R <. Mid/Side - */ - public final void ms_convert(final IIISideInfo l3_side, final int gr) { - for (int i = 0; i < 576; ++i) { - float l = l3_side.tt[gr][0].xr[i]; - float r = l3_side.tt[gr][1].xr[i]; - l3_side.tt[gr][0].xr[i] = (l + r) * (float) (Util.SQRT2 * 0.5); - l3_side.tt[gr][1].xr[i] = (l - r) * (float) (Util.SQRT2 * 0.5); - } - } - - /** - * mt 6/99 - * - * initializes cod_info, scalefac and xrpow - * - * returns 0 if all energies in xr are zero, else 1 - */ - private float init_xrpow_core(final GrInfo cod_info, float xrpow[], - int upper, float sum) { - sum = 0; - for (int i = 0; i <= upper; ++i) { - float tmp = Math.abs(cod_info.xr[i]); - sum += tmp; - xrpow[i] = (float) Math.sqrt(tmp * Math.sqrt(tmp)); - - if (xrpow[i] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[i]; - } - return sum; - } - - public final boolean init_xrpow(final LameInternalFlags gfc, - final GrInfo cod_info, float xrpow[]) { - float sum = 0; - final int upper = cod_info.max_nonzero_coeff; - - assert (xrpow != null); - cod_info.xrpow_max = 0; - - /* - * check if there is some energy we have to quantize and calculate xrpow - * matching our fresh scalefactors - */ - assert (0 <= upper && upper <= 575); - - Arrays.fill(xrpow, upper, 576, 0); - - sum = init_xrpow_core(cod_info, xrpow, upper, sum); - - /* - * return 1 if we have something to quantize, else 0 - */ - if (sum > 1E-20f) { - int j = 0; - if ((gfc.substep_shaping & 2) != 0) - j = 1; - - for (int i = 0; i < cod_info.psymax; i++) - gfc.pseudohalf[i] = j; - - return true; - } - - Arrays.fill(cod_info.l3_enc, 0, 576, 0); - return false; - } - - /** - * Gabriel Bouvigne feb/apr 2003<BR> - * Analog silence detection in partitionned sfb21 or sfb12 for short blocks - * - * From top to bottom of sfb, changes to 0 coeffs which are below ath. It - * stops on the first coeff higher than ath. - */ - private void psfb21_analogsilence(final LameInternalFlags gfc, - final GrInfo cod_info) { - final ATH ath = gfc.ATH; - final float[] xr = cod_info.xr; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - /* NORM, START or STOP type, but not SHORT blocks */ - boolean stop = false; - for (int gsfb = Encoder.PSFB21 - 1; gsfb >= 0 && !stop; gsfb--) { - final int start = gfc.scalefac_band.psfb21[gsfb]; - final int end = gfc.scalefac_band.psfb21[gsfb + 1]; - float ath21 = qupvt.athAdjust(ath.adjust, ath.psfb21[gsfb], - ath.floor); - - if (gfc.nsPsy.longfact[21] > 1e-12f) - ath21 *= gfc.nsPsy.longfact[21]; - - for (int j = end - 1; j >= start; j--) { - if (Math.abs(xr[j]) < ath21) - xr[j] = 0; - else { - stop = true; - break; - } - } - } - } else { - /* note: short blocks coeffs are reordered */ - for (int block = 0; block < 3; block++) { - boolean stop = false; - for (int gsfb = Encoder.PSFB12 - 1; gsfb >= 0 && !stop; gsfb--) { - final int start = gfc.scalefac_band.s[12] - * 3 - + (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]) - * block - + (gfc.scalefac_band.psfb12[gsfb] - gfc.scalefac_band.psfb12[0]); - final int end = start - + (gfc.scalefac_band.psfb12[gsfb + 1] - gfc.scalefac_band.psfb12[gsfb]); - float ath12 = qupvt.athAdjust(ath.adjust, ath.psfb12[gsfb], - ath.floor); - - if (gfc.nsPsy.shortfact[12] > 1e-12f) - ath12 *= gfc.nsPsy.shortfact[12]; - - for (int j = end - 1; j >= start; j--) { - if (Math.abs(xr[j]) < ath12) - xr[j] = 0; - else { - stop = true; - break; - } - } - } - } - } - - } - - public final void init_outer_loop(final LameInternalFlags gfc, - final GrInfo cod_info) { - /* - * initialize fresh cod_info - */ - cod_info.part2_3_length = 0; - cod_info.big_values = 0; - cod_info.count1 = 0; - cod_info.global_gain = 210; - cod_info.scalefac_compress = 0; - /* mixed_block_flag, block_type was set in psymodel.c */ - cod_info.table_select[0] = 0; - cod_info.table_select[1] = 0; - cod_info.table_select[2] = 0; - cod_info.subblock_gain[0] = 0; - cod_info.subblock_gain[1] = 0; - cod_info.subblock_gain[2] = 0; - cod_info.subblock_gain[3] = 0; /* this one is always 0 */ - cod_info.region0_count = 0; - cod_info.region1_count = 0; - cod_info.preflag = 0; - cod_info.scalefac_scale = 0; - cod_info.count1table_select = 0; - cod_info.part2_length = 0; - cod_info.sfb_lmax = Encoder.SBPSY_l; - cod_info.sfb_smin = Encoder.SBPSY_s; - cod_info.psy_lmax = gfc.sfb21_extra ? Encoder.SBMAX_l : Encoder.SBPSY_l; - cod_info.psymax = cod_info.psy_lmax; - cod_info.sfbmax = cod_info.sfb_lmax; - cod_info.sfbdivide = 11; - for (int sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - cod_info.width[sfb] = gfc.scalefac_band.l[sfb + 1] - - gfc.scalefac_band.l[sfb]; - /* which is always 0. */ - cod_info.window[sfb] = 3; - } - if (cod_info.block_type == Encoder.SHORT_TYPE) { - float ixwork[] = new float[576]; - - cod_info.sfb_smin = 0; - cod_info.sfb_lmax = 0; - if (cod_info.mixed_block_flag != 0) { - /* - * MPEG-1: sfbs 0-7 long block, 3-12 short blocks MPEG-2(.5): - * sfbs 0-5 long block, 3-12 short blocks - */ - cod_info.sfb_smin = 3; - cod_info.sfb_lmax = gfc.mode_gr * 2 + 4; - } - cod_info.psymax = cod_info.sfb_lmax - + 3 - * ((gfc.sfb21_extra ? Encoder.SBMAX_s : Encoder.SBPSY_s) - cod_info.sfb_smin); - cod_info.sfbmax = cod_info.sfb_lmax + 3 - * (Encoder.SBPSY_s - cod_info.sfb_smin); - cod_info.sfbdivide = cod_info.sfbmax - 18; - cod_info.psy_lmax = cod_info.sfb_lmax; - /* re-order the short blocks, for more efficient encoding below */ - /* By Takehiro TOMINAGA */ - /* - * Within each scalefactor band, data is given for successive time - * windows, beginning with window 0 and ending with window 2. Within - * each window, the quantized values are then arranged in order of - * increasing frequency... - */ - int ix = gfc.scalefac_band.l[cod_info.sfb_lmax]; - System.arraycopy(cod_info.xr, 0, ixwork, 0, 576); - for (int sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - final int start = gfc.scalefac_band.s[sfb]; - final int end = gfc.scalefac_band.s[sfb + 1]; - for (int window = 0; window < 3; window++) { - for (int l = start; l < end; l++) { - cod_info.xr[ix++] = ixwork[3 * l + window]; - } - } - } - - int j = cod_info.sfb_lmax; - for (int sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - cod_info.width[j] = cod_info.width[j + 1] = cod_info.width[j + 2] = gfc.scalefac_band.s[sfb + 1] - - gfc.scalefac_band.s[sfb]; - cod_info.window[j] = 0; - cod_info.window[j + 1] = 1; - cod_info.window[j + 2] = 2; - j += 3; - } - } - - cod_info.count1bits = 0; - cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[0][0]; - cod_info.slen[0] = 0; - cod_info.slen[1] = 0; - cod_info.slen[2] = 0; - cod_info.slen[3] = 0; - - cod_info.max_nonzero_coeff = 575; - - /* - * fresh scalefactors are all zero - */ - Arrays.fill(cod_info.scalefac, 0); - - psfb21_analogsilence(gfc, cod_info); - } - - private enum BinSearchDirection { - BINSEARCH_NONE, BINSEARCH_UP, BINSEARCH_DOWN - } - - /** - * author/date?? - * - * binary step size search used by outer_loop to get a quantizer step size - * to start with - */ - private int bin_search_StepSize(final LameInternalFlags gfc, - final GrInfo cod_info, int desired_rate, final int ch, - final float xrpow[]) { - int nBits; - int CurrentStep = gfc.CurrentStep[ch]; - boolean flagGoneOver = false; - final int start = gfc.OldValue[ch]; - BinSearchDirection Direction = BinSearchDirection.BINSEARCH_NONE; - cod_info.global_gain = start; - desired_rate -= cod_info.part2_length; - - assert (CurrentStep != 0); - for (;;) { - int step; - nBits = tk.count_bits(gfc, xrpow, cod_info, null); - - if (CurrentStep == 1 || nBits == desired_rate) - break; /* nothing to adjust anymore */ - - if (nBits > desired_rate) { - /* increase Quantize_StepSize */ - if (Direction == BinSearchDirection.BINSEARCH_DOWN) - flagGoneOver = true; - - if (flagGoneOver) - CurrentStep /= 2; - Direction = BinSearchDirection.BINSEARCH_UP; - step = CurrentStep; - } else { - /* decrease Quantize_StepSize */ - if (Direction == BinSearchDirection.BINSEARCH_UP) - flagGoneOver = true; - - if (flagGoneOver) - CurrentStep /= 2; - Direction = BinSearchDirection.BINSEARCH_DOWN; - step = -CurrentStep; - } - cod_info.global_gain += step; - if (cod_info.global_gain < 0) { - cod_info.global_gain = 0; - flagGoneOver = true; - } - if (cod_info.global_gain > 255) { - cod_info.global_gain = 255; - flagGoneOver = true; - } - } - - assert (cod_info.global_gain >= 0); - assert (cod_info.global_gain < 256); - - while (nBits > desired_rate && cod_info.global_gain < 255) { - cod_info.global_gain++; - nBits = tk.count_bits(gfc, xrpow, cod_info, null); - } - gfc.CurrentStep[ch] = (start - cod_info.global_gain >= 4) ? 4 : 2; - gfc.OldValue[ch] = cod_info.global_gain; - cod_info.part2_3_length = nBits; - return nBits; - } - - public final void trancate_smallspectrums(final LameInternalFlags gfc, - final GrInfo gi, final float[] l3_xmin, final float[] work) { - float distort[] = new float[L3Side.SFBMAX]; - - if ((0 == (gfc.substep_shaping & 4) && gi.block_type == Encoder.SHORT_TYPE) - || (gfc.substep_shaping & 0x80) != 0) - return; - qupvt.calc_noise(gi, l3_xmin, distort, new CalcNoiseResult(), null); - for (int j = 0; j < 576; j++) { - float xr = 0.0f; - if (gi.l3_enc[j] != 0) - xr = Math.abs(gi.xr[j]); - work[j] = xr; - } - - int j = 0; - int sfb = 8; - if (gi.block_type == Encoder.SHORT_TYPE) - sfb = 6; - do { - float allowedNoise, trancateThreshold; - int nsame, start; - - int width = gi.width[sfb]; - j += width; - if (distort[sfb] >= 1.0) - continue; - - Arrays.sort(work, j - width, width); - if (BitStream.EQ(work[j - 1], 0.0f)) - continue; /* all zero sfb */ - - allowedNoise = (1.0f - distort[sfb]) * l3_xmin[sfb]; - trancateThreshold = 0.0f; - start = 0; - do { - float noise; - for (nsame = 1; start + nsame < width; nsame++) - if (BitStream.NEQ(work[start + j - width], work[start + j - + nsame - width])) - break; - - noise = work[start + j - width] * work[start + j - width] - * nsame; - if (allowedNoise < noise) { - if (start != 0) - trancateThreshold = work[start + j - width - 1]; - break; - } - allowedNoise -= noise; - start += nsame; - } while (start < width); - if (BitStream.EQ(trancateThreshold, 0.0f)) - continue; - - do { - if (Math.abs(gi.xr[j - width]) <= trancateThreshold) - gi.l3_enc[j - width] = 0; - } while (--width > 0); - } while (++sfb < gi.psymax); - - gi.part2_3_length = tk.noquant_count_bits(gfc, gi, null); - } - - /** - * author/date?? - * - * Function: Returns zero if there is a scalefac which has not been - * amplified. Otherwise it returns one. - */ - private boolean loop_break(final GrInfo cod_info) { - for (int sfb = 0; sfb < cod_info.sfbmax; sfb++) - if (cod_info.scalefac[sfb] - + cod_info.subblock_gain[cod_info.window[sfb]] == 0) - return false; - - return true; - } - - /* mt 5/99: Function: Improved calc_noise for a single channel */ - - private double penalties(final double noise) { - return Util.FAST_LOG10((float) (0.368 + 0.632 * noise * noise * noise)); - } - - /** - * author/date?? - * - * several different codes to decide which quantization is better - */ - private double get_klemm_noise(final float[] distort, final GrInfo gi) { - double klemm_noise = 1E-37; - for (int sfb = 0; sfb < gi.psymax; sfb++) - klemm_noise += penalties(distort[sfb]); - - return Math.max(1e-20, klemm_noise); - } - - private boolean quant_compare(final int quant_comp, - final CalcNoiseResult best, final CalcNoiseResult calc, - final GrInfo gi, final float[] distort) { - /** - * noise is given in decibels (dB) relative to masking thesholds.<BR> - * - * over_noise: ??? (the previous comment is fully wrong)<BR> - * tot_noise: ??? (the previous comment is fully wrong)<BR> - * max_noise: max quantization noise - */ - boolean better; - - switch (quant_comp) { - default: - case 9: { - if (best.over_count > 0) { - /* there are distorted sfb */ - better = calc.over_SSD <= best.over_SSD; - if (calc.over_SSD == best.over_SSD) - better = calc.bits < best.bits; - } else { - /* no distorted sfb */ - better = ((calc.max_noise < 0) && ((calc.max_noise * 10 + calc.bits) <= (best.max_noise * 10 + best.bits))); - } - break; - } - - case 0: - better = calc.over_count < best.over_count - || (calc.over_count == best.over_count && calc.over_noise < best.over_noise) - || (calc.over_count == best.over_count - && BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise); - break; - - case 8: - calc.max_noise = (float) get_klemm_noise(distort, gi); - //$FALL-THROUGH$ - case 1: - better = calc.max_noise < best.max_noise; - break; - case 2: - better = calc.tot_noise < best.tot_noise; - break; - case 3: - better = (calc.tot_noise < best.tot_noise) - && (calc.max_noise < best.max_noise); - break; - case 4: - better = (calc.max_noise <= 0.0 && best.max_noise > 0.2) - || (calc.max_noise <= 0.0 && best.max_noise < 0.0 - && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise) - || (calc.max_noise <= 0.0 && best.max_noise > 0.0 - && best.max_noise > calc.max_noise - 0.2 && calc.tot_noise < best.tot_noise - + best.over_noise) - || (calc.max_noise > 0.0 && best.max_noise > -0.05 - && best.max_noise > calc.max_noise - 0.1 && calc.tot_noise - + calc.over_noise < best.tot_noise - + best.over_noise) - || (calc.max_noise > 0.0 && best.max_noise > -0.1 - && best.max_noise > calc.max_noise - 0.15 && calc.tot_noise - + calc.over_noise + calc.over_noise < best.tot_noise - + best.over_noise + best.over_noise); - break; - case 5: - better = calc.over_noise < best.over_noise - || (BitStream.EQ(calc.over_noise, best.over_noise) && calc.tot_noise < best.tot_noise); - break; - case 6: - better = calc.over_noise < best.over_noise - || (BitStream.EQ(calc.over_noise, best.over_noise) && (calc.max_noise < best.max_noise || (BitStream - .EQ(calc.max_noise, best.max_noise) && calc.tot_noise <= best.tot_noise))); - break; - case 7: - better = calc.over_count < best.over_count - || calc.over_noise < best.over_noise; - break; - } - - if (best.over_count == 0) { - /* - * If no distorted bands, only use this quantization if it is - * better, and if it uses less bits. Unfortunately, part2_3_length - * is sometimes a poor estimator of the final size at low bitrates. - */ - better = better && calc.bits < best.bits; - } - - return better; - } - - /** - * author/date?? - * - * <PRE> - * Amplify the scalefactor bands that violate the masking threshold. - * See ISO 11172-3 Section C.1.5.4.3.5 - * - * distort[] = noise/masking - * distort[] > 1 ==> noise is not masked - * distort[] < 1 ==> noise is masked - * max_dist = maximum value of distort[] - * - * Three algorithms: - * noise_shaping_amp - * 0 Amplify all bands with distort[]>1. - * - * 1 Amplify all bands with distort[] >= max_dist^(.5); - * ( 50% in the db scale) - * - * 2 Amplify first band with distort[] >= max_dist; - * - * - * For algorithms 0 and 1, if max_dist < 1, then amplify all bands - * with distort[] >= .95*max_dist. This is to make sure we always - * amplify at least one band. - * </PRE> - */ - private void amp_scalefac_bands(final LameGlobalFlags gfp, - final GrInfo cod_info, final float[] distort, - final float xrpow[], final boolean bRefine) { - final LameInternalFlags gfc = gfp.internal_flags; - float ifqstep34; - - if (cod_info.scalefac_scale == 0) { - ifqstep34 = 1.29683955465100964055f; /* 2**(.75*.5) */ - } else { - ifqstep34 = 1.68179283050742922612f; /* 2**(.75*1) */ - } - - /* compute maximum value of distort[] */ - float trigger = 0; - for (int sfb = 0; sfb < cod_info.sfbmax; sfb++) { - if (trigger < distort[sfb]) - trigger = distort[sfb]; - } - - int noise_shaping_amp = gfc.noise_shaping_amp; - if (noise_shaping_amp == 3) { - if (bRefine) - noise_shaping_amp = 2; - else - noise_shaping_amp = 1; - } - switch (noise_shaping_amp) { - case 2: - /* amplify exactly 1 band */ - break; - - case 1: - /* amplify bands within 50% of max (on db scale) */ - if (trigger > 1.0) - trigger = (float) Math.pow(trigger, .5); - else - trigger *= .95; - break; - - case 0: - default: - /* ISO algorithm. amplify all bands with distort>1 */ - if (trigger > 1.0) - trigger = 1.0f; - else - trigger *= .95; - break; - } - - int j = 0; - for (int sfb = 0; sfb < cod_info.sfbmax; sfb++) { - final int width = cod_info.width[sfb]; - int l; - j += width; - if (distort[sfb] < trigger) - continue; - - if ((gfc.substep_shaping & 2) != 0) { - gfc.pseudohalf[sfb] = (0 == gfc.pseudohalf[sfb]) ? 1 : 0; - if (0 == gfc.pseudohalf[sfb] && gfc.noise_shaping_amp == 2) - return; - } - cod_info.scalefac[sfb]++; - for (l = -width; l < 0; l++) { - xrpow[j + l] *= ifqstep34; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - - if (gfc.noise_shaping_amp == 2) - return; - } - } - - /** - * Takehiro Tominaga 2000-xx-xx - * - * turns on scalefac scale and adjusts scalefactors - */ - private void inc_scalefac_scale(final GrInfo cod_info, float xrpow[]) { - final float ifqstep34 = 1.29683955465100964055f; - - int j = 0; - for (int sfb = 0; sfb < cod_info.sfbmax; sfb++) { - final int width = cod_info.width[sfb]; - int s = cod_info.scalefac[sfb]; - if (cod_info.preflag != 0) - s += qupvt.pretab[sfb]; - j += width; - if ((s & 1) != 0) { - s++; - for (int l = -width; l < 0; l++) { - xrpow[j + l] *= ifqstep34; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - } - cod_info.scalefac[sfb] = s >> 1; - } - cod_info.preflag = 0; - cod_info.scalefac_scale = 1; - } - - /** - * Takehiro Tominaga 2000-xx-xx - * - * increases the subblock gain and adjusts scalefactors - */ - private boolean inc_subblock_gain(final LameInternalFlags gfc, - final GrInfo cod_info, float xrpow[]) { - int sfb; - final int[] scalefac = cod_info.scalefac; - - /* subbloc_gain can't do anything in the long block region */ - for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) { - if (scalefac[sfb] >= 16) - return true; - } - - for (int window = 0; window < 3; window++) { - int s1 = 0; - int s2 = 0; - - for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbdivide; sfb += 3) { - if (s1 < scalefac[sfb]) - s1 = scalefac[sfb]; - } - for (; sfb < cod_info.sfbmax; sfb += 3) { - if (s2 < scalefac[sfb]) - s2 = scalefac[sfb]; - } - - if (s1 < 16 && s2 < 8) - continue; - - if (cod_info.subblock_gain[window] >= 7) - return true; - - /* - * even though there is no scalefactor for sfb12 subblock gain - * affects upper frequencies too, that's why we have to go up to - * SBMAX_s - */ - cod_info.subblock_gain[window]++; - int j = gfc.scalefac_band.l[cod_info.sfb_lmax]; - for (sfb = cod_info.sfb_lmax + window; sfb < cod_info.sfbmax; sfb += 3) { - float amp; - final int width = cod_info.width[sfb]; - int s = scalefac[sfb]; - assert (s >= 0); - s = s - (4 >> cod_info.scalefac_scale); - if (s >= 0) { - scalefac[sfb] = s; - j += width * 3; - continue; - } - - scalefac[sfb] = 0; - { - final int gain = 210 + (s << (cod_info.scalefac_scale + 1)); - amp = qupvt.IPOW20(gain); - } - j += width * (window + 1); - for (int l = -width; l < 0; l++) { - xrpow[j + l] *= amp; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - j += width * (3 - window - 1); - } - - { - final float amp = qupvt.IPOW20(202); - j += cod_info.width[sfb] * (window + 1); - for (int l = -cod_info.width[sfb]; l < 0; l++) { - xrpow[j + l] *= amp; - if (xrpow[j + l] > cod_info.xrpow_max) - cod_info.xrpow_max = xrpow[j + l]; - } - } - } - return false; - } - - /** - * <PRE> - * Takehiro Tominaga /date?? - * Robert Hegemann 2000-09-06: made a function of it - * - * amplifies scalefactor bands, - * - if all are already amplified returns 0 - * - if some bands are amplified too much: - * * try to increase scalefac_scale - * * if already scalefac_scale was set - * try on short blocks to increase subblock gain - * </PRE> - */ - private boolean balance_noise(final LameGlobalFlags gfp, - final GrInfo cod_info, final float[] distort, float xrpow[], - final boolean bRefine) { - final LameInternalFlags gfc = gfp.internal_flags; - - amp_scalefac_bands(gfp, cod_info, distort, xrpow, bRefine); - - /* - * check to make sure we have not amplified too much loop_break returns - * 0 if there is an unamplified scalefac scale_bitcount returns 0 if no - * scalefactors are too large - */ - - boolean status = loop_break(cod_info); - - if (status) - return false; /* all bands amplified */ - - /* - * not all scalefactors have been amplified. so these scalefacs are - * possibly valid. encode them: - */ - if (gfc.mode_gr == 2) - status = tk.scale_bitcount(cod_info); - else - status = tk.scale_bitcount_lsf(gfc, cod_info); - - if (!status) - return true; /* amplified some bands not exceeding limits */ - - /* - * some scalefactors are too large. lets try setting scalefac_scale=1 - */ - if (gfc.noise_shaping > 1) { - Arrays.fill(gfc.pseudohalf, 0); - if (0 == cod_info.scalefac_scale) { - inc_scalefac_scale(cod_info, xrpow); - status = false; - } else { - if (cod_info.block_type == Encoder.SHORT_TYPE - && gfc.subblock_gain > 0) { - status = (inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info)); - } - } - } - - if (!status) { - if (gfc.mode_gr == 2) - status = tk.scale_bitcount(cod_info); - else - status = tk.scale_bitcount_lsf(gfc, cod_info); - } - return !status; - } - - /** - * <PRE> - * Function: The outer iteration loop controls the masking conditions - * of all scalefactorbands. It computes the best scalefac and - * global gain. This module calls the inner iteration loop - * - * mt 5/99 completely rewritten to allow for bit reservoir control, - * mid/side channels with L/R or mid/side masking thresholds, - * and chooses best quantization instead of last quantization when - * no distortion free quantization can be found. - * - * added VBR support mt 5/99 - * - * some code shuffle rh 9/00 - * </PRE> - * - * @param l3_xmin - * allowed distortion - * @param xrpow - * coloured magnitudes of spectral - * @param targ_bits - * maximum allowed bits - */ - public final int outer_loop(final LameGlobalFlags gfp, - final GrInfo cod_info, final float[] l3_xmin, float xrpow[], - final int ch, final int targ_bits) { - final LameInternalFlags gfc = gfp.internal_flags; - GrInfo cod_info_w = new GrInfo(); - float save_xrpow[] = new float[576]; - float distort[] = new float[L3Side.SFBMAX]; - CalcNoiseResult best_noise_info = new CalcNoiseResult(); - int better; - CalcNoiseData prev_noise = new CalcNoiseData(); - int best_part2_3_length = 9999999; - boolean bEndOfSearch = false; - boolean bRefine = false; - int best_ggain_pass1 = 0; - - bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow); - - if (0 == gfc.noise_shaping) - /* fast mode, no noise shaping, we are ready */ - return 100; /* default noise_info.over_count */ - - /* compute the distortion in this quantization */ - /* coefficients and thresholds both l/r (or both mid/side) */ - qupvt.calc_noise(cod_info, l3_xmin, distort, best_noise_info, - prev_noise); - best_noise_info.bits = cod_info.part2_3_length; - - cod_info_w.assign(cod_info); - int age = 0; - System.arraycopy(xrpow, 0, save_xrpow, 0, 576); - - while (!bEndOfSearch) { - /* BEGIN MAIN LOOP */ - do { - CalcNoiseResult noise_info = new CalcNoiseResult(); - int search_limit; - int maxggain = 255; - - /* - * When quantization with no distorted bands is found, allow up - * to X new unsuccesful tries in serial. This gives us more - * possibilities for different quant_compare modes. Much more - * than 3 makes not a big difference, it is only slower. - */ - - if ((gfc.substep_shaping & 2) != 0) { - search_limit = 20; - } else { - search_limit = 3; - } - - /* - * Check if the last scalefactor band is distorted. in VBR mode - * we can't get rid of the distortion, so quit now and VBR mode - * will try again with more bits. (makes a 10% speed increase, - * the files I tested were binary identical, 2000/05/20 Robert - * Hegemann) distort[] > 1 means noise > allowed noise - */ - if (gfc.sfb21_extra) { - if (distort[cod_info_w.sfbmax] > 1.0) - break; - if (cod_info_w.block_type == Encoder.SHORT_TYPE - && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0)) - break; - } - - /* try a new scalefactor conbination on cod_info_w */ - if (!balance_noise(gfp, cod_info_w, distort, xrpow, bRefine)) - break; - if (cod_info_w.scalefac_scale != 0) - maxggain = 254; - - /* - * inner_loop starts with the initial quantization step computed - * above and slowly increases until the bits < huff_bits. Thus - * it is important not to start with too large of an inital - * quantization step. Too small is ok, but inner_loop will take - * longer - */ - int huff_bits = targ_bits - cod_info_w.part2_length; - if (huff_bits <= 0) - break; - - /* - * increase quantizer stepsize until needed bits are below - * maximum - */ - while ((cod_info_w.part2_3_length = tk.count_bits(gfc, xrpow, - cod_info_w, prev_noise)) > huff_bits - && cod_info_w.global_gain <= maxggain) - cod_info_w.global_gain++; - - if (cod_info_w.global_gain > maxggain) - break; - - if (best_noise_info.over_count == 0) { - - while ((cod_info_w.part2_3_length = tk.count_bits(gfc, - xrpow, cod_info_w, prev_noise)) > best_part2_3_length - && cod_info_w.global_gain <= maxggain) - cod_info_w.global_gain++; - - if (cod_info_w.global_gain > maxggain) - break; - } - - /* compute the distortion in this quantization */ - qupvt.calc_noise(cod_info_w, l3_xmin, distort, noise_info, - prev_noise); - noise_info.bits = cod_info_w.part2_3_length; - - /* - * check if this quantization is better than our saved - * quantization - */ - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - better = gfp.quant_comp; - } else - better = gfp.quant_comp_short; - - better = quant_compare(better, best_noise_info, noise_info, - cod_info_w, distort) ? 1 : 0; - - /* save data so we can restore this quantization later */ - if (better != 0) { - best_part2_3_length = cod_info.part2_3_length; - best_noise_info = noise_info; - cod_info.assign(cod_info_w); - age = 0; - /* save data so we can restore this quantization later */ - /* store for later reuse */ - System.arraycopy(xrpow, 0, save_xrpow, 0, 576); - } else { - /* early stop? */ - if (gfc.full_outer_loop == 0) { - if (++age > search_limit - && best_noise_info.over_count == 0) - break; - if ((gfc.noise_shaping_amp == 3) && bRefine && age > 30) - break; - if ((gfc.noise_shaping_amp == 3) - && bRefine - && (cod_info_w.global_gain - best_ggain_pass1) > 15) - break; - } - } - } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255); - - if (gfc.noise_shaping_amp == 3) { - if (!bRefine) { - /* refine search */ - cod_info_w.assign(cod_info); - System.arraycopy(save_xrpow, 0, xrpow, 0, 576); - age = 0; - best_ggain_pass1 = cod_info_w.global_gain; - - bRefine = true; - } else { - /* search already refined, stop */ - bEndOfSearch = true; - } - - } else { - bEndOfSearch = true; - } - } - - assert ((cod_info.global_gain + cod_info.scalefac_scale) <= 255); - /* - * finish up - */ - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - /* restore for reuse on next try */ - System.arraycopy(save_xrpow, 0, xrpow, 0, 576); - /* - * do the 'substep shaping' - */ - else if ((gfc.substep_shaping & 1) != 0) - trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow); - - return best_noise_info.over_count; - } - - /** - * Robert Hegemann 2000-09-06 - * - * update reservoir status after FINAL quantization/bitrate - */ - public final void iteration_finish_one(final LameInternalFlags gfc, - final int gr, final int ch) { - final IIISideInfo l3_side = gfc.l3_side; - final GrInfo cod_info = l3_side.tt[gr][ch]; - - /* - * try some better scalefac storage - */ - tk.best_scalefac_store(gfc, gr, ch, l3_side); - - /* - * best huffman_divide may save some bits too - */ - if (gfc.use_best_huffman == 1) - tk.best_huffman_divide(gfc, cod_info); - - /* - * update reservoir status after FINAL quantization/bitrate - */ - rv.ResvAdjust(gfc, cod_info); - } - - /** - * - * 2000-09-04 Robert Hegemann - * - * @param l3_xmin - * allowed distortion of the scalefactor - * @param xrpow - * coloured magnitudes of spectral values - */ - public final void VBR_encode_granule(final LameGlobalFlags gfp, - GrInfo cod_info, final float[] l3_xmin, float xrpow[], - final int ch, int min_bits, int max_bits) { - final LameInternalFlags gfc = gfp.internal_flags; - GrInfo bst_cod_info = new GrInfo(); - float bst_xrpow[] = new float[576]; - final int Max_bits = max_bits; - int real_bits = max_bits + 1; - int this_bits = (max_bits + min_bits) / 2; - int dbits, over, found = 0; - final boolean sfb21_extra = gfc.sfb21_extra; - - assert (Max_bits <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - Arrays.fill(bst_cod_info.l3_enc, 0); - - /* - * search within round about 40 bits of optimal - */ - do { - assert (this_bits >= min_bits); - assert (this_bits <= max_bits); - assert (min_bits <= max_bits); - - if (this_bits > Max_bits - 42) - gfc.sfb21_extra = false; - else - gfc.sfb21_extra = sfb21_extra; - - over = outer_loop(gfp, cod_info, l3_xmin, xrpow, ch, this_bits); - - /* - * is quantization as good as we are looking for ? in this case: is - * no scalefactor band distorted? - */ - if (over <= 0) { - found = 1; - /* - * now we know it can be done with "real_bits" and maybe we can - * skip some iterations - */ - real_bits = cod_info.part2_3_length; - - /* - * store best quantization so far - */ - bst_cod_info.assign(cod_info); - System.arraycopy(xrpow, 0, bst_xrpow, 0, 576); - - /* - * try with fewer bits - */ - max_bits = real_bits - 32; - dbits = max_bits - min_bits; - this_bits = (max_bits + min_bits) / 2; - } else { - /* - * try with more bits - */ - min_bits = this_bits + 32; - dbits = max_bits - min_bits; - this_bits = (max_bits + min_bits) / 2; - - if (found != 0) { - found = 2; - /* - * start again with best quantization so far - */ - cod_info.assign(bst_cod_info); - System.arraycopy(bst_xrpow, 0, xrpow, 0, 576); - } - } - } while (dbits > 12); - - gfc.sfb21_extra = sfb21_extra; - - /* - * found=0 => nothing found, use last one found=1 => we just found the - * best and left the loop found=2 => we restored a good one and have now - * l3_enc to restore too - */ - if (found == 2) { - System.arraycopy(bst_cod_info.l3_enc, 0, cod_info.l3_enc, 0, 576); - } - assert (cod_info.part2_3_length <= Max_bits); - } - - /** - * Robert Hegemann 2000-09-05 - * - * calculates * how many bits are available for analog silent granules * how - * many bits to use for the lowest allowed bitrate * how many bits each - * bitrate would provide - */ - public final void get_framebits(final LameGlobalFlags gfp, - final int frameBits[]) { - final LameInternalFlags gfc = gfp.internal_flags; - - /* - * always use at least this many bits per granule per channel unless we - * detect analog silence, see below - */ - gfc.bitrate_index = gfc.VBR_min_bitrate; - int bitsPerFrame = bs.getframebits(gfp); - - /* - * bits for analog silence - */ - gfc.bitrate_index = 1; - bitsPerFrame = bs.getframebits(gfp); - - for (int i = 1; i <= gfc.VBR_max_bitrate; i++) { - gfc.bitrate_index = i; - MeanBits mb = new MeanBits(bitsPerFrame); - frameBits[i] = rv.ResvFrameBegin(gfp, mb); - bitsPerFrame = mb.bits; - } - } - - /* RH: this one needs to be overhauled sometime */ - - /** - * <PRE> - * 2000-09-04 Robert Hegemann - * - * * converts LR to MS coding when necessary - * * calculates allowed/adjusted quantization noise amounts - * * detects analog silent frames - * - * some remarks: - * - lower masking depending on Quality setting - * - quality control together with adjusted ATH MDCT scaling - * on lower quality setting allocate more noise from - * ATH masking, and on higher quality setting allocate - * less noise from ATH masking. - * - experiments show that going more than 2dB over GPSYCHO's - * limits ends up in very annoying artefacts - * </PRE> - */ - public final int VBR_old_prepare(final LameGlobalFlags gfp, float pe[][], - final float ms_ener_ratio[], final III_psy_ratio ratio[][], - float l3_xmin[][][], final int frameBits[], final int min_bits[][], - final int max_bits[][], final int bands[][]) { - final LameInternalFlags gfc = gfp.internal_flags; - - float masking_lower_db, adjust = 0.0f; - int analog_silence = 1; - int bits = 0; - - gfc.bitrate_index = gfc.VBR_max_bitrate; - int avg = rv.ResvFrameBegin(gfp, new MeanBits(0)) / gfc.mode_gr; - - get_framebits(gfp, frameBits); - - for (int gr = 0; gr < gfc.mode_gr; gr++) { - int mxb = qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0); - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - ms_convert(gfc.l3_side, gr); - qupvt.reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb); - } - for (int ch = 0; ch < gfc.channels_out; ++ch) { - final GrInfo cod_info = gfc.l3_side.tt[gr][ch]; - - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type - adjust = 1.28f / (1 + (float) Math - .exp(3.5 - pe[gr][ch] / 300.)) - 0.05f; - masking_lower_db = gfc.PSY.mask_adjust - adjust; - } else { - adjust = 2.56f / (1 + (float) Math - .exp(3.5 - pe[gr][ch] / 300.)) - 0.14f; - masking_lower_db = gfc.PSY.mask_adjust_short - adjust; - } - gfc.masking_lower = (float) Math.pow(10.0, - masking_lower_db * 0.1); - - init_outer_loop(gfc, cod_info); - bands[gr][ch] = qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin[gr][ch]); - if (bands[gr][ch] != 0) - analog_silence = 0; - - min_bits[gr][ch] = 126; - - bits += max_bits[gr][ch]; - } - } - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - if (bits > frameBits[gfc.VBR_max_bitrate]) { - max_bits[gr][ch] *= frameBits[gfc.VBR_max_bitrate]; - max_bits[gr][ch] /= bits; - } - if (min_bits[gr][ch] > max_bits[gr][ch]) - min_bits[gr][ch] = max_bits[gr][ch]; - - } /* for ch */ - } /* for gr */ - - return analog_silence; - } - - public final void bitpressure_strategy(final LameInternalFlags gfc, - float l3_xmin[][][], final int min_bits[][], final int max_bits[][]) { - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo gi = gfc.l3_side.tt[gr][ch]; - float[] pxmin = l3_xmin[gr][ch]; - int pxminPos = 0; - for (int sfb = 0; sfb < gi.psy_lmax; sfb++) - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_l / Encoder.SBMAX_l; - - if (gi.block_type == Encoder.SHORT_TYPE) { - for (int sfb = gi.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - pxmin[pxminPos++] *= 1. + .029 * sfb * sfb - / Encoder.SBMAX_s / Encoder.SBMAX_s; - } - } - max_bits[gr][ch] = (int) Math.max(min_bits[gr][ch], - 0.9 * max_bits[gr][ch]); - } - } - } - - public final int VBR_new_prepare(final LameGlobalFlags gfp, float pe[][], - III_psy_ratio ratio[][], float l3_xmin[][][], - final int frameBits[], final int max_bits[][]) { - final LameInternalFlags gfc = gfp.internal_flags; - - int analog_silence = 1; - int avg = 0, bits = 0; - int maximum_framebits; - - if (!gfp.free_format) { - gfc.bitrate_index = gfc.VBR_max_bitrate; - - MeanBits mb = new MeanBits(avg); - rv.ResvFrameBegin(gfp, mb); - avg = mb.bits; - - get_framebits(gfp, frameBits); - maximum_framebits = frameBits[gfc.VBR_max_bitrate]; - } else { - gfc.bitrate_index = 0; - MeanBits mb = new MeanBits(avg); - maximum_framebits = rv.ResvFrameBegin(gfp, mb); - avg = mb.bits; - frameBits[0] = maximum_framebits; - } - - for (int gr = 0; gr < gfc.mode_gr; gr++) { - qupvt.on_pe(gfp, pe, max_bits[gr], avg, gr, 0); - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) { - ms_convert(gfc.l3_side, gr); - } - for (int ch = 0; ch < gfc.channels_out; ++ch) { - final GrInfo cod_info = gfc.l3_side.tt[gr][ch]; - - gfc.masking_lower = (float) Math.pow(10.0, - gfc.PSY.mask_adjust * 0.1); - - init_outer_loop(gfc, cod_info); - if (0 != qupvt.calc_xmin(gfp, ratio[gr][ch], cod_info, - l3_xmin[gr][ch])) - analog_silence = 0; - - bits += max_bits[gr][ch]; - } - } - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - if (bits > maximum_framebits) { - max_bits[gr][ch] *= maximum_framebits; - max_bits[gr][ch] /= bits; - } - - } /* for ch */ - } /* for gr */ - - return analog_silence; - } - - /** - * calculates target bits for ABR encoding - * - * mt 2000/05/31 - */ - public final void calc_target_bits(final LameGlobalFlags gfp, float pe[][], - final float ms_ener_ratio[], final int targ_bits[][], - final int[] analog_silence_bits, final int[] max_frame_bits) { - final LameInternalFlags gfc = gfp.internal_flags; - final IIISideInfo l3_side = gfc.l3_side; - float res_factor; - int gr, ch, totbits, mean_bits = 0; - - gfc.bitrate_index = gfc.VBR_max_bitrate; - MeanBits mb = new MeanBits(mean_bits); - max_frame_bits[0] = rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - gfc.bitrate_index = 1; - mean_bits = bs.getframebits(gfp) - gfc.sideinfo_len * 8; - analog_silence_bits[0] = mean_bits / (gfc.mode_gr * gfc.channels_out); - - mean_bits = gfp.VBR_mean_bitrate_kbps * gfp.framesize * 1000; - if ((gfc.substep_shaping & 1) != 0) - mean_bits *= 1.09; - mean_bits /= gfp.out_samplerate; - mean_bits -= gfc.sideinfo_len * 8; - mean_bits /= (gfc.mode_gr * gfc.channels_out); - - /** - * <PRE> - * res_factor is the percentage of the target bitrate that should - * be used on average. the remaining bits are added to the - * bitreservoir and used for difficult to encode frames. - * - * Since we are tracking the average bitrate, we should adjust - * res_factor "on the fly", increasing it if the average bitrate - * is greater than the requested bitrate, and decreasing it - * otherwise. Reasonable ranges are from .9 to 1.0 - * - * Until we get the above suggestion working, we use the following - * tuning: - * compression ratio res_factor - * 5.5 (256kbps) 1.0 no need for bitreservoir - * 11 (128kbps) .93 7% held for reservoir - * - * with linear interpolation for other values. - * </PRE> - */ - res_factor = .93f + .07f * (11.0f - gfp.compression_ratio) - / (11.0f - 5.5f); - if (res_factor < .90) - res_factor = .90f; - if (res_factor > 1.00) - res_factor = 1.00f; - - for (gr = 0; gr < gfc.mode_gr; gr++) { - int sum = 0; - for (ch = 0; ch < gfc.channels_out; ch++) { - targ_bits[gr][ch] = (int) (res_factor * mean_bits); - - if (pe[gr][ch] > 700) { - int add_bits = (int) ((pe[gr][ch] - 700) / 1.4); - - final GrInfo cod_info = l3_side.tt[gr][ch]; - targ_bits[gr][ch] = (int) (res_factor * mean_bits); - - /* short blocks use a little extra, no matter what the pe */ - if (cod_info.block_type == Encoder.SHORT_TYPE) { - if (add_bits < mean_bits / 2) - add_bits = mean_bits / 2; - } - /* at most increase bits by 1.5*average */ - if (add_bits > mean_bits * 3 / 2) - add_bits = mean_bits * 3 / 2; - else if (add_bits < 0) - add_bits = 0; - - targ_bits[gr][ch] += add_bits; - } - if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } - sum += targ_bits[gr][ch]; - } /* for ch */ - if (sum > LameInternalFlags.MAX_BITS_PER_GRANULE) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[gr][ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE; - targ_bits[gr][ch] /= sum; - } - } - } /* for gr */ - - if (gfc.mode_ext == Encoder.MPG_MD_MS_LR) - for (gr = 0; gr < gfc.mode_gr; gr++) { - qupvt.reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits - * gfc.channels_out, - LameInternalFlags.MAX_BITS_PER_GRANULE); - } - - /* - * sum target bits - */ - totbits = 0; - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - if (targ_bits[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) - targ_bits[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - totbits += targ_bits[gr][ch]; - } - } - - /* - * repartion target bits if needed - */ - if (totbits > max_frame_bits[0]) { - for (gr = 0; gr < gfc.mode_gr; gr++) { - for (ch = 0; ch < gfc.channels_out; ch++) { - targ_bits[gr][ch] *= max_frame_bits[0]; - targ_bits[gr][ch] /= totbits; - } - } - } - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/QuantizePVT.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/QuantizePVT.java deleted file mode 100644 index 582def417..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/QuantizePVT.java +++ /dev/null @@ -1,1009 +0,0 @@ -/* - * quantize_pvt source file - * - * Copyright (c) 1999-2002 Takehiro Tominaga - * Copyright (c) 2000-2002 Robert Hegemann - * Copyright (c) 2001 Naoki Shibata - * Copyright (c) 2002-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: QuantizePVT.js,v 1.24 2011/05/24 20:48:06 kenchis Exp $ */ -package mp3; - - - -public class QuantizePVT { - - Takehiro tak; - Reservoir rv; - PsyModel psy; - - public final void setModules(Takehiro tk, Reservoir rv, PsyModel psy) { - this.tak = tk; - this.rv = rv; - this.psy = psy; - } - - public final float POW20(final int x) { - assert (0 <= (x + QuantizePVT.Q_MAX2) && x < QuantizePVT.Q_MAX); - return pow20[x + QuantizePVT.Q_MAX2]; - } - - public final float IPOW20(final int x) { - assert (0 <= x && x < QuantizePVT.Q_MAX); - return ipow20[x]; - } - - /** - * smallest such that 1.0+DBL_EPSILON != 1.0 - */ - private static final float DBL_EPSILON = 2.2204460492503131e-016f; - - /** - * ix always <= 8191+15. see count_bits() - */ - public static final int IXMAX_VAL = 8206; - - private static final int PRECALC_SIZE = (IXMAX_VAL + 2); - - private static final int Q_MAX =(256+1); - - /** - * <CODE> - * minimum possible number of - * -cod_info.global_gain + ((scalefac[] + (cod_info.preflag ? pretab[sfb] : 0)) - * << (cod_info.scalefac_scale + 1)) + cod_info.subblock_gain[cod_info.window[sfb]] * 8; - * - * for long block, 0+((15+3)<<2) = 18*4 = 72 - * for short block, 0+(15<<2)+7*8 = 15*4+56 = 116 - * </CODE> - */ - public static final int Q_MAX2 = 116; - - public static final int LARGE_BITS =100000; - - /** - * Assuming dynamic range=96dB, this value should be 92 - */ - private static final int NSATHSCALE = 100; - - /** - * The following table is used to implement the scalefactor partitioning for - * MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds - * to the way the tables are presented in the IS: - * - * [table_number][row_in_table][column of nr_of_sfb] - */ - public final int nr_of_sfb_block[][][] = new int[][][] { - { { 6, 5, 5, 5 }, { 9, 9, 9, 9 }, { 6, 9, 9, 9 } }, - { { 6, 5, 7, 3 }, { 9, 9, 12, 6 }, { 6, 9, 12, 6 } }, - { { 11, 10, 0, 0 }, { 18, 18, 0, 0 }, { 15, 18, 0, 0 } }, - { { 7, 7, 7, 0 }, { 12, 12, 12, 0 }, { 6, 15, 12, 0 } }, - { { 6, 6, 6, 3 }, { 12, 9, 9, 6 }, { 6, 12, 9, 6 } }, - { { 8, 8, 5, 0 }, { 15, 12, 9, 0 }, { 6, 18, 9, 0 } } }; - - /** - * Table B.6: layer3 preemphasis - */ - public final int pretab[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 2, 2, 3, 3, 3, 2, 0 }; - - /** - * Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor - * bands. <BR> - * Index into this using a method such as:<BR> - * idx = fr_ps.header.sampling_frequency + (fr_ps.header.version * 3) - */ - public final ScaleFac sfBandIndex[] = { - // Table B.2.b: 22.05 kHz - new ScaleFac(new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576}, - new int[]{0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192} - , new int[]{0, 0, 0, 0, 0, 0, 0} // sfb21 pseudo sub bands - , new int[]{0, 0, 0, 0, 0, 0, 0} // sfb12 pseudo sub bands - ), - /* Table B.2.c: 24 kHz */ /* docs: 332. mpg123(broken): 330 */ - new ScaleFac(new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 332, 394, 464, - 540, 576}, - new int[]{0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* Table B.2.a: 16 kHz */ - new ScaleFac(new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576}, - new int[]{0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* Table B.8.b: 44.1 kHz */ - new ScaleFac(new int[]{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, - 576}, - new int[]{0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* Table B.8.c: 48 kHz */ - new ScaleFac(new int[]{0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, - 576}, - new int[]{0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* Table B.8.a: 32 kHz */ - new ScaleFac(new int[]{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, - 576}, - new int[]{0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 11.025 kHz */ - new ScaleFac(new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576}, - new int[]{0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, - 402 / 3, 522 / 3, 576 / 3} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 12 kHz */ - new ScaleFac(new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, - 522, 576}, - new int[]{0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, - 402 / 3, 522 / 3, 576 / 3} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ), - /* MPEG-2.5 8 kHz */ - new ScaleFac(new int[]{0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, - 572, 574, 576}, - new int[]{0 / 3, 24 / 3, 48 / 3, 72 / 3, 108 / 3, 156 / 3, 216 / 3, 288 / 3, 372 / 3, 480 / 3, 486 / 3, - 492 / 3, 498 / 3, 576 / 3} - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ - , new int[]{0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ - ) - }; - - public float pow20[] = new float[Q_MAX + Q_MAX2 + 1]; - public float ipow20[] = new float[Q_MAX]; - public float pow43[] = new float[PRECALC_SIZE]; - - public float adj43[] = new float[PRECALC_SIZE]; - - /** - * <PRE> - * compute the ATH for each scalefactor band cd range: 0..96db - * - * Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest = - * -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5 - * -9db 0db - * - * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1 - * sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db - * - * Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1 - * sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db - * - * - * MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at - * 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic - * range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 = - * -11 - 96 = -107db = ATH at 3.3kHz. - * - * ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH = - * ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener) - * </PRE> - */ - private float ATHmdct(final LameGlobalFlags gfp, final float f) { - float ath = psy.ATHformula(f, gfp); - - ath -= NSATHSCALE; - - /* modify the MDCT scaling for the ATH and convert to energy */ - ath = (float) Math.pow(10.0, ath / 10.0 + gfp.ATHlower); - return ath; - } - - private void compute_ath(final LameGlobalFlags gfp) { - final float[] ATH_l = gfp.internal_flags.ATH.l; - final float[] ATH_psfb21 = gfp.internal_flags.ATH.psfb21; - final float[] ATH_s = gfp.internal_flags.ATH.s; - final float[] ATH_psfb12 = gfp.internal_flags.ATH.psfb12; - final LameInternalFlags gfc = gfp.internal_flags; - final float samp_freq = gfp.out_samplerate; - - for (int sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - int start = gfc.scalefac_band.l[sfb]; - int end = gfc.scalefac_band.l[sfb + 1]; - ATH_l[sfb] = Float.MAX_VALUE; - for (int i = start; i < end; i++) { - final float freq = i * samp_freq / (2 * 576); - float ATH_f = ATHmdct(gfp, freq); /* freq in kHz */ - ATH_l[sfb] = Math.min(ATH_l[sfb], ATH_f); - } - } - - for (int sfb = 0; sfb < Encoder.PSFB21; sfb++) { - int start = gfc.scalefac_band.psfb21[sfb]; - int end = gfc.scalefac_band.psfb21[sfb + 1]; - ATH_psfb21[sfb] = Float.MAX_VALUE; - for (int i = start; i < end; i++) { - final float freq = i * samp_freq / (2 * 576); - float ATH_f = ATHmdct(gfp, freq); /* freq in kHz */ - ATH_psfb21[sfb] = Math.min(ATH_psfb21[sfb], ATH_f); - } - } - - for (int sfb = 0; sfb < Encoder.SBMAX_s; sfb++) { - int start = gfc.scalefac_band.s[sfb]; - int end = gfc.scalefac_band.s[sfb + 1]; - ATH_s[sfb] = Float.MAX_VALUE; - for (int i = start; i < end; i++) { - final float freq = i * samp_freq / (2 * 192); - float ATH_f = ATHmdct(gfp, freq); /* freq in kHz */ - ATH_s[sfb] = Math.min(ATH_s[sfb], ATH_f); - } - ATH_s[sfb] *= (gfc.scalefac_band.s[sfb + 1] - gfc.scalefac_band.s[sfb]); - } - - for (int sfb = 0; sfb < Encoder.PSFB12; sfb++) { - int start = gfc.scalefac_band.psfb12[sfb]; - int end = gfc.scalefac_band.psfb12[sfb + 1]; - ATH_psfb12[sfb] = Float.MAX_VALUE; - for (int i = start; i < end; i++) { - final float freq = i * samp_freq / (2 * 192); - float ATH_f = ATHmdct(gfp, freq); /* freq in kHz */ - ATH_psfb12[sfb] = Math.min(ATH_psfb12[sfb], ATH_f); - } - /* not sure about the following */ - ATH_psfb12[sfb] *= (gfc.scalefac_band.s[13] - gfc.scalefac_band.s[12]); - } - - /* - * no-ATH mode: reduce ATH to -200 dB - */ - if (gfp.noATH) { - for (int sfb = 0; sfb < Encoder.SBMAX_l; sfb++) { - ATH_l[sfb] = 1E-20f; - } - for (int sfb = 0; sfb < Encoder.PSFB21; sfb++) { - ATH_psfb21[sfb] = 1E-20f; - } - for (int sfb = 0; sfb < Encoder.SBMAX_s; sfb++) { - ATH_s[sfb] = 1E-20f; - } - for (int sfb = 0; sfb < Encoder.PSFB12; sfb++) { - ATH_psfb12[sfb] = 1E-20f; - } - } - - /* - * work in progress, don't rely on it too much - */ - gfc.ATH.floor = 10.f * (float) Math.log10(ATHmdct(gfp, -1.f)); - } - - /** - * initialization for iteration_loop - */ - public final void iteration_init(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - final IIISideInfo l3_side = gfc.l3_side; - int i; - - if (gfc.iteration_init_init == 0) { - gfc.iteration_init_init = 1; - - l3_side.main_data_begin = 0; - compute_ath(gfp); - - pow43[0] = 0.0f; - for (i = 1; i < PRECALC_SIZE; i++) - pow43[i] = (float) Math.pow((float) i, 4.0 / 3.0); - - for (i = 0; i < PRECALC_SIZE - 1; i++) - adj43[i] = (float) ((i + 1) - Math.pow( - 0.5 * (pow43[i] + pow43[i + 1]), 0.75)); - adj43[i] = 0.5f; - - for (i = 0; i < Q_MAX; i++) - ipow20[i] = (float) Math.pow(2.0, (i - 210) * -0.1875); - for (i = 0; i <= Q_MAX + Q_MAX2; i++) - pow20[i] = (float) Math.pow(2.0, (i - 210 - Q_MAX2) * 0.25); - - tak.huffman_init(gfc); - - { - float bass, alto, treble, sfb21; - - i = (gfp.exp_nspsytune >> 2) & 63; - if (i >= 32) - i -= 64; - bass = (float) Math.pow(10, i / 4.0 / 10.0); - - i = (gfp.exp_nspsytune >> 8) & 63; - if (i >= 32) - i -= 64; - alto = (float) Math.pow(10, i / 4.0 / 10.0); - - i = (gfp.exp_nspsytune >> 14) & 63; - if (i >= 32) - i -= 64; - treble = (float) Math.pow(10, i / 4.0 / 10.0); - - /* - * to be compatible with Naoki's original code, the next 6 bits - * define only the amount of changing treble for sfb21 - */ - i = (gfp.exp_nspsytune >> 20) & 63; - if (i >= 32) - i -= 64; - sfb21 = treble * (float) Math.pow(10, i / 4.0 / 10.0); - for (i = 0; i < Encoder.SBMAX_l; i++) { - float f; - if (i <= 6) - f = bass; - else if (i <= 13) - f = alto; - else if (i <= 20) - f = treble; - else - f = sfb21; - - gfc.nsPsy.longfact[i] = f; - } - for (i = 0; i < Encoder.SBMAX_s; i++) { - float f; - if (i <= 5) - f = bass; - else if (i <= 10) - f = alto; - else if (i <= 11) - f = treble; - else - f = sfb21; - - gfc.nsPsy.shortfact[i] = f; - } - } - } - } - - /** - * allocate bits among 2 channels based on PE<BR> - * mt 6/99<BR> - * bugfixes rh 8/01: often allocated more than the allowed 4095 bits - */ - public final int on_pe(final LameGlobalFlags gfp, float pe[][], - int targ_bits[], int mean_bits, int gr, int cbr) { - final LameInternalFlags gfc = gfp.internal_flags; - int tbits = 0, bits; - int add_bits[] = new int[2]; - int ch; - - /* allocate targ_bits for granule */ - MeanBits mb = new MeanBits(tbits); - int extra_bits = rv.ResvMaxBits(gfp, mean_bits, mb, cbr); - tbits = mb.bits; - /* maximum allowed bits for this granule */ - int max_bits = tbits + extra_bits; - if (max_bits > LameInternalFlags.MAX_BITS_PER_GRANULE) { - // hard limit per granule - max_bits = LameInternalFlags.MAX_BITS_PER_GRANULE; - } - for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) { - /****************************************************************** - * allocate bits for each channel - ******************************************************************/ - targ_bits[ch] = Math.min(LameInternalFlags.MAX_BITS_PER_CHANNEL, - tbits / gfc.channels_out); - - add_bits[ch] = (int) (targ_bits[ch] * pe[gr][ch] / 700.0 - targ_bits[ch]); - - /* at most increase bits by 1.5*average */ - if (add_bits[ch] > mean_bits * 3 / 4) - add_bits[ch] = mean_bits * 3 / 4; - if (add_bits[ch] < 0) - add_bits[ch] = 0; - - if (add_bits[ch] + targ_bits[ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) - add_bits[ch] = Math.max(0, - LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[ch]); - - bits += add_bits[ch]; - } - if (bits > extra_bits) { - for (ch = 0; ch < gfc.channels_out; ++ch) { - add_bits[ch] = extra_bits * add_bits[ch] / bits; - } - } - - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[ch] += add_bits[ch]; - extra_bits -= add_bits[ch]; - } - - for (bits = 0, ch = 0; ch < gfc.channels_out; ++ch) { - bits += targ_bits[ch]; - } - if (bits > LameInternalFlags.MAX_BITS_PER_GRANULE) { - int sum = 0; - for (ch = 0; ch < gfc.channels_out; ++ch) { - targ_bits[ch] *= LameInternalFlags.MAX_BITS_PER_GRANULE; - targ_bits[ch] /= bits; - sum += targ_bits[ch]; - } - assert (sum <= LameInternalFlags.MAX_BITS_PER_GRANULE); - } - - return max_bits; - } - - public final void reduce_side(final int targ_bits[], - final float ms_ener_ratio, final int mean_bits, final int max_bits) { - assert (max_bits <= LameInternalFlags.MAX_BITS_PER_GRANULE); - assert (targ_bits[0] + targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_GRANULE); - - /* - * ms_ener_ratio = 0: allocate 66/33 mid/side fac=.33 ms_ener_ratio =.5: - * allocate 50/50 mid/side fac= 0 - */ - /* 75/25 split is fac=.5 */ - float fac = .33f * (.5f - ms_ener_ratio) / .5f; - if (fac < 0) - fac = 0; - if (fac > .5) - fac = .5f; - - /* number of bits to move from side channel to mid channel */ - /* move_bits = fac*targ_bits[1]; */ - int move_bits = (int) (fac * .5 * (targ_bits[0] + targ_bits[1])); - - if (move_bits > LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]) { - move_bits = LameInternalFlags.MAX_BITS_PER_CHANNEL - targ_bits[0]; - } - if (move_bits < 0) - move_bits = 0; - - if (targ_bits[1] >= 125) { - /* dont reduce side channel below 125 bits */ - if (targ_bits[1] - move_bits > 125) { - - /* if mid channel already has 2x more than average, dont bother */ - /* mean_bits = bits per granule (for both channels) */ - if (targ_bits[0] < mean_bits) - targ_bits[0] += move_bits; - targ_bits[1] -= move_bits; - } else { - targ_bits[0] += targ_bits[1] - 125; - targ_bits[1] = 125; - } - } - - move_bits = targ_bits[0] + targ_bits[1]; - if (move_bits > max_bits) { - targ_bits[0] = (max_bits * targ_bits[0]) / move_bits; - targ_bits[1] = (max_bits * targ_bits[1]) / move_bits; - } - assert (targ_bits[0] <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - assert (targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_CHANNEL); - assert (targ_bits[0] + targ_bits[1] <= LameInternalFlags.MAX_BITS_PER_GRANULE); - } - - /** - * Robert Hegemann 2001-04-27: - * this adjusts the ATH, keeping the original noise floor - * affects the higher frequencies more than the lower ones - */ - public final float athAdjust(final float a, final float x, - final float athFloor) { - /* - * work in progress - */ - final float o = 90.30873362f; - final float p = 94.82444863f; - float u = Util.FAST_LOG10_X(x, 10.0f); - final float v = a * a; - float w = 0.0f; - u -= athFloor; /* undo scaling */ - if (v > 1E-20) - w = 1.f + Util.FAST_LOG10_X(v, 10.0f / o); - if (w < 0) - w = 0.f; - u *= w; - u += athFloor + o - p; /* redo scaling */ - - return (float) Math.pow(10., 0.1 * u); - } - - /** - * Calculate the allowed distortion for each scalefactor band, as determined - * by the psychoacoustic model. xmin(sb) = ratio(sb) * en(sb) / bw(sb) - * - * returns number of sfb's with energy > ATH - */ - public final int calc_xmin(final LameGlobalFlags gfp, - final III_psy_ratio ratio, final GrInfo cod_info, - final float[] pxmin) { - int pxminPos = 0; - final LameInternalFlags gfc = gfp.internal_flags; - int gsfb, j = 0, ath_over = 0; - final ATH ATH = gfc.ATH; - final float[] xr = cod_info.xr; - final int enable_athaa_fix = (gfp.VBR == VbrMode.vbr_mtrh) ? 1 : 0; - float masking_lower = gfc.masking_lower; - - if (gfp.VBR == VbrMode.vbr_mtrh || gfp.VBR == VbrMode.vbr_mt) { - /* was already done in PSY-Model */ - masking_lower = 1.0f; - } - - for (gsfb = 0; gsfb < cod_info.psy_lmax; gsfb++) { - float en0, xmin; - float rh1, rh2; - int width, l; - - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - xmin = athAdjust(ATH.adjust, ATH.l[gsfb], ATH.floor); - else - xmin = ATH.adjust * ATH.l[gsfb]; - - width = cod_info.width[gsfb]; - rh1 = xmin / width; - rh2 = DBL_EPSILON; - l = width >> 1; - en0 = 0.0f; - do { - float xa, xb; - xa = xr[j] * xr[j]; - en0 += xa; - rh2 += (xa < rh1) ? xa : rh1; - j++; - xb = xr[j] * xr[j]; - en0 += xb; - rh2 += (xb < rh1) ? xb : rh1; - j++; - } while (--l > 0); - if (en0 > xmin) - ath_over++; - - if (gsfb == Encoder.SBPSY_l) { - float x = xmin * gfc.nsPsy.longfact[gsfb]; - if (rh2 < x) { - rh2 = x; - } - } - if (enable_athaa_fix != 0) { - xmin = rh2; - } - if (!gfp.ATHonly) { - final float e = ratio.en.l[gsfb]; - if (e > 0.0f) { - float x; - x = en0 * ratio.thm.l[gsfb] * masking_lower / e; - if (enable_athaa_fix != 0) - x *= gfc.nsPsy.longfact[gsfb]; - if (xmin < x) - xmin = x; - } - } - if (enable_athaa_fix != 0) - pxmin[pxminPos++] = xmin; - else - pxmin[pxminPos++] = xmin * gfc.nsPsy.longfact[gsfb]; - } /* end of long block loop */ - - /* use this function to determine the highest non-zero coeff */ - int max_nonzero = 575; - if (cod_info.block_type != Encoder.SHORT_TYPE) { - // NORM, START or STOP type, but not SHORT - int k = 576; - while (k-- != 0 && BitStream.EQ(xr[k], 0)) { - max_nonzero = k; - } - } - cod_info.max_nonzero_coeff = max_nonzero; - - for (int sfb = cod_info.sfb_smin; gsfb < cod_info.psymax; sfb++, gsfb += 3) { - int width, b; - float tmpATH; - if (gfp.VBR == VbrMode.vbr_rh || gfp.VBR == VbrMode.vbr_mtrh) - tmpATH = athAdjust(ATH.adjust, ATH.s[sfb], ATH.floor); - else - tmpATH = ATH.adjust * ATH.s[sfb]; - - width = cod_info.width[gsfb]; - for (b = 0; b < 3; b++) { - float en0 = 0.0f, xmin; - float rh1, rh2; - int l = width >> 1; - - rh1 = tmpATH / width; - rh2 = DBL_EPSILON; - do { - float xa, xb; - xa = xr[j] * xr[j]; - en0 += xa; - rh2 += (xa < rh1) ? xa : rh1; - j++; - xb = xr[j] * xr[j]; - en0 += xb; - rh2 += (xb < rh1) ? xb : rh1; - j++; - } while (--l > 0); - if (en0 > tmpATH) - ath_over++; - if (sfb == Encoder.SBPSY_s) { - float x = tmpATH * gfc.nsPsy.shortfact[sfb]; - if (rh2 < x) { - rh2 = x; - } - } - if (enable_athaa_fix != 0) - xmin = rh2; - else - xmin = tmpATH; - - if (!gfp.ATHonly && !gfp.ATHshort) { - final float e = ratio.en.s[sfb][b]; - if (e > 0.0f) { - float x; - x = en0 * ratio.thm.s[sfb][b] * masking_lower / e; - if (enable_athaa_fix != 0) - x *= gfc.nsPsy.shortfact[sfb]; - if (xmin < x) - xmin = x; - } - } - if (enable_athaa_fix != 0) - pxmin[pxminPos++] = xmin; - else - pxmin[pxminPos++] = xmin * gfc.nsPsy.shortfact[sfb]; - } /* b */ - if (gfp.useTemporal) { - if (pxmin[pxminPos - 3] > pxmin[pxminPos - 3 + 1]) - pxmin[pxminPos - 3 + 1] += (pxmin[pxminPos - 3] - pxmin[pxminPos - 3 + 1]) - * gfc.decay; - if (pxmin[pxminPos - 3 + 1] > pxmin[pxminPos - 3 + 2]) - pxmin[pxminPos - 3 + 2] += (pxmin[pxminPos - 3 + 1] - pxmin[pxminPos - 3 + 2]) - * gfc.decay; - } - } /* end of short block sfb loop */ - - return ath_over; - } - - private static class StartLine { - public StartLine(final int j) { - s = j; - } - - int s; - } - - private float calc_noise_core(final GrInfo cod_info, - final StartLine startline, int l, final float step) { - float noise = 0; - int j = startline.s; - final int[] ix = cod_info.l3_enc; - - if (j > cod_info.count1) { - while ((l--) != 0) { - float temp; - temp = cod_info.xr[j]; - j++; - noise += temp * temp; - temp = cod_info.xr[j]; - j++; - noise += temp * temp; - } - } else if (j > cod_info.big_values) { - float ix01[] = new float[2]; - ix01[0] = 0; - ix01[1] = step; - while ((l--) != 0) { - float temp; - temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]]; - j++; - noise += temp * temp; - temp = Math.abs(cod_info.xr[j]) - ix01[ix[j]]; - j++; - noise += temp * temp; - } - } else { - while ((l--) != 0) { - float temp; - temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step; - j++; - noise += temp * temp; - temp = Math.abs(cod_info.xr[j]) - pow43[ix[j]] * step; - j++; - noise += temp * temp; - } - } - - startline.s = j; - return noise; - } - - /** - * <PRE> - * -oo dB => -1.00 - * - 6 dB => -0.97 - * - 3 dB => -0.80 - * - 2 dB => -0.64 - * - 1 dB => -0.38 - * 0 dB => 0.00 - * + 1 dB => +0.49 - * + 2 dB => +1.06 - * + 3 dB => +1.68 - * + 6 dB => +3.69 - * +10 dB => +6.45 - * </PRE> - */ - public final int calc_noise(final GrInfo cod_info, - final float[] l3_xmin, final float[] distort, - final CalcNoiseResult res, final CalcNoiseData prev_noise) { - int distortPos = 0; - int l3_xminPos = 0; - int sfb, l, over = 0; - float over_noise_db = 0; - /* 0 dB relative to masking */ - float tot_noise_db = 0; - /* -200 dB relative to masking */ - float max_noise = -20.0f; - int j = 0; - final int[] scalefac = cod_info.scalefac; - int scalefacPos = 0; - - res.over_SSD = 0; - - for (sfb = 0; sfb < cod_info.psymax; sfb++) { - final int s = cod_info.global_gain - - (((scalefac[scalefacPos++]) + (cod_info.preflag != 0 ? pretab[sfb] - : 0)) << (cod_info.scalefac_scale + 1)) - - cod_info.subblock_gain[cod_info.window[sfb]] * 8; - float noise = 0.0f; - - if (prev_noise != null && (prev_noise.step[sfb] == s)) { - - /* use previously computed values */ - noise = prev_noise.noise[sfb]; - j += cod_info.width[sfb]; - distort[distortPos++] = noise / l3_xmin[l3_xminPos++]; - - noise = prev_noise.noise_log[sfb]; - - } else { - final float step = POW20(s); - l = cod_info.width[sfb] >> 1; - - if ((j + cod_info.width[sfb]) > cod_info.max_nonzero_coeff) { - int usefullsize; - usefullsize = cod_info.max_nonzero_coeff - j + 1; - - if (usefullsize > 0) - l = usefullsize >> 1; - else - l = 0; - } - - StartLine sl = new StartLine(j); - noise = calc_noise_core(cod_info, sl, l, step); - j = sl.s; - - if (prev_noise != null) { - /* save noise values */ - prev_noise.step[sfb] = s; - prev_noise.noise[sfb] = noise; - } - - noise = distort[distortPos++] = noise / l3_xmin[l3_xminPos++]; - - /* multiplying here is adding in dB, but can overflow */ - noise = Util.FAST_LOG10((float) Math.max(noise, 1E-20)); - - if (prev_noise != null) { - /* save noise values */ - prev_noise.noise_log[sfb] = noise; - } - } - - if (prev_noise != null) { - /* save noise values */ - prev_noise.global_gain = cod_info.global_gain; - } - - tot_noise_db += noise; - - if (noise > 0.0) { - int tmp; - - tmp = Math.max((int) (noise * 10 + .5), 1); - res.over_SSD += tmp * tmp; - - over++; - /* multiplying here is adding in dB -but can overflow */ - /* over_noise *= noise; */ - over_noise_db += noise; - } - max_noise = Math.max(max_noise, noise); - - } - - res.over_count = over; - res.tot_noise = tot_noise_db; - res.over_noise = over_noise_db; - res.max_noise = max_noise; - - return over; - } - - /** - * updates plotting data - * - * Mark Taylor 2000-??-?? - * - * Robert Hegemann: moved noise/distortion calc into it - */ - private void set_pinfo(final LameGlobalFlags gfp, - final GrInfo cod_info, final III_psy_ratio ratio, - final int gr, final int ch) { - final LameInternalFlags gfc = gfp.internal_flags; - int sfb, sfb2; - int l; - float en0, en1; - float ifqstep = (cod_info.scalefac_scale == 0) ? .5f : 1.0f; - int[] scalefac = cod_info.scalefac; - - float l3_xmin[] = new float[L3Side.SFBMAX], xfsf[] = new float[L3Side.SFBMAX]; - CalcNoiseResult noise = new CalcNoiseResult(); - - calc_xmin(gfp, ratio, cod_info, l3_xmin); - calc_noise(cod_info, l3_xmin, xfsf, noise, null); - - int j = 0; - sfb2 = cod_info.sfb_lmax; - if (cod_info.block_type != Encoder.SHORT_TYPE - && 0 == cod_info.mixed_block_flag) - sfb2 = 22; - for (sfb = 0; sfb < sfb2; sfb++) { - int start = gfc.scalefac_band.l[sfb]; - int end = gfc.scalefac_band.l[sfb + 1]; - int bw = end - start; - for (en0 = 0.0f; j < end; j++) - en0 += cod_info.xr[j] * cod_info.xr[j]; - en0 /= bw; - /* convert to MDCT units */ - /* scaling so it shows up on FFT plot */ - en1 = 1e15f; - gfc.pinfo.en[gr][ch][sfb] = en1 * en0; - gfc.pinfo.xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw; - - if (ratio.en.l[sfb] > 0 && !gfp.ATHonly) - en0 = en0 / ratio.en.l[sfb]; - else - en0 = 0.0f; - - gfc.pinfo.thr[gr][ch][sfb] = en1 - * Math.max(en0 * ratio.thm.l[sfb], gfc.ATH.l[sfb]); - - /* there is no scalefactor bands >= SBPSY_l */ - gfc.pinfo.LAMEsfb[gr][ch][sfb] = 0; - if (cod_info.preflag != 0 && sfb >= 11) - gfc.pinfo.LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb]; - - if (sfb < Encoder.SBPSY_l) { - /* scfsi should be decoded by caller side */ - assert (scalefac[sfb] >= 0); - gfc.pinfo.LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb]; - } - } /* for sfb */ - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - sfb2 = sfb; - for (sfb = cod_info.sfb_smin; sfb < Encoder.SBMAX_s; sfb++) { - int start = gfc.scalefac_band.s[sfb]; - int end = gfc.scalefac_band.s[sfb + 1]; - int bw = end - start; - for (int i = 0; i < 3; i++) { - for (en0 = 0.0f, l = start; l < end; l++) { - en0 += cod_info.xr[j] * cod_info.xr[j]; - j++; - } - en0 = (float) Math.max(en0 / bw, 1e-20); - /* convert to MDCT units */ - /* scaling so it shows up on FFT plot */ - en1 = 1e15f; - - gfc.pinfo.en_s[gr][ch][3 * sfb + i] = en1 * en0; - gfc.pinfo.xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2] - * xfsf[sfb2] / bw; - if (ratio.en.s[sfb][i] > 0) - en0 = en0 / ratio.en.s[sfb][i]; - else - en0 = 0.0f; - if (gfp.ATHonly || gfp.ATHshort) - en0 = 0; - - gfc.pinfo.thr_s[gr][ch][3 * sfb + i] = en1 - * Math.max(en0 * ratio.thm.s[sfb][i], - gfc.ATH.s[sfb]); - - /* there is no scalefactor bands >= SBPSY_s */ - gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0 - * cod_info.subblock_gain[i]; - if (sfb < Encoder.SBPSY_s) { - gfc.pinfo.LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep - * scalefac[sfb2]; - } - sfb2++; - } - } - } /* block type short */ - gfc.pinfo.LAMEqss[gr][ch] = cod_info.global_gain; - gfc.pinfo.LAMEmainbits[gr][ch] = cod_info.part2_3_length - + cod_info.part2_length; - gfc.pinfo.LAMEsfbits[gr][ch] = cod_info.part2_length; - - gfc.pinfo.over[gr][ch] = noise.over_count; - gfc.pinfo.max_noise[gr][ch] = noise.max_noise * 10.0; - gfc.pinfo.over_noise[gr][ch] = noise.over_noise * 10.0; - gfc.pinfo.tot_noise[gr][ch] = noise.tot_noise * 10.0; - gfc.pinfo.over_SSD[gr][ch] = noise.over_SSD; - } - - /** - * updates plotting data for a whole frame - * - * Robert Hegemann 2000-10-21 - */ - public final void set_frame_pinfo(final LameGlobalFlags gfp, - final III_psy_ratio ratio[][]) { - final LameInternalFlags gfc = gfp.internal_flags; - - gfc.masking_lower = 1.0f; - - /* - * for every granule and channel patch l3_enc and set info - */ - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - GrInfo cod_info = gfc.l3_side.tt[gr][ch]; - int scalefac_sav[] = new int[L3Side.SFBMAX]; - System.arraycopy(cod_info.scalefac, 0, scalefac_sav, 0, - scalefac_sav.length); - - /* - * reconstruct the scalefactors in case SCFSI was used - */ - if (gr == 1) { - int sfb; - for (sfb = 0; sfb < cod_info.sfb_lmax; sfb++) { - if (cod_info.scalefac[sfb] < 0) /* scfsi */ - cod_info.scalefac[sfb] = gfc.l3_side.tt[0][ch].scalefac[sfb]; - } - } - - set_pinfo(gfp, cod_info, ratio[gr][ch], gr, ch); - System.arraycopy(scalefac_sav, 0, cod_info.scalefac, 0, - scalefac_sav.length); - } /* for ch */ - } /* for gr */ - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ReplayGain.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ReplayGain.java deleted file mode 100644 index 30dcdc456..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ReplayGain.java +++ /dev/null @@ -1,41 +0,0 @@ -package mp3; - -public final class ReplayGain { - float linprebuf[] = new float[GainAnalysis.MAX_ORDER * 2]; - /** - * left input samples, with pre-buffer - */ - int linpre; - float lstepbuf[] = new float[GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER]; - /** - * left "first step" (i.e. post first filter) samples - */ - int lstep; - float loutbuf[] = new float[GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER]; - /** - * left "out" (i.e. post second filter) samples - */ - int lout; - float rinprebuf[] = new float[GainAnalysis.MAX_ORDER * 2]; - /** - * right input samples ... - */ - int rinpre; - float rstepbuf[] = new float[GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER]; - int rstep; - float routbuf[] = new float[GainAnalysis.MAX_SAMPLES_PER_WINDOW + GainAnalysis.MAX_ORDER]; - int rout; - /** - * number of samples required to reach number of milliseconds required - * for RMS window - */ - int sampleWindow; - int totsamp; - double lsum; - double rsum; - int freqindex; - int first; - int A[] = new int[(int) (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB)]; - int B[] = new int[(int) (GainAnalysis.STEPS_per_dB * GainAnalysis.MAX_dB)]; - -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Reservoir.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Reservoir.java deleted file mode 100644 index 19362414e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Reservoir.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * bit reservoir source file - * - * Copyright (c) 1999-2000 Mark Taylor - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Reservoir.java,v 1.9 2011/05/24 20:48:06 kenchis Exp $ */ - -package mp3; - -/** - * ResvFrameBegin:<BR> - * Called (repeatedly) at the beginning of a frame. Updates the maximum size of - * the reservoir, and checks to make sure main_data_begin was set properly by - * the formatter<BR> - * Background information: - * - * This is the original text from the ISO standard. Because of sooo many bugs - * and irritations correcting comments are added in brackets []. A '^W' means - * you should remove the last word. - * - * <PRE> - * 1. The following rule can be used to calculate the maximum - * number of bits used for one granule [^W frame]:<BR> - * At the highest possible bitrate of Layer III (320 kbps - * per stereo signal [^W^W^W], 48 kHz) the frames must be of - * [^W^W^W are designed to have] constant length, i.e. - * one buffer [^W^W the frame] length is:<BR> - * - * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte - * - * This value is used as the maximum buffer per channel [^W^W] at - * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps - * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit - * [per granule and channel] at 48 kHz sampling frequency. - * This means that there is a maximum deviation (short time buffer - * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps. - * The actual deviation is equal to the number of bytes [with the - * meaning of octets] denoted by the main_data_end offset pointer. - * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits - * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits]. - * ... The xchange of buffer bits between the left and right channel - * is allowed without restrictions [exception: dual channel]. - * Because of the [constructed] constraint on the buffer size - * main_data_end is always set to 0 in the case of bit_rate_index==14, - * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case - * all data are allocated between adjacent header [^W sync] words - * [, i.e. there is no buffering at all]. - * </PRE> - */ -public class Reservoir { - BitStream bs; - - public final void setModules(BitStream bs) { - this.bs = bs; - } - - public final int ResvFrameBegin(final LameGlobalFlags gfp, - final MeanBits mean_bits) { - final LameInternalFlags gfc = gfp.internal_flags; - int maxmp3buf; - final IIISideInfo l3_side = gfc.l3_side; - - int frameLength = bs.getframebits(gfp); - mean_bits.bits = (frameLength - gfc.sideinfo_len * 8) / gfc.mode_gr; - - /** - * <PRE> - * Meaning of the variables: - * resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1)) - * Number of bits can be stored in previous frame(s) due to - * counter size constaints - * maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5)) - * Number of bits allowed to encode one frame (you can take 8*511 bit - * from the bit reservoir and at most 8*1440 bit from the current - * frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible - * value for MPEG-1 and -2) - * - * maximum allowed granule/channel size times 4 = 8*2047 bits., - * so this is the absolute maximum supported by the format. - * - * - * fullFrameBits: maximum number of bits available for encoding - * the current frame. - * - * mean_bits: target number of bits per granule. - * - * frameLength: - * - * gfc.ResvMax: maximum allowed reservoir - * - * gfc.ResvSize: current reservoir size - * - * l3_side.resvDrain_pre: - * ancillary data to be added to previous frame: - * (only usefull in VBR modes if it is possible to have - * maxmp3buf < fullFrameBits)). Currently disabled, - * see #define NEW_DRAIN - * 2010-02-13: RH now enabled, it seems to be needed for CBR too, - * as there exists one example, where the FhG decoder - * can't decode a -b320 CBR file anymore. - * - * l3_side.resvDrain_post: - * ancillary data to be added to this frame: - * - * </PRE> - */ - - /* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */ - int resvLimit = (8 * 256) * gfc.mode_gr - 8; - - /* - * maximum allowed frame size. dont use more than this number of bits, - * even if the frame has the space for them: - */ - if (gfp.brate > 320) { - /* in freeformat the buffer is constant */ - maxmp3buf = 8 * ((int) ((gfp.brate * 1000) - / (gfp.out_samplerate / 1152f) / 8 + .5)); - } else { - /* - * all mp3 decoders should have enough buffer to handle this value: - * size of a 320kbps 32kHz frame - */ - maxmp3buf = 8 * 1440; - - /* - * Bouvigne suggests this more lax interpretation of the ISO doc - * instead of using 8*960. - */ - - if (gfp.strict_ISO) { - maxmp3buf = 8 * ((int) (320000 / (gfp.out_samplerate / 1152f) / 8 + .5)); - } - } - - gfc.ResvMax = maxmp3buf - frameLength; - if (gfc.ResvMax > resvLimit) - gfc.ResvMax = resvLimit; - if (gfc.ResvMax < 0 || gfp.disable_reservoir) - gfc.ResvMax = 0; - - int fullFrameBits = mean_bits.bits * gfc.mode_gr - + Math.min(gfc.ResvSize, gfc.ResvMax); - - if (fullFrameBits > maxmp3buf) - fullFrameBits = maxmp3buf; - - assert (0 == gfc.ResvMax % 8); - assert (gfc.ResvMax >= 0); - - l3_side.resvDrain_pre = 0; - - // frame analyzer code - if (gfc.pinfo != null) { - /* - * expected bits per channel per granule [is this also right for - * mono/stereo, MPEG-1/2 ?] - */ - gfc.pinfo.mean_bits = mean_bits.bits / 2; - gfc.pinfo.resvsize = gfc.ResvSize; - } - - return fullFrameBits; - } - - /** - * returns targ_bits: target number of bits to use for 1 granule<BR> - * extra_bits: amount extra available from reservoir<BR> - * Mark Taylor 4/99 - */ - public final int ResvMaxBits(final LameGlobalFlags gfp, - final int mean_bits, final MeanBits targ_bits, final int cbr) { - final LameInternalFlags gfc = gfp.internal_flags; - int add_bits; - int ResvSize = gfc.ResvSize, ResvMax = gfc.ResvMax; - - /* compensate the saved bits used in the 1st granule */ - if (cbr != 0) - ResvSize += mean_bits; - - if ((gfc.substep_shaping & 1) != 0) - ResvMax *= 0.9; - - targ_bits.bits = mean_bits; - - /* extra bits if the reservoir is almost full */ - if (ResvSize * 10 > ResvMax * 9) { - add_bits = ResvSize - (ResvMax * 9) / 10; - targ_bits.bits += add_bits; - gfc.substep_shaping |= 0x80; - } else { - add_bits = 0; - gfc.substep_shaping &= 0x7f; - /* - * build up reservoir. this builds the reservoir a little slower - * than FhG. It could simple be mean_bits/15, but this was rigged to - * always produce 100 (the old value) at 128kbs - */ - if (!gfp.disable_reservoir && 0 == (gfc.substep_shaping & 1)) - targ_bits.bits -= .1 * mean_bits; - } - - /* amount from the reservoir we are allowed to use. ISO says 6/10 */ - int extra_bits = (ResvSize < (gfc.ResvMax * 6) / 10 ? ResvSize - : (gfc.ResvMax * 6) / 10); - extra_bits -= add_bits; - - if (extra_bits < 0) - extra_bits = 0; - return extra_bits; - } - - /** - * Called after a granule's bit allocation. Readjusts the size of the - * reservoir to reflect the granule's usage. - */ - public final void ResvAdjust(final LameInternalFlags gfc, - final GrInfo gi) { - gfc.ResvSize -= gi.part2_3_length + gi.part2_length; - } - - /** - * Called after all granules in a frame have been allocated. Makes sure that - * the reservoir size is within limits, possibly by adding stuffing bits. - */ - public final void ResvFrameEnd(final LameInternalFlags gfc, - final int mean_bits) { - int over_bits; - final IIISideInfo l3_side = gfc.l3_side; - - gfc.ResvSize += mean_bits * gfc.mode_gr; - int stuffingBits = 0; - l3_side.resvDrain_post = 0; - l3_side.resvDrain_pre = 0; - - /* we must be byte aligned */ - if ((over_bits = gfc.ResvSize % 8) != 0) - stuffingBits += over_bits; - - over_bits = (gfc.ResvSize - stuffingBits) - gfc.ResvMax; - if (over_bits > 0) { - assert (0 == over_bits % 8); - assert (over_bits >= 0); - stuffingBits += over_bits; - } - - /* - * NOTE: enabling the NEW_DRAIN code fixes some problems with FhG - * decoder shipped with MS Windows operating systems. Using this, it is - * even possible to use Gabriel's lax buffer consideration again, which - * assumes, any decoder should have a buffer large enough for a 320 kbps - * frame at 32 kHz sample rate. - * - * old drain code: lame -b320 BlackBird.wav --. does not play with - * GraphEdit.exe using FhG decoder V1.5 Build 50 - * - * new drain code: lame -b320 BlackBird.wav --. plays fine with - * GraphEdit.exe using FhG decoder V1.5 Build 50 - * - * Robert Hegemann, 2010-02-13. - */ - /* - * drain as many bits as possible into previous frame ancillary data In - * particular, in VBR mode ResvMax may have changed, and we have to make - * sure main_data_begin does not create a reservoir bigger than ResvMax - * mt 4/00 - */ - { - int mdb_bytes = Math.min(l3_side.main_data_begin * 8, stuffingBits) / 8; - l3_side.resvDrain_pre += 8 * mdb_bytes; - stuffingBits -= 8 * mdb_bytes; - gfc.ResvSize -= 8 * mdb_bytes; - l3_side.main_data_begin -= mdb_bytes; - } - /* drain the rest into this frames ancillary data */ - l3_side.resvDrain_post += stuffingBits; - gfc.ResvSize -= stuffingBits; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ScaleFac.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ScaleFac.java deleted file mode 100644 index 65109a47d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ScaleFac.java +++ /dev/null @@ -1,27 +0,0 @@ -package mp3; - -/** - * Layer III side information. - * - * @author Ken - * - */ -public final class ScaleFac { - public ScaleFac() { - } - - public ScaleFac(final int[] arrL, final int[] arrS, final int[] arr21, - final int[] arr12) { - System.arraycopy(arrL, 0, l, 0, Math.min(arrL.length, l.length)); - System.arraycopy(arrS, 0, s, 0, Math.min(arrS.length, s.length)); - System.arraycopy(arr21, 0, psfb21, 0, - Math.min(arr21.length, psfb21.length)); - System.arraycopy(arr12, 0, psfb12, 0, - Math.min(arr12.length, psfb12.length)); - } - - int[] l = new int[1 + Encoder.SBMAX_l]; - int[] s = new int[1 + Encoder.SBMAX_s]; - int[] psfb21 = new int[1 + Encoder.PSFB21]; - int[] psfb12 = new int[1 + Encoder.PSFB12]; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlock.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlock.java deleted file mode 100644 index ad46ceb0a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlock.java +++ /dev/null @@ -1,20 +0,0 @@ -package mp3; - -public enum ShortBlock { - /** - * LAME may use them, even different block types for L/R. - */ - short_block_allowed, - /** - * LAME may use them, but always same block types in L/R. - */ - short_block_coupled, - /** - * LAME will not use short blocks, long blocks only. - */ - short_block_dispensed, - /** - * LAME will not use long blocks, short blocks only. - */ - short_block_forced -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlockConstrain.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlockConstrain.java deleted file mode 100644 index 8dde4d55a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/ShortBlockConstrain.java +++ /dev/null @@ -1,89 +0,0 @@ -package mp3; - -import mp3.VBRQuantize.algo_t; - -final class ShortBlockConstrain implements VBRQuantize.alloc_sf_f { - /** - * - */ - private final VBRQuantize vbrQuantize; - - /** - * @param vbrQuantize - */ - ShortBlockConstrain(VBRQuantize vbrQuantize) { - this.vbrQuantize = vbrQuantize; - } - - /****************************************************************** - * - * short block scalefacs - * - ******************************************************************/ - - public void alloc(algo_t that, int[] vbrsf, int[] vbrsfmin, int vbrmax) { - final GrInfo cod_info = that.cod_info; - final LameInternalFlags gfc = that.gfc; - final int maxminsfb = that.mingain_l; - int mover, maxover0 = 0, maxover1 = 0, delta = 0; - int v, v0, v1; - int sfb; - final int psymax = cod_info.psymax; - - for (sfb = 0; sfb < psymax; ++sfb) { - assert (vbrsf[sfb] >= vbrsfmin[sfb]); - v = vbrmax - vbrsf[sfb]; - if (delta < v) { - delta = v; - } - v0 = v - (4 * 14 + 2 * VBRQuantize.max_range_short[sfb]); - v1 = v - (4 * 14 + 4 * VBRQuantize.max_range_short[sfb]); - if (maxover0 < v0) { - maxover0 = v0; - } - if (maxover1 < v1) { - maxover1 = v1; - } - } - if (gfc.noise_shaping == 2) { - /* allow scalefac_scale=1 */ - mover = Math.min(maxover0, maxover1); - } else { - mover = maxover0; - } - if (delta > mover) { - delta = mover; - } - vbrmax -= delta; - maxover0 -= mover; - maxover1 -= mover; - - if (maxover0 == 0) { - cod_info.scalefac_scale = 0; - } else if (maxover1 == 0) { - cod_info.scalefac_scale = 1; - } - if (vbrmax < maxminsfb) { - vbrmax = maxminsfb; - } - cod_info.global_gain = vbrmax; - - if (cod_info.global_gain < 0) { - cod_info.global_gain = 0; - } else if (cod_info.global_gain > 255) { - cod_info.global_gain = 255; - } - { - int sf_temp[] = new int[L3Side.SFBMAX]; - for (sfb = 0; sfb < L3Side.SFBMAX; ++sfb) { - sf_temp[sfb] = vbrsf[sfb] - vbrmax; - } - this.vbrQuantize.set_subblock_gain(cod_info, that.mingain_s, - sf_temp); - this.vbrQuantize.set_scalefacs(cod_info, vbrsfmin, sf_temp, - VBRQuantize.max_range_short); - } - assert (this.vbrQuantize.checkScalefactor(cod_info, vbrsfmin)); - - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Tables.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Tables.java deleted file mode 100644 index f16b52462..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Tables.java +++ /dev/null @@ -1,507 +0,0 @@ -package mp3; - -public interface Tables { - - static final int t1HB[] = { - 1, 1, - 1, 0 - }; - - static final int t2HB[] = { - 1, 2, 1, - 3, 1, 1, - 3, 2, 0 - }; - - static final int t3HB[] = { - 3, 2, 1, - 1, 1, 1, - 3, 2, 0 - }; - - static final int t5HB[] = { - 1, 2, 6, 5, - 3, 1, 4, 4, - 7, 5, 7, 1, - 6, 1, 1, 0 - }; - - static final int t6HB[] = { - 7, 3, 5, 1, - 6, 2, 3, 2, - 5, 4, 4, 1, - 3, 3, 2, 0 - }; - - static final int t7HB[] = { - 1, 2, 10, 19, 16, 10, - 3, 3, 7, 10, 5, 3, - 11, 4, 13, 17, 8, 4, - 12, 11, 18, 15, 11, 2, - 7, 6, 9, 14, 3, 1, - 6, 4, 5, 3, 2, 0 - }; - - static final int t8HB[] = { - 3, 4, 6, 18, 12, 5, - 5, 1, 2, 16, 9, 3, - 7, 3, 5, 14, 7, 3, - 19, 17, 15, 13, 10, 4, - 13, 5, 8, 11, 5, 1, - 12, 4, 4, 1, 1, 0 - }; - - static final int t9HB[] = { - 7, 5, 9, 14, 15, 7, - 6, 4, 5, 5, 6, 7, - 7, 6, 8, 8, 8, 5, - 15, 6, 9, 10, 5, 1, - 11, 7, 9, 6, 4, 1, - 14, 4, 6, 2, 6, 0 - }; - - static final int t10HB[] = { - 1, 2, 10, 23, 35, 30, 12, 17, - 3, 3, 8, 12, 18, 21, 12, 7, - 11, 9, 15, 21, 32, 40, 19, 6, - 14, 13, 22, 34, 46, 23, 18, 7, - 20, 19, 33, 47, 27, 22, 9, 3, - 31, 22, 41, 26, 21, 20, 5, 3, - 14, 13, 10, 11, 16, 6, 5, 1, - 9, 8, 7, 8, 4, 4, 2, 0 - }; - - static final int t11HB[] = { - 3, 4, 10, 24, 34, 33, 21, 15, - 5, 3, 4, 10, 32, 17, 11, 10, - 11, 7, 13, 18, 30, 31, 20, 5, - 25, 11, 19, 59, 27, 18, 12, 5, - 35, 33, 31, 58, 30, 16, 7, 5, - 28, 26, 32, 19, 17, 15, 8, 14, - 14, 12, 9, 13, 14, 9, 4, 1, - 11, 4, 6, 6, 6, 3, 2, 0 - }; - - static final int t12HB[] = { - 9, 6, 16, 33, 41, 39, 38, 26, - 7, 5, 6, 9, 23, 16, 26, 11, - 17, 7, 11, 14, 21, 30, 10, 7, - 17, 10, 15, 12, 18, 28, 14, 5, - 32, 13, 22, 19, 18, 16, 9, 5, - 40, 17, 31, 29, 17, 13, 4, 2, - 27, 12, 11, 15, 10, 7, 4, 1, - 27, 12, 8, 12, 6, 3, 1, 0 - }; - - static final int t13HB[] = { - 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, - 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, - 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, - 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, - 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, - 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, - 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, - 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, - 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, - 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, - 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, - 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, - 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, - 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, - 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, - 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1 - }; - - static final int t15HB[] = { - 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, - 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, - 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33, - 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, - 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, - 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38, - 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, - 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, - 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20, - 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, - 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, - 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11, - 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, - 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, - 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, - 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0 - }; - - static final int t16HB[] = { - 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, - 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, - 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16, - 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, - 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, - 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, - 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, - 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8, - 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, - 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, - 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, - 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, - 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, - 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, - 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0, - 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3 - }; - - static final int t24HB[] = { - 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, - 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, - 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18, - 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, - 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14, - 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, - 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, - 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, - 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, - 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, - 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, - 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, - 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, - 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, - 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, - 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3 - }; - - static final int t32HB[] = { - 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3, - 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4 - }; - - static final int t33HB[] = { - 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3, - 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4 - }; - - static final int t1l[] = { - 1, 4, - 3, 5 - }; - - static final int t2l[] = { - 1, 4, 7, - 4, 5, 7, - 6, 7, 8 - }; - - static final int t3l[] = { - 2, 3, 7, - 4, 4, 7, - 6, 7, 8 - }; - - static final int t5l[] = { - 1, 4, 7, 8, - 4, 5, 8, 9, - 7, 8, 9, 10, - 8, 8, 9, 10 - }; - - static final int t6l[] = { - 3, 4, 6, 8, - 4, 4, 6, 7, - 5, 6, 7, 8, - 7, 7, 8, 9 - }; - - static final int t7l[] = { - 1, 4, 7, 9, 9, 10, - 4, 6, 8, 9, 9, 10, - 7, 7, 9, 10, 10, 11, - 8, 9, 10, 11, 11, 11, - 8, 9, 10, 11, 11, 12, - 9, 10, 11, 12, 12, 12 - }; - - static final int t8l[] = { - 2, 4, 7, 9, 9, 10, - 4, 4, 6, 10, 10, 10, - 7, 6, 8, 10, 10, 11, - 9, 10, 10, 11, 11, 12, - 9, 9, 10, 11, 12, 12, - 10, 10, 11, 11, 13, 13 - }; - - static final int t9l[] = { - 3, 4, 6, 7, 9, 10, - 4, 5, 6, 7, 8, 10, - 5, 6, 7, 8, 9, 10, - 7, 7, 8, 9, 9, 10, - 8, 8, 9, 9, 10, 11, - 9, 9, 10, 10, 11, 11 - }; - - static final int t10l[] = { - 1, 4, 7, 9, 10, 10, 10, 11, - 4, 6, 8, 9, 10, 11, 10, 10, - 7, 8, 9, 10, 11, 12, 11, 11, - 8, 9, 10, 11, 12, 12, 11, 12, - 9, 10, 11, 12, 12, 12, 12, 12, - 10, 11, 12, 12, 13, 13, 12, 13, - 9, 10, 11, 12, 12, 12, 13, 13, - 10, 10, 11, 12, 12, 13, 13, 13 - }; - - static final int t11l[] = { - 2, 4, 6, 8, 9, 10, 9, 10, - 4, 5, 6, 8, 10, 10, 9, 10, - 6, 7, 8, 9, 10, 11, 10, 10, - 8, 8, 9, 11, 10, 12, 10, 11, - 9, 10, 10, 11, 11, 12, 11, 12, - 9, 10, 11, 12, 12, 13, 12, 13, - 9, 9, 9, 10, 11, 12, 12, 12, - 9, 9, 10, 11, 12, 12, 12, 12 - }; - - static final int t12l[] = { - 4, 4, 6, 8, 9, 10, 10, 10, - 4, 5, 6, 7, 9, 9, 10, 10, - 6, 6, 7, 8, 9, 10, 9, 10, - 7, 7, 8, 8, 9, 10, 10, 10, - 8, 8, 9, 9, 10, 10, 10, 11, - 9, 9, 10, 10, 10, 11, 10, 11, - 9, 9, 9, 10, 10, 11, 11, 12, - 10, 10, 10, 11, 11, 11, 11, 12 - }; - - static final int t13l[] = { - 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14, - 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14, - 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15, - 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15, - 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16, - 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16, - 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, - 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18, - 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, - 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17, - 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19, - 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18, - 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18, - 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18, - 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18, - 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18 - }; - - static final int t15l[] = { - 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14, - 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, - 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, - 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, - 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, - 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, - 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14, - 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14, - 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, - 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14, - 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, - 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15, - 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, - 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15, - 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15 - }; - - static final int t16_5l[] = { - 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11, - 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11, - 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12, - 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13, - 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12, - 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13, - 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13, - 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13, - 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13, - 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14, - 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13, - 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14, - 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14, - 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14, - 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14, - 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12 - }; - - static final int t16l[] = { - 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10, - 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10, - 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11, - 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12, - 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11, - 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12, - 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12, - 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12, - 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12, - 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13, - 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12, - 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13, - 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13, - 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13, - 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13, - 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10 - }; - - static final int t24l[] = { - 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10, - 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10, - 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9, - 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9, - 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9, - 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9, - 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9, - 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10, - 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10, - 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, - 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10, - 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6 - }; - - static final int t32l[] = { - 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3, - 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4 - }; - - static final int t33l[] = { - 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3, - 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4 - }; - - final HuffCodeTab ht[] = { - /* xlen, linmax, table, hlen */ - new HuffCodeTab(0, 0, null, null), - new HuffCodeTab(2, 0, t1HB, t1l), - new HuffCodeTab(3, 0, t2HB, t2l), - new HuffCodeTab(3, 0, t3HB, t3l), - new HuffCodeTab(0, 0, null, null), /* Apparently not used */ - new HuffCodeTab(4, 0, t5HB, t5l), - new HuffCodeTab(4, 0, t6HB, t6l), - new HuffCodeTab(6, 0, t7HB, t7l), - new HuffCodeTab(6, 0, t8HB, t8l), - new HuffCodeTab(6, 0, t9HB, t9l), - new HuffCodeTab(8, 0, t10HB, t10l), - new HuffCodeTab(8, 0, t11HB, t11l), - new HuffCodeTab(8, 0, t12HB, t12l), - new HuffCodeTab(16, 0, t13HB, t13l), - new HuffCodeTab(0, 0, null, t16_5l), /* Apparently not used */ - new HuffCodeTab(16, 0, t15HB, t15l), - - new HuffCodeTab(1, 1, t16HB, t16l), - new HuffCodeTab(2, 3, t16HB, t16l), - new HuffCodeTab(3, 7, t16HB, t16l), - new HuffCodeTab(4, 15, t16HB, t16l), - new HuffCodeTab(6, 63, t16HB, t16l), - new HuffCodeTab(8, 255, t16HB, t16l), - new HuffCodeTab(10, 1023, t16HB, t16l), - new HuffCodeTab(13, 8191, t16HB, t16l), - - new HuffCodeTab(4, 15, t24HB, t24l), - new HuffCodeTab(5, 31, t24HB, t24l), - new HuffCodeTab(6, 63, t24HB, t24l), - new HuffCodeTab(7, 127, t24HB, t24l), - new HuffCodeTab(8, 255, t24HB, t24l), - new HuffCodeTab(9, 511, t24HB, t24l), - new HuffCodeTab(11, 2047, t24HB, t24l), - new HuffCodeTab(13, 8191, t24HB, t24l), - - new HuffCodeTab(0, 0, t32HB, t32l), - new HuffCodeTab(0, 0, t33HB, t33l), - }; - - /** - * <CODE> - * for (i = 0; i < 16*16; i++) { - * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i]; - * } - * </CODE> - * - */ - static final int largetbl[] = { - 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b, - 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a, - 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b, - 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a, - 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b, - 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009, - 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b, - 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009, - 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b, - 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009, - 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b, - 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009, - 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b, - 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009, - 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, - 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a, - 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, - 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a, - 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c, - 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a, - 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, - 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a, - 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c, - 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a, - 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, - 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a, - 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c, - 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a, - 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d, - 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a, - 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009, - 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006 - }; - /** - * <CODE> - * for (i = 0; i < 3*3; i++) { - * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i]; - * } - * </CODE> - * - */ - static final int table23[] = { - 0x010002, 0x040003, 0x070007, - 0x040004, 0x050004, 0x070007, - 0x060006, 0x070007, 0x080008 - }; - - /** - * <CODE> - * for (i = 0; i < 4*4; i++) { - * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i]; - * } - * </CODE> - * - */ - static final int table56[] = { - 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007, - 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009 - }; - - public static final int bitrate_table[][] = { - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1}, /* MPEG 2 */ - {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1}, /* MPEG 1 */ - {0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1}, /* MPEG 2.5 */ - }; - - /** - * MPEG 2, MPEG 1, MPEG 2.5. - */ - public static final int samplerate_table[][] = { - {22050, 24000, 16000, -1}, - {44100, 48000, 32000, -1}, - {11025, 12000, 8000, -1}, - }; - - /** - * This is the scfsi_band table from 2.4.2.7 of the IS. - */ - static final int scfsi_band[] = { 0, 6, 11, 16, 21 }; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Takehiro.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Takehiro.java deleted file mode 100644 index dbf70cf3e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Takehiro.java +++ /dev/null @@ -1,1179 +0,0 @@ -/* - * MP3 huffman table selecting and bit counting - * - * Copyright (c) 1999-2005 Takehiro TOMINAGA - * Copyright (c) 2002-2005 Gabriel Bouvigne - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Takehiro.java,v 1.26 2011/05/24 20:48:06 kenchis Exp $ */ - -package mp3; - -import java.util.Arrays; - - -public class Takehiro { - - QuantizePVT qupvt; - - public final void setModules(QuantizePVT qupvt) { - this.qupvt = qupvt; - } - - static class Bits { - public Bits(int b) { - bits = b; - } - - int bits; - } - - private int subdv_table[][] = { { 0, 0 }, /* 0 bands */ - { 0, 0 }, /* 1 bands */ - { 0, 0 }, /* 2 bands */ - { 0, 0 }, /* 3 bands */ - { 0, 0 }, /* 4 bands */ - { 0, 1 }, /* 5 bands */ - { 1, 1 }, /* 6 bands */ - { 1, 1 }, /* 7 bands */ - { 1, 2 }, /* 8 bands */ - { 2, 2 }, /* 9 bands */ - { 2, 3 }, /* 10 bands */ - { 2, 3 }, /* 11 bands */ - { 3, 4 }, /* 12 bands */ - { 3, 4 }, /* 13 bands */ - { 3, 4 }, /* 14 bands */ - { 4, 5 }, /* 15 bands */ - { 4, 5 }, /* 16 bands */ - { 4, 6 }, /* 17 bands */ - { 5, 6 }, /* 18 bands */ - { 5, 6 }, /* 19 bands */ - { 5, 7 }, /* 20 bands */ - { 6, 7 }, /* 21 bands */ - { 6, 7 }, /* 22 bands */ - }; - - /** - * nonlinear quantization of xr More accurate formula than the ISO formula. - * Takes into account the fact that we are quantizing xr . ix, but we want - * ix^4/3 to be as close as possible to x^4/3. (taking the nearest int would - * mean ix is as close as possible to xr, which is different.) - * - * From Segher Boessenkool <segher@eastsite.nl> 11/1999 - * - * 09/2000: ASM code removed in favor of IEEE754 hack by Takehiro Tominaga. - * If you need the ASM code, check CVS circa Aug 2000. - * - * 01/2004: Optimizations by Gabriel Bouvigne - */ - private void quantize_lines_xrpow_01(int l, float istep, final float[] xr, - int xrPos, int[] ix, int ixPos) { - final float compareval0 = (1.0f - 0.4054f) / istep; - - assert (l > 0); - l = l >> 1; - while ((l--) != 0) { - ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1; - ix[ixPos++] = (compareval0 > xr[xrPos++]) ? 0 : 1; - } - } - - /** - * XRPOW_FTOI is a macro to convert floats to ints.<BR> - * if XRPOW_FTOI(x) = nearest_int(x), then QUANTFAC(x)=adj43asm[x]<BR> - * ROUNDFAC= -0.0946<BR> - * - * if XRPOW_FTOI(x) = floor(x), then QUANTFAC(x)=asj43[x]<BR> - * ROUNDFAC=0.4054<BR> - * - * Note: using floor() or (int) is extremely slow. On machines where the - * TAKEHIRO_IEEE754_HACK code above does not work, it is worthwile to write - * some ASM for XRPOW_FTOI(). - */ - private void quantize_lines_xrpow(int l, float istep, final float[] xr, - int xrPos, int[] ix, int ixPos) { - assert (l > 0); - - l = l >> 1; - int remaining = l % 2; - l = l >> 1; - while (l-- != 0) { - float x0, x1, x2, x3; - int rx0, rx1, rx2, rx3; - - x0 = xr[xrPos++] * istep; - x1 = xr[xrPos++] * istep; - rx0 = (int) x0; - x2 = xr[xrPos++] * istep; - rx1 = (int) x1; - x3 = xr[xrPos++] * istep; - rx2 = (int) x2; - x0 += qupvt.adj43[rx0]; - rx3 = (int) x3; - x1 += qupvt.adj43[rx1]; - ix[ixPos++] = (int) x0; - x2 += qupvt.adj43[rx2]; - ix[ixPos++] = (int) x1; - x3 += qupvt.adj43[rx3]; - ix[ixPos++] = (int) x2; - ix[ixPos++] = (int) x3; - } - if (remaining != 0) { - float x0, x1; - int rx0, rx1; - - x0 = xr[xrPos++] * istep; - x1 = xr[xrPos++] * istep; - rx0 = (int) x0; - rx1 = (int) x1; - x0 += qupvt.adj43[rx0]; - x1 += qupvt.adj43[rx1]; - ix[ixPos++] = (int) x0; - ix[ixPos++] = (int) x1; - } - } - - /** - * Quantization function This function will select which lines to quantize - * and call the proper quantization function - */ - private void quantize_xrpow(final float[] xp, int[] pi, float istep, - final GrInfo codInfo, final CalcNoiseData prevNoise) { - /* quantize on xr^(3/4) instead of xr */ - int sfb; - int sfbmax; - int j = 0; - boolean prev_data_use; - int accumulate = 0; - int accumulate01 = 0; - - int xpPos = 0; - - int[] iData = pi; - int iDataPos = 0; - int[] acc_iData = iData; - int acc_iDataPos = 0; - float[] acc_xp = xp; - int acc_xpPos = 0; - - /* - * Reusing previously computed data does not seems to work if global - * gain is changed. Finding why it behaves this way would allow to use a - * cache of previously computed values (let's 10 cached values per sfb) - * that would probably provide a noticeable speedup - */ - prev_data_use = (prevNoise != null && (codInfo.global_gain == prevNoise.global_gain)); - - if (codInfo.block_type == Encoder.SHORT_TYPE) - sfbmax = 38; - else - sfbmax = 21; - - for (sfb = 0; sfb <= sfbmax; sfb++) { - int step = -1; - - if (prev_data_use || codInfo.block_type == Encoder.NORM_TYPE) { - step = codInfo.global_gain - - ((codInfo.scalefac[sfb] + (codInfo.preflag != 0 ? qupvt.pretab[sfb] - : 0)) << (codInfo.scalefac_scale + 1)) - - codInfo.subblock_gain[codInfo.window[sfb]] * 8; - } - assert (codInfo.width[sfb] >= 0); - if (prev_data_use && (prevNoise.step[sfb] == step)) { - /* - * do not recompute this part, but compute accumulated lines - */ - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate = 0; - } - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - } - } else { /* should compute this part */ - int l = codInfo.width[sfb]; - - if ((j + codInfo.width[sfb]) > codInfo.max_nonzero_coeff) { - /* do not compute upper zero part */ - int usefullsize; - usefullsize = codInfo.max_nonzero_coeff - j + 1; - Arrays.fill(pi, codInfo.max_nonzero_coeff, 576, 0); - l = usefullsize; - - if (l < 0) { - l = 0; - } - - /* no need to compute higher sfb values */ - sfb = sfbmax + 1; - } - - /* accumulate lines to quantize */ - if (0 == accumulate && 0 == accumulate01) { - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - if (prevNoise != null && prevNoise.sfb_count1 > 0 - && sfb >= prevNoise.sfb_count1 - && prevNoise.step[sfb] > 0 - && step >= prevNoise.step[sfb]) { - - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate = 0; - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - accumulate01 += l; - } else { - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - acc_iData = iData; - acc_iDataPos = iDataPos; - acc_xp = xp; - acc_xpPos = xpPos; - } - accumulate += l; - } - - if (l <= 0) { - /* - * rh: 20040215 may happen due to "prev_data_use" - * optimization - */ - if (accumulate01 != 0) { - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate01 = 0; - } - if (accumulate != 0) { - quantize_lines_xrpow(accumulate, istep, acc_xp, - acc_xpPos, acc_iData, acc_iDataPos); - accumulate = 0; - } - - break; /* ends for-loop */ - } - } - if (sfb <= sfbmax) { - iDataPos += codInfo.width[sfb]; - xpPos += codInfo.width[sfb]; - j += codInfo.width[sfb]; - } - } - if (accumulate != 0) { /* last data part */ - quantize_lines_xrpow(accumulate, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate = 0; - } - if (accumulate01 != 0) { /* last data part */ - quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_xpPos, - acc_iData, acc_iDataPos); - accumulate01 = 0; - } - - } - - /** - * ix_max - */ - private int ix_max(final int[] ix, int ixPos, final int endPos) { - int max1 = 0, max2 = 0; - - do { - final int x1 = ix[ixPos++]; - final int x2 = ix[ixPos++]; - if (max1 < x1) - max1 = x1; - - if (max2 < x2) - max2 = x2; - } while (ixPos < endPos); - if (max1 < max2) - max1 = max2; - return max1; - } - - private int count_bit_ESC(final int[] ix, int ixPos, final int end, int t1, - final int t2, Bits s) { - /* ESC-table is used */ - final int linbits = Tables.ht[t1].xlen * 65536 + Tables.ht[t2].xlen; - int sum = 0, sum2; - - do { - int x = ix[ixPos++]; - int y = ix[ixPos++]; - - if (x != 0) { - if (x > 14) { - x = 15; - sum += linbits; - } - x *= 16; - } - - if (y != 0) { - if (y > 14) { - y = 15; - sum += linbits; - } - x += y; - } - - sum += Tables.largetbl[x]; - } while (ixPos < end); - - sum2 = sum & 0xffff; - sum >>= 16; - - if (sum > sum2) { - sum = sum2; - t1 = t2; - } - - s.bits += sum; - return t1; - } - - private int count_bit_noESC(final int[] ix, int ixPos, final int end, Bits s) { - /* No ESC-words */ - int sum1 = 0; - final int[] hlen1 = Tables.ht[1].hlen; - - do { - final int x = ix[ixPos + 0] * 2 + ix[ixPos + 1]; - ixPos += 2; - sum1 += hlen1[x]; - } while (ixPos < end); - - s.bits += sum1; - return 1; - } - - private int count_bit_noESC_from2(final int[] ix, int ixPos, final int end, - int t1, Bits s) { - /* No ESC-words */ - int sum = 0, sum2; - final int xlen = Tables.ht[t1].xlen; - final int[] hlen; - if (t1 == 2) - hlen = Tables.table23; - else - hlen = Tables.table56; - - do { - final int x = ix[ixPos + 0] * xlen + ix[ixPos + 1]; - ixPos += 2; - sum += hlen[x]; - } while (ixPos < end); - - sum2 = sum & 0xffff; - sum >>= 16; - - if (sum > sum2) { - sum = sum2; - t1++; - } - - s.bits += sum; - return t1; - } - - private int count_bit_noESC_from3(final int[] ix, int ixPos, final int end, - int t1, Bits s) { - /* No ESC-words */ - int sum1 = 0; - int sum2 = 0; - int sum3 = 0; - final int xlen = Tables.ht[t1].xlen; - final int[] hlen1 = Tables.ht[t1].hlen; - final int[] hlen2 = Tables.ht[t1 + 1].hlen; - final int[] hlen3 = Tables.ht[t1 + 2].hlen; - - do { - final int x = ix[ixPos + 0] * xlen + ix[ixPos + 1]; - ixPos += 2; - sum1 += hlen1[x]; - sum2 += hlen2[x]; - sum3 += hlen3[x]; - } while (ixPos < end); - - int t = t1; - if (sum1 > sum2) { - sum1 = sum2; - t++; - } - if (sum1 > sum3) { - sum1 = sum3; - t = t1 + 2; - } - s.bits += sum1; - - return t; - } - - /*************************************************************************/ - /* choose table */ - /*************************************************************************/ - - private final static int huf_tbl_noESC[] = { 1, 2, 5, 7, 7, 10, 10, 13, 13, - 13, 13, 13, 13, 13, 13 }; - - /** - * Choose the Huffman table that will encode ix[begin..end] with the fewest - * bits. - * - * Note: This code contains knowledge about the sizes and characteristics of - * the Huffman tables as defined in the IS (Table B.7), and will not work - * with any arbitrary tables. - */ - private int choose_table(final int[] ix, final int ixPos, final int endPos, - final Bits s) { - int max = ix_max(ix, ixPos, endPos); - - switch (max) { - case 0: - return max; - - case 1: - return count_bit_noESC(ix, ixPos, endPos, s); - - case 2: - case 3: - return count_bit_noESC_from2(ix, ixPos, endPos, - huf_tbl_noESC[max - 1], s); - - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - return count_bit_noESC_from3(ix, ixPos, endPos, - huf_tbl_noESC[max - 1], s); - - default: - /* try tables with linbits */ - if (max > QuantizePVT.IXMAX_VAL) { - s.bits = QuantizePVT.LARGE_BITS; - return -1; - } - max -= 15; - int choice2; - for (choice2 = 24; choice2 < 32; choice2++) { - if (Tables.ht[choice2].linmax >= max) { - break; - } - } - int choice; - for (choice = choice2 - 8; choice < 24; choice++) { - if (Tables.ht[choice].linmax >= max) { - break; - } - } - return count_bit_ESC(ix, ixPos, endPos, choice, choice2, s); - } - } - - /** - * count_bit - */ - public int noquant_count_bits(final LameInternalFlags gfc, - final GrInfo gi, CalcNoiseData prev_noise) { - final int[] ix = gi.l3_enc; - - int i = Math.min(576, ((gi.max_nonzero_coeff + 2) >> 1) << 1); - - if (prev_noise != null) - prev_noise.sfb_count1 = 0; - - /* Determine count1 region */ - for (; i > 1; i -= 2) - if ((ix[i - 1] | ix[i - 2]) != 0) - break; - gi.count1 = i; - - /* Determines the number of bits to encode the quadruples. */ - int a1 = 0; - int a2 = 0; - for (; i > 3; i -= 4) { - int p; - /* hack to check if all values <= 1 */ - if ((((long) ix[i - 1] | (long) ix[i - 2] | (long) ix[i - 3] | (long) ix[i - 4]) & 0xffffffffL) > 1L) - break; - - p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 + ix[i - 1]; - a1 += Tables.t32l[p]; - a2 += Tables.t33l[p]; - } - - int bits = a1; - gi.count1table_select = 0; - if (a1 > a2) { - bits = a2; - gi.count1table_select = 1; - } - - gi.count1bits = bits; - gi.big_values = i; - if (i == 0) - return bits; - - if (gi.block_type == Encoder.SHORT_TYPE) { - a1 = 3 * gfc.scalefac_band.s[3]; - if (a1 > gi.big_values) - a1 = gi.big_values; - a2 = gi.big_values; - - } else if (gi.block_type == Encoder.NORM_TYPE) { - assert (i <= 576); /* bv_scf has 576 entries (0..575) */ - a1 = gi.region0_count = gfc.bv_scf[i - 2]; - a2 = gi.region1_count = gfc.bv_scf[i - 1]; - - assert (a1 + a2 + 2 < Encoder.SBPSY_l); - a2 = gfc.scalefac_band.l[a1 + a2 + 2]; - a1 = gfc.scalefac_band.l[a1 + 1]; - if (a2 < i) { - Bits bi = new Bits(bits); - gi.table_select[2] = choose_table(ix, a2, i, bi); - bits = bi.bits; - } - } else { - gi.region0_count = 7; - /* gi.region1_count = SBPSY_l - 7 - 1; */ - gi.region1_count = Encoder.SBMAX_l - 1 - 7 - 1; - a1 = gfc.scalefac_band.l[7 + 1]; - a2 = i; - if (a1 > a2) { - a1 = a2; - } - } - - /* have to allow for the case when bigvalues < region0 < region1 */ - /* (and region0, region1 are ignored) */ - a1 = Math.min(a1, i); - a2 = Math.min(a2, i); - - assert (a1 >= 0); - assert (a2 >= 0); - - /* Count the number of bits necessary to code the bigvalues region. */ - if (0 < a1) { - Bits bi = new Bits(bits); - gi.table_select[0] = choose_table(ix, 0, a1, bi); - bits = bi.bits; - } - if (a1 < a2) { - Bits bi = new Bits(bits); - gi.table_select[1] = choose_table(ix, a1, a2, bi); - bits = bi.bits; - } - if (gfc.use_best_huffman == 2) { - gi.part2_3_length = bits; - best_huffman_divide(gfc, gi); - bits = gi.part2_3_length; - } - - if (prev_noise != null) { - if (gi.block_type == Encoder.NORM_TYPE) { - int sfb = 0; - while (gfc.scalefac_band.l[sfb] < gi.big_values) { - sfb++; - } - prev_noise.sfb_count1 = sfb; - } - } - - return bits; - } - - public int count_bits(final LameInternalFlags gfc, final float[] xr, - final GrInfo gi, CalcNoiseData prev_noise) { - final int[] ix = gi.l3_enc; - - /* since quantize_xrpow uses table lookup, we need to check this first: */ - final float w = (QuantizePVT.IXMAX_VAL) / qupvt.IPOW20(gi.global_gain); - - if (gi.xrpow_max > w) - return QuantizePVT.LARGE_BITS; - - quantize_xrpow(xr, ix, qupvt.IPOW20(gi.global_gain), gi, prev_noise); - - if ((gfc.substep_shaping & 2) != 0) { - int j = 0; - /* 0.634521682242439 = 0.5946*2**(.5*0.1875) */ - final int gain = gi.global_gain + gi.scalefac_scale; - final float roundfac = 0.634521682242439f / qupvt.IPOW20(gain); - for (int sfb = 0; sfb < gi.sfbmax; sfb++) { - final int width = gi.width[sfb]; - assert (width >= 0); - if (0 == gfc.pseudohalf[sfb]) { - j += width; - } else { - int k; - for (k = j, j += width; k < j; ++k) { - ix[k] = (xr[k] >= roundfac) ? ix[k] : 0; - } - } - } - } - return noquant_count_bits(gfc, gi, prev_noise); - } - - /** - * re-calculate the best scalefac_compress using scfsi the saved bits are - * kept in the bit reservoir. - */ - private void recalc_divide_init(final LameInternalFlags gfc, - final GrInfo cod_info, final int[] ix, int r01_bits[], - int r01_div[], int r0_tbl[], int r1_tbl[]) { - int bigv = cod_info.big_values; - - for (int r0 = 0; r0 <= 7 + 15; r0++) { - r01_bits[r0] = QuantizePVT.LARGE_BITS; - } - - for (int r0 = 0; r0 < 16; r0++) { - final int a1 = gfc.scalefac_band.l[r0 + 1]; - if (a1 >= bigv) - break; - int r0bits = 0; - Bits bi = new Bits(r0bits); - int r0t = choose_table(ix, 0, a1, bi); - r0bits = bi.bits; - - for (int r1 = 0; r1 < 8; r1++) { - final int a2 = gfc.scalefac_band.l[r0 + r1 + 2]; - if (a2 >= bigv) - break; - - int bits = r0bits; - bi = new Bits(bits); - int r1t = choose_table(ix, a1, a2, bi); - bits = bi.bits; - if (r01_bits[r0 + r1] > bits) { - r01_bits[r0 + r1] = bits; - r01_div[r0 + r1] = r0; - r0_tbl[r0 + r1] = r0t; - r1_tbl[r0 + r1] = r1t; - } - } - } - } - - private void recalc_divide_sub(final LameInternalFlags gfc, - final GrInfo cod_info2, GrInfo gi, final int[] ix, - final int r01_bits[], final int r01_div[], final int r0_tbl[], - final int r1_tbl[]) { - int bigv = cod_info2.big_values; - - for (int r2 = 2; r2 < Encoder.SBMAX_l + 1; r2++) { - int a2 = gfc.scalefac_band.l[r2]; - if (a2 >= bigv) - break; - - int bits = r01_bits[r2 - 2] + cod_info2.count1bits; - if (gi.part2_3_length <= bits) - break; - - Bits bi = new Bits(bits); - int r2t = choose_table(ix, a2, bigv, bi); - bits = bi.bits; - if (gi.part2_3_length <= bits) - continue; - - gi.assign(cod_info2); - gi.part2_3_length = bits; - gi.region0_count = r01_div[r2 - 2]; - gi.region1_count = r2 - 2 - r01_div[r2 - 2]; - gi.table_select[0] = r0_tbl[r2 - 2]; - gi.table_select[1] = r1_tbl[r2 - 2]; - gi.table_select[2] = r2t; - } - } - - public void best_huffman_divide(final LameInternalFlags gfc, - GrInfo gi) { - GrInfo cod_info2 = new GrInfo(); - final int[] ix = gi.l3_enc; - - int r01_bits[] = new int[7 + 15 + 1]; - int r01_div[] = new int[7 + 15 + 1]; - int r0_tbl[] = new int[7 + 15 + 1]; - int r1_tbl[] = new int[7 + 15 + 1]; - - /* SHORT BLOCK stuff fails for MPEG2 */ - if (gi.block_type == Encoder.SHORT_TYPE && gfc.mode_gr == 1) - return; - - cod_info2.assign(gi); - if (gi.block_type == Encoder.NORM_TYPE) { - recalc_divide_init(gfc, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl); - recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, - r0_tbl, r1_tbl); - } - - int i = cod_info2.big_values; - if (i == 0 || (ix[i - 2] | ix[i - 1]) > 1) - return; - - i = gi.count1 + 2; - if (i > 576) - return; - - /* Determines the number of bits to encode the quadruples. */ - cod_info2.assign(gi); - cod_info2.count1 = i; - int a1 = 0; - int a2 = 0; - - assert (i <= 576); - - for (; i > cod_info2.big_values; i -= 4) { - final int p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 - + ix[i - 1]; - a1 += Tables.t32l[p]; - a2 += Tables.t33l[p]; - } - cod_info2.big_values = i; - - cod_info2.count1table_select = 0; - if (a1 > a2) { - a1 = a2; - cod_info2.count1table_select = 1; - } - - cod_info2.count1bits = a1; - - if (cod_info2.block_type == Encoder.NORM_TYPE) - recalc_divide_sub(gfc, cod_info2, gi, ix, r01_bits, r01_div, - r0_tbl, r1_tbl); - else { - /* Count the number of bits necessary to code the bigvalues region. */ - cod_info2.part2_3_length = a1; - a1 = gfc.scalefac_band.l[7 + 1]; - if (a1 > i) { - a1 = i; - } - if (a1 > 0) { - Bits bi = new Bits(cod_info2.part2_3_length); - cod_info2.table_select[0] = choose_table(ix, 0, a1, bi); - cod_info2.part2_3_length = bi.bits; - } - if (i > a1) { - Bits bi = new Bits(cod_info2.part2_3_length); - cod_info2.table_select[1] = choose_table(ix, a1, i, bi); - cod_info2.part2_3_length = bi.bits; - } - if (gi.part2_3_length > cod_info2.part2_3_length) - gi.assign(cod_info2); - } - } - - private static final int slen1_n[] = { 1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, - 8, 8, 16, 16 }; - private static final int slen2_n[] = { 1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, - 4, 8, 4, 8 }; - public static final int slen1_tab[] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, - 3, 3, 4, 4 }; - public static final int slen2_tab[] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, - 2, 3, 2, 3 }; - - private void scfsi_calc(int ch, final IIISideInfo l3_side) { - int sfb; - final GrInfo gi = l3_side.tt[1][ch]; - final GrInfo g0 = l3_side.tt[0][ch]; - - for (int i = 0; i < Tables.scfsi_band.length - 1; i++) { - for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) { - if (g0.scalefac[sfb] != gi.scalefac[sfb] - && gi.scalefac[sfb] >= 0) - break; - } - if (sfb == Tables.scfsi_band[i + 1]) { - for (sfb = Tables.scfsi_band[i]; sfb < Tables.scfsi_band[i + 1]; sfb++) { - gi.scalefac[sfb] = -1; - } - l3_side.scfsi[ch][i] = 1; - } - } - - int s1 = 0; - int c1 = 0; - for (sfb = 0; sfb < 11; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - c1++; - if (s1 < gi.scalefac[sfb]) - s1 = gi.scalefac[sfb]; - } - - int s2 = 0; - int c2 = 0; - for (; sfb < Encoder.SBPSY_l; sfb++) { - if (gi.scalefac[sfb] == -1) - continue; - c2++; - if (s2 < gi.scalefac[sfb]) - s2 = gi.scalefac[sfb]; - } - - for (int i = 0; i < 16; i++) { - if (s1 < slen1_n[i] && s2 < slen2_n[i]) { - final int c = slen1_tab[i] * c1 + slen2_tab[i] * c2; - if (gi.part2_length > c) { - gi.part2_length = c; - gi.scalefac_compress = i; - } - } - } - } - - /** - * Find the optimal way to store the scalefactors. Only call this routine - * after final scalefactors have been chosen and the channel/granule will - * not be re-encoded. - */ - public void best_scalefac_store(final LameInternalFlags gfc, final int gr, - final int ch, final IIISideInfo l3_side) { - /* use scalefac_scale if we can */ - final GrInfo gi = l3_side.tt[gr][ch]; - int sfb, i, j, l; - int recalc = 0; - - /* - * remove scalefacs from bands with ix=0. This idea comes from the AAC - * ISO docs. added mt 3/00 - */ - /* check if l3_enc=0 */ - j = 0; - for (sfb = 0; sfb < gi.sfbmax; sfb++) { - final int width = gi.width[sfb]; - assert (width >= 0); - j += width; - for (l = -width; l < 0; l++) { - if (gi.l3_enc[l + j] != 0) - break; - } - if (l == 0) - gi.scalefac[sfb] = recalc = -2; /* anything goes. */ - /* - * only best_scalefac_store and calc_scfsi know--and only they - * should know--about the magic number -2. - */ - } - - if (0 == gi.scalefac_scale && 0 == gi.preflag) { - int s = 0; - for (sfb = 0; sfb < gi.sfbmax; sfb++) - if (gi.scalefac[sfb] > 0) - s |= gi.scalefac[sfb]; - - if (0 == (s & 1) && s != 0) { - for (sfb = 0; sfb < gi.sfbmax; sfb++) - if (gi.scalefac[sfb] > 0) - gi.scalefac[sfb] >>= 1; - - gi.scalefac_scale = recalc = 1; - } - } - - if (0 == gi.preflag && gi.block_type != Encoder.SHORT_TYPE - && gfc.mode_gr == 2) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (gi.scalefac[sfb] < qupvt.pretab[sfb] - && gi.scalefac[sfb] != -2) - break; - if (sfb == Encoder.SBPSY_l) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (gi.scalefac[sfb] > 0) - gi.scalefac[sfb] -= qupvt.pretab[sfb]; - - gi.preflag = recalc = 1; - } - } - - for (i = 0; i < 4; i++) - l3_side.scfsi[ch][i] = 0; - - if (gfc.mode_gr == 2 && gr == 1 - && l3_side.tt[0][ch].block_type != Encoder.SHORT_TYPE - && l3_side.tt[1][ch].block_type != Encoder.SHORT_TYPE) { - scfsi_calc(ch, l3_side); - recalc = 0; - } - for (sfb = 0; sfb < gi.sfbmax; sfb++) { - if (gi.scalefac[sfb] == -2) { - gi.scalefac[sfb] = 0; /* if anything goes, then 0 is a good choice */ - } - } - if (recalc != 0) { - if (gfc.mode_gr == 2) { - scale_bitcount(gi); - } else { - scale_bitcount_lsf(gfc, gi); - } - } - } - - private boolean all_scalefactors_not_negative(final int[] scalefac, int n) { - for (int i = 0; i < n; ++i) { - if (scalefac[i] < 0) - return false; - } - return true; - } - - /** - * number of bits used to encode scalefacs. - * - * 18*slen1_tab[i] + 18*slen2_tab[i] - */ - private static final int scale_short[] = { 0, 18, 36, 54, 54, 36, 54, 72, - 54, 72, 90, 72, 90, 108, 108, 126 }; - - /** - * number of bits used to encode scalefacs. - * - * 17*slen1_tab[i] + 18*slen2_tab[i] - */ - private static final int scale_mixed[] = { 0, 18, 36, 54, 51, 35, 53, 71, - 52, 70, 88, 69, 87, 105, 104, 122 }; - - /** - * number of bits used to encode scalefacs. - * - * 11*slen1_tab[i] + 10*slen2_tab[i] - */ - private static final int scale_long[] = { 0, 10, 20, 30, 33, 21, 31, 41, 32, 42, - 52, 43, 53, 63, 64, 74 }; - - /** - * Also calculates the number of bits necessary to code the scalefactors. - */ - public boolean scale_bitcount(final GrInfo cod_info) { - int k, sfb, max_slen1 = 0, max_slen2 = 0; - - /* maximum values */ - int[] tab; - final int[] scalefac = cod_info.scalefac; - - assert (all_scalefactors_not_negative(scalefac, cod_info.sfbmax)); - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - tab = scale_short; - if (cod_info.mixed_block_flag != 0) - tab = scale_mixed; - } else { /* block_type == 1,2,or 3 */ - tab = scale_long; - if (0 == cod_info.preflag) { - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - if (scalefac[sfb] < qupvt.pretab[sfb]) - break; - - if (sfb == Encoder.SBPSY_l) { - cod_info.preflag = 1; - for (sfb = 11; sfb < Encoder.SBPSY_l; sfb++) - scalefac[sfb] -= qupvt.pretab[sfb]; - } - } - } - - for (sfb = 0; sfb < cod_info.sfbdivide; sfb++) - if (max_slen1 < scalefac[sfb]) - max_slen1 = scalefac[sfb]; - - for (; sfb < cod_info.sfbmax; sfb++) - if (max_slen2 < scalefac[sfb]) - max_slen2 = scalefac[sfb]; - - /* - * from Takehiro TOMINAGA <tominaga@isoternet.org> 10/99 loop over *all* - * posible values of scalefac_compress to find the one which uses the - * smallest number of bits. ISO would stop at first valid index - */ - cod_info.part2_length = QuantizePVT.LARGE_BITS; - for (k = 0; k < 16; k++) { - if (max_slen1 < slen1_n[k] && max_slen2 < slen2_n[k] - && cod_info.part2_length > tab[k]) { - cod_info.part2_length = tab[k]; - cod_info.scalefac_compress = k; - } - } - return cod_info.part2_length == QuantizePVT.LARGE_BITS; - } - - /** - * table of largest scalefactor values for MPEG2 - */ - private static final int max_range_sfac_tab[][] = { { 15, 15, 7, 7 }, - { 15, 15, 7, 0 }, { 7, 3, 0, 0 }, { 15, 31, 31, 0 }, - { 7, 7, 7, 0 }, { 3, 3, 0, 0 } }; - - /** - * Also counts the number of bits to encode the scalefacs but for MPEG 2 - * Lower sampling frequencies (24, 22.05 and 16 kHz.) - * - * This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS, - * "Audio Decoding Layer III" - */ - public boolean scale_bitcount_lsf(final LameInternalFlags gfc, - final GrInfo cod_info) { - int table_number, row_in_table, partition, nr_sfb, window; - boolean over; - int i, sfb, max_sfac[] = new int[4]; - final int[] partition_table; - final int[] scalefac = cod_info.scalefac; - - /* - * Set partition table. Note that should try to use table one, but do - * not yet... - */ - if (cod_info.preflag != 0) - table_number = 2; - else - table_number = 0; - - for (i = 0; i < 4; i++) - max_sfac[i] = 0; - - if (cod_info.block_type == Encoder.SHORT_TYPE) { - row_in_table = 1; - partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (sfb = 0, partition = 0; partition < 4; partition++) { - nr_sfb = partition_table[partition] / 3; - for (i = 0; i < nr_sfb; i++, sfb++) - for (window = 0; window < 3; window++) - if (scalefac[sfb * 3 + window] > max_sfac[partition]) - max_sfac[partition] = scalefac[sfb * 3 + window]; - } - } else { - row_in_table = 0; - partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (sfb = 0, partition = 0; partition < 4; partition++) { - nr_sfb = partition_table[partition]; - for (i = 0; i < nr_sfb; i++, sfb++) - if (scalefac[sfb] > max_sfac[partition]) - max_sfac[partition] = scalefac[sfb]; - } - } - - for (over = false, partition = 0; partition < 4; partition++) { - if (max_sfac[partition] > max_range_sfac_tab[table_number][partition]) - over = true; - } - if (!over) { - - int slen1, slen2, slen3, slen4; - - cod_info.sfb_partition_table = qupvt.nr_of_sfb_block[table_number][row_in_table]; - for (partition = 0; partition < 4; partition++) - cod_info.slen[partition] = log2tab[max_sfac[partition]]; - - /* set scalefac_compress */ - slen1 = cod_info.slen[0]; - slen2 = cod_info.slen[1]; - slen3 = cod_info.slen[2]; - slen4 = cod_info.slen[3]; - - switch (table_number) { - case 0: - cod_info.scalefac_compress = (((slen1 * 5) + slen2) << 4) - + (slen3 << 2) + slen4; - break; - - case 1: - cod_info.scalefac_compress = 400 + (((slen1 * 5) + slen2) << 2) - + slen3; - break; - - case 2: - cod_info.scalefac_compress = 500 + (slen1 * 3) + slen2; - break; - - default: - System.err.printf("intensity stereo not implemented yet\n"); - break; - } - } - if (!over) { - assert (cod_info.sfb_partition_table != null); - cod_info.part2_length = 0; - for (partition = 0; partition < 4; partition++) - cod_info.part2_length += cod_info.slen[partition] - * cod_info.sfb_partition_table[partition]; - } - return over; - } - - /* - * Since no bands have been over-amplified, we can set scalefac_compress and - * slen[] for the formatter - */ - private static final int log2tab[] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, - 4, 4, 4, 4 }; - - public void huffman_init(final LameInternalFlags gfc) { - for (int i = 2; i <= 576; i += 2) { - int scfb_anz = 0, bv_index; - while (gfc.scalefac_band.l[++scfb_anz] < i) - ; - - bv_index = subdv_table[scfb_anz][0]; // .region0_count - while (gfc.scalefac_band.l[bv_index + 1] > i) - bv_index--; - - if (bv_index < 0) { - /* - * this is an indication that everything is going to be encoded - * as region0: bigvalues < region0 < region1 so lets set - * region0, region1 to some value larger than bigvalues - */ - bv_index = subdv_table[scfb_anz][0]; // .region0_count - } - - gfc.bv_scf[i - 2] = bv_index; - - bv_index = subdv_table[scfb_anz][1]; // .region1_count - while (gfc.scalefac_band.l[bv_index + gfc.bv_scf[i - 2] + 2] > i) - bv_index--; - - if (bv_index < 0) { - bv_index = subdv_table[scfb_anz][1]; // .region1_count - } - - gfc.bv_scf[i - 1] = bv_index; - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Util.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Util.java deleted file mode 100644 index 86c6d1d7e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Util.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * lame utility library include file - * - * Copyright (c) 1999 Albert L Faber - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Util.java,v 1.16 2011/05/24 21:27:00 kenchis Exp $ */ - -package mp3; - - -public class Util { - - public static final float SQRT2 = 1.41421356237309504880f; - - public static float FAST_LOG10(float x) { - return (float) Math.log10(x); - } - public static float FAST_LOG10_X(float x,float y) { - return (float) Math.log10(x)*y; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRNewIterationLoop.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRNewIterationLoop.java deleted file mode 100644 index 4d1518c64..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRNewIterationLoop.java +++ /dev/null @@ -1,97 +0,0 @@ -package mp3; - -public final class VBRNewIterationLoop implements IIterationLoop { - - /** - * - */ - private final Quantize quantize; - - /** - * @param quantize - */ - VBRNewIterationLoop(Quantize quantize) { - this.quantize = quantize; - } - - public final void iteration_loop(final LameGlobalFlags gfp, - final float[][] pe, final float[] ms_ener_ratio, - final III_psy_ratio[][] ratio) { - LameInternalFlags gfc = gfp.internal_flags; - float l3_xmin[][][] = new float[2][2][L3Side.SFBMAX]; - - float xrpow[][][] = new float[2][2][576]; - int frameBits[] = new int[15]; - int max_bits[][] = new int[2][2]; - final IIISideInfo l3_side = gfc.l3_side; - - int analog_silence = this.quantize.VBR_new_prepare(gfp, pe, ratio, l3_xmin, - frameBits, max_bits); - - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo cod_info = l3_side.tt[gr][ch]; - - /* - * init_outer_loop sets up cod_info, scalefac and xrpow - */ - if (!this.quantize.init_xrpow(gfc, cod_info, xrpow[gr][ch])) { - /* silent granule needs no bits */ - max_bits[gr][ch] = 0; - } - } /* for ch */ - } /* for gr */ - - /* - * quantize granules with lowest possible number of bits - */ - - int used_bits = this.quantize.vbr.VBR_encode_frame(gfc, xrpow, l3_xmin, max_bits); - - if (!gfp.free_format) { - /* - * find lowest bitrate able to hold used bits - */ - if (analog_silence != 0 && 0 == gfp.VBR_hard_min) { - /* - * we detected analog silence and the user did not specify - * any hard framesize limit, so start with smallest possible - * frame - */ - gfc.bitrate_index = 1; - } else { - gfc.bitrate_index = gfc.VBR_min_bitrate; - } - - for (; gfc.bitrate_index < gfc.VBR_max_bitrate; gfc.bitrate_index++) { - if (used_bits <= frameBits[gfc.bitrate_index]) - break; - } - if (gfc.bitrate_index > gfc.VBR_max_bitrate) { - gfc.bitrate_index = gfc.VBR_max_bitrate; - } - } else { - gfc.bitrate_index = 0; - } - if (used_bits <= frameBits[gfc.bitrate_index]) { - /* update Reservoire status */ - int mean_bits = 0, fullframebits; - MeanBits mb = new MeanBits(mean_bits); - fullframebits = this.quantize.rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - assert (used_bits <= fullframebits); - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo cod_info = l3_side.tt[gr][ch]; - this.quantize.rv.ResvAdjust(gfc, cod_info); - } - } - this.quantize.rv.ResvFrameEnd(gfc, mean_bits); - } else { - /* - * SHOULD NOT HAPPEN INTERNAL ERROR - */ - throw new RuntimeException("INTERNAL ERROR IN VBR NEW CODE, please send bug report"); - } - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBROldIterationLoop.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBROldIterationLoop.java deleted file mode 100644 index 2346adab7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBROldIterationLoop.java +++ /dev/null @@ -1,119 +0,0 @@ -package mp3; - -/** - * tries to find out how many bits are needed for each granule and channel - * to get an acceptable quantization. An appropriate bitrate will then be - * choosed for quantization. rh 8/99 - * - * Robert Hegemann 2000-09-06 rewrite - * - * @author Ken - * - */ -public final class VBROldIterationLoop implements IIterationLoop { - - /** - * - */ - private final Quantize quantize; - - /** - * @param quantize - */ - VBROldIterationLoop(Quantize quantize) { - this.quantize = quantize; - } - - public void iteration_loop(LameGlobalFlags gfp, float[][] pe, - float[] ms_ener_ratio, III_psy_ratio[][] ratio) { - final LameInternalFlags gfc = gfp.internal_flags; - float l3_xmin[][][] = new float[2][2][L3Side.SFBMAX]; - - float xrpow[] = new float[576]; - int bands[][] = new int[2][2]; - int frameBits[] = new int[15]; - int min_bits[][] = new int[2][2], max_bits[][] = new int[2][2]; - int mean_bits = 0; - final IIISideInfo l3_side = gfc.l3_side; - - int analog_silence = this.quantize.VBR_old_prepare(gfp, pe, ms_ener_ratio, ratio, - l3_xmin, frameBits, min_bits, max_bits, bands); - - /*---------------------------------*/ - for (;;) { - /* - * quantize granules with lowest possible number of bits - */ - int used_bits = 0; - - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - final GrInfo cod_info = l3_side.tt[gr][ch]; - - /* - * init_outer_loop sets up cod_info, scalefac and xrpow - */ - boolean ret = this.quantize.init_xrpow(gfc, cod_info, xrpow); - if (!ret || max_bits[gr][ch] == 0) { - /* - * xr contains no energy l3_enc, our encoding data, - * will be quantized to zero - */ - continue; /* with next channel */ - } - - this.quantize.VBR_encode_granule(gfp, cod_info, l3_xmin[gr][ch], - xrpow, ch, min_bits[gr][ch], max_bits[gr][ch]); - - /* - * do the 'substep shaping' - */ - if ((gfc.substep_shaping & 1) != 0) { - this.quantize.trancate_smallspectrums(gfc, l3_side.tt[gr][ch], - l3_xmin[gr][ch], xrpow); - } - - int usedB = cod_info.part2_3_length - + cod_info.part2_length; - used_bits += usedB; - } /* for ch */ - } /* for gr */ - - /* - * find lowest bitrate able to hold used bits - */ - if (analog_silence != 0 && 0 == gfp.VBR_hard_min) - /* - * we detected analog silence and the user did not specify - * any hard framesize limit, so start with smallest possible - * frame - */ - gfc.bitrate_index = 1; - else - gfc.bitrate_index = gfc.VBR_min_bitrate; - - for (; gfc.bitrate_index < gfc.VBR_max_bitrate; gfc.bitrate_index++) { - if (used_bits <= frameBits[gfc.bitrate_index]) - break; - } - MeanBits mb = new MeanBits(mean_bits); - int bits = this.quantize.rv.ResvFrameBegin(gfp, mb); - mean_bits = mb.bits; - - if (used_bits <= bits) - break; - - this.quantize.bitpressure_strategy(gfc, l3_xmin, min_bits, max_bits); - - } - /* breaks adjusted */ - /*--------------------------------------*/ - - for (int gr = 0; gr < gfc.mode_gr; gr++) { - for (int ch = 0; ch < gfc.channels_out; ch++) { - this.quantize.iteration_finish_one(gfc, gr, ch); - } /* for ch */ - } /* for gr */ - this.quantize.rv.ResvFrameEnd(gfc, mean_bits); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRPresets.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRPresets.java deleted file mode 100644 index 63656e4f4..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRPresets.java +++ /dev/null @@ -1,44 +0,0 @@ -package mp3; - -class VBRPresets { - public VBRPresets(final int qual, final int comp, final int compS, - final int y, final float shThreshold, final float shThresholdS, - final float adj, final float adjShort, final float lower, - final float curve, final float sens, final float inter, - final int joint, final int mod, final float fix) { - vbr_q = qual; - quant_comp = comp; - quant_comp_s = compS; - expY = y; - st_lrm = shThreshold; - st_s = shThresholdS; - masking_adj = adj; - masking_adj_short = adjShort; - ath_lower = lower; - ath_curve = curve; - ath_sensitivity = sens; - interch = inter; - safejoint = joint; - sfb21mod = mod; - msfix = fix; - } - - int vbr_q; - int quant_comp; - int quant_comp_s; - int expY; - /** - * short threshold - */ - float st_lrm; - float st_s; - float masking_adj; - float masking_adj_short; - float ath_lower; - float ath_curve; - float ath_sensitivity; - float interch; - int safejoint; - int sfb21mod; - float msfix; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRQuantize.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRQuantize.java deleted file mode 100644 index eada4eaa7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRQuantize.java +++ /dev/null @@ -1,1126 +0,0 @@ -/* - * MP3 quantization - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 2000-2007 Robert Hegemann - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: VBRQuantize.java,v 1.18 2011/08/27 18:57:12 kenchis Exp $ */ - -package mp3; - -import java.util.Arrays; - -public class VBRQuantize { - - QuantizePVT qupvt; - Takehiro tak; - - public final void setModules(QuantizePVT qupvt, Takehiro tk) { - this.qupvt = qupvt; - this.tak = tk; - } - - protected static class algo_t { - alloc_sf_f alloc; - float[] xr34orig; - LameInternalFlags gfc; - GrInfo cod_info; - int mingain_l; - int mingain_s[] = new int[3]; - } - - interface alloc_sf_f { - void alloc(final algo_t al, final int[] x, final int[] y, final int z); - } - - private float max_x34(final float[] xr34, int x34Pos, final int bw) { - float xfsf = 0; - int j = bw >> 1; - final int remaining = (j & 0x01); - - for (j >>= 1; j > 0; --j) { - if (xfsf < xr34[x34Pos + 0]) { - xfsf = xr34[x34Pos + 0]; - } - if (xfsf < xr34[x34Pos + 1]) { - xfsf = xr34[x34Pos + 1]; - } - if (xfsf < xr34[x34Pos + 2]) { - xfsf = xr34[x34Pos + 2]; - } - if (xfsf < xr34[x34Pos + 3]) { - xfsf = xr34[x34Pos + 3]; - } - x34Pos += 4; - } - if (remaining != 0) { - if (xfsf < xr34[x34Pos + 0]) { - xfsf = xr34[x34Pos + 0]; - } - if (xfsf < xr34[x34Pos + 1]) { - xfsf = xr34[x34Pos + 1]; - } - } - return xfsf; - } - - private int findLowestScalefac(final float xr34) { - int sfOk = 255; - int sf = 128, delsf = 64; - for (int i = 0; i < 8; ++i) { - final float xfsf = qupvt.ipow20[sf] * xr34; - if (xfsf <= QuantizePVT.IXMAX_VAL) { - sfOk = sf; - sf -= delsf; - } else { - sf += delsf; - } - delsf >>= 1; - } - return sfOk; - } - - private int belowNoiseFloor(final float[] xr, int xrPos, float l3xmin, - final int bw) { - float sum = 0.0f; - for (int i = 0, j = bw; j > 0; ++i, --j) { - final float x = xr[xrPos + i]; - sum += x * x; - } - return (l3xmin - sum) >= -1E-20 ? 1 : 0; - } - - private void k_34_4(final double x[], final int l3[], final int l3Pos) { - assert (x[0] <= QuantizePVT.IXMAX_VAL && x[1] <= QuantizePVT.IXMAX_VAL - && x[2] <= QuantizePVT.IXMAX_VAL && x[3] <= QuantizePVT.IXMAX_VAL); - l3[l3Pos + 0] = (int) x[0]; - l3[l3Pos + 1] = (int) x[1]; - l3[l3Pos + 2] = (int) x[2]; - l3[l3Pos + 3] = (int) x[3]; - x[0] += qupvt.adj43[l3[l3Pos + 0]]; - x[1] += qupvt.adj43[l3[l3Pos + 1]]; - x[2] += qupvt.adj43[l3[l3Pos + 2]]; - x[3] += qupvt.adj43[l3[l3Pos + 3]]; - l3[l3Pos + 0] = (int) x[0]; - l3[l3Pos + 1] = (int) x[1]; - l3[l3Pos + 2] = (int) x[2]; - l3[l3Pos + 3] = (int) x[3]; - } - - private void k_34_2(final double x[], final int l3[], final int l3Pos) { - assert (x[0] <= QuantizePVT.IXMAX_VAL && x[1] <= QuantizePVT.IXMAX_VAL); - l3[l3Pos + 0] = (int) x[0]; - l3[l3Pos + 1] = (int) x[1]; - x[0] += qupvt.adj43[l3[l3Pos + 0]]; - x[1] += qupvt.adj43[l3[l3Pos + 1]]; - l3[l3Pos + 0] = (int) x[0]; - l3[l3Pos + 1] = (int) x[1]; - } - - private float calc_sfb_noise_x34(final float[] xr, final float[] xr34, - int xrPos, int bw, int sf) { - double x[] = new double[4]; - int l3[] = new int[4]; - final float sfpow = qupvt.pow20[sf + QuantizePVT.Q_MAX2]; - final float sfpow34 = qupvt.ipow20[sf]; - - float xfsf = 0; - int j = bw >> 1; - final int remaining = (j & 0x01); - - for (j >>= 1; j > 0; --j) { - x[0] = sfpow34 * xr34[xrPos + 0]; - x[1] = sfpow34 * xr34[xrPos + 1]; - x[2] = sfpow34 * xr34[xrPos + 2]; - x[3] = sfpow34 * xr34[xrPos + 3]; - - k_34_4(x, l3, 0); - - x[0] = Math.abs(xr[xrPos + 0]) - sfpow * qupvt.pow43[l3[0]]; - x[1] = Math.abs(xr[xrPos + 1]) - sfpow * qupvt.pow43[l3[1]]; - x[2] = Math.abs(xr[xrPos + 2]) - sfpow * qupvt.pow43[l3[2]]; - x[3] = Math.abs(xr[xrPos + 3]) - sfpow * qupvt.pow43[l3[3]]; - xfsf += (x[0] * x[0] + x[1] * x[1]) + (x[2] * x[2] + x[3] * x[3]); - - xrPos += 4; - } - if (remaining != 0) { - x[0] = sfpow34 * xr34[xrPos + 0]; - x[1] = sfpow34 * xr34[xrPos + 1]; - - k_34_2(x, l3, 0); - - x[0] = Math.abs(xr[xrPos + 0]) - sfpow * qupvt.pow43[l3[0]]; - x[1] = Math.abs(xr[xrPos + 1]) - sfpow * qupvt.pow43[l3[1]]; - xfsf += x[0] * x[0] + x[1] * x[1]; - } - return xfsf; - } - - protected static class CalcNoiseCache { - int valid; - float value; - }; - - private boolean tri_calc_sfb_noise_x34(final float[] xr, - final float[] xr34, final int xrPos, final float l3_xmin, - final int bw, final int sf, final CalcNoiseCache[] did_it) { - if (did_it[sf].valid == 0) { - did_it[sf].valid = 1; - did_it[sf].value = calc_sfb_noise_x34(xr, xr34, xrPos, bw, sf); - } - if (l3_xmin < did_it[sf].value) { - return true; - } - if (sf < 255) { - final int sf_x = sf + 1; - if (did_it[sf_x].valid == 0) { - did_it[sf_x].valid = 1; - did_it[sf_x].value = calc_sfb_noise_x34(xr, xr34, xrPos, bw, - sf_x); - } - if (l3_xmin < did_it[sf_x].value) { - return true; - } - } - if (sf > 0) { - final int sf_x = sf - 1; - if (did_it[sf_x].valid == 0) { - did_it[sf_x].valid = 1; - did_it[sf_x].value = calc_sfb_noise_x34(xr, xr34, xrPos, bw, - sf_x); - } - if (l3_xmin < did_it[sf_x].value) { - return true; - } - } - return false; - } - - /** - * the find_scalefac* routines calculate a quantization step size which - * would introduce as much noise as is allowed. The larger the step size the - * more quantization noise we'll get. The scalefactors are there to lower - * the global step size, allowing limited differences in quantization step - * sizes per band (shaping the noise). - */ - private int find_scalefac_x34(final float[] xr, final float[] xr34, - final int xrPos, final float l3_xmin, final int bw, final int sf_min) { - CalcNoiseCache did_it[] = new CalcNoiseCache[256]; - int sf = 128, sf_ok = 255, delsf = 128, seen_good_one = 0, i; - for (int j = 0; j < did_it.length; j++) { - did_it[j] = new CalcNoiseCache(); - } - for (i = 0; i < 8; ++i) { - delsf >>= 1; - if (sf <= sf_min) { - sf += delsf; - } else { - final boolean bad = tri_calc_sfb_noise_x34(xr, xr34, xrPos, - l3_xmin, bw, sf, did_it); - if (bad) { - /* distortion. try a smaller scalefactor */ - sf -= delsf; - } else { - sf_ok = sf; - sf += delsf; - seen_good_one = 1; - } - } - } - // returning a scalefac without distortion, if possible - if (seen_good_one > 0) { - return sf_ok; - } - if (sf <= sf_min) { - return sf_min; - } - return sf; - } - - /** - * - * calc_short_block_vbr_sf(), calc_long_block_vbr_sf() - * - * a variation for vbr-mtrh - * - * @author Mark Taylor 2000-??-?? - * @author Robert Hegemann 2000-10-25 made functions of it - */ - private int block_sf(final algo_t that, final float l3_xmin[], - final int vbrsf[], final int vbrsfmin[]) { - float max_xr34; - final float[] xr = that.cod_info.xr; - final float[] xr34_orig = that.xr34orig; - final int[] width = that.cod_info.width; - final int max_nonzero_coeff = that.cod_info.max_nonzero_coeff; - int maxsf = 0; - int sfb = 0; - int j = 0, i = 0; - final int psymax = that.cod_info.psymax; - - assert (that.cod_info.max_nonzero_coeff >= 0); - - that.mingain_l = 0; - that.mingain_s[0] = 0; - that.mingain_s[1] = 0; - that.mingain_s[2] = 0; - while (j <= max_nonzero_coeff) { - final int w = width[sfb]; - final int m = (max_nonzero_coeff - j + 1); - int l = w; - int m1, m2; - if (l > m) { - l = m; - } - max_xr34 = max_x34(xr34_orig, j, l); - - m1 = findLowestScalefac(max_xr34); - vbrsfmin[sfb] = m1; - if (that.mingain_l < m1) { - that.mingain_l = m1; - } - if (that.mingain_s[i] < m1) { - that.mingain_s[i] = m1; - } - if (++i > 2) { - i = 0; - } - if (sfb < psymax) { - if (belowNoiseFloor(xr, j, l3_xmin[sfb], l) == 0) { - m2 = find_scalefac_x34(xr, xr34_orig, j, l3_xmin[sfb], l, - m1); - if (maxsf < m2) { - maxsf = m2; - } - } else { - m2 = 255; - maxsf = 255; - } - } else { - if (maxsf < m1) { - maxsf = m1; - } - m2 = maxsf; - } - vbrsf[sfb] = m2; - ++sfb; - j += w; - } - for (; sfb < L3Side.SFBMAX; ++sfb) { - vbrsf[sfb] = maxsf; - vbrsfmin[sfb] = 0; - } - return maxsf; - } - - /** - * quantize xr34 based on scalefactors - * - * block_xr34 - * - * @author Mark Taylor 2000-??-?? - * @author Robert Hegemann 2000-10-20 made functions of them - */ - private final void quantize_x34(final algo_t that) { - double x[] = new double[4]; - int xr34_orig = 0; - final GrInfo cod_info = that.cod_info; - final int ifqstep = (cod_info.scalefac_scale == 0) ? 2 : 4; - int l3 = 0; - int j = 0, sfb = 0; - final int max_nonzero_coeff = cod_info.max_nonzero_coeff; - - assert (cod_info.max_nonzero_coeff >= 0); - assert (cod_info.max_nonzero_coeff < 576); - - while (j <= max_nonzero_coeff) { - final int s = (cod_info.scalefac[sfb] + (cod_info.preflag != 0 ? qupvt.pretab[sfb] - : 0)) - * ifqstep - + cod_info.subblock_gain[cod_info.window[sfb]] - * 8; - final int sfac = (cod_info.global_gain - s); - final float sfpow34 = qupvt.ipow20[sfac]; - final int w = cod_info.width[sfb]; - final int m = (max_nonzero_coeff - j + 1); - int l = w; - int remaining; - - assert ((cod_info.global_gain - s) >= 0); - assert (cod_info.width[sfb] >= 0); - - if (l > m) { - l = m; - } - j += w; - ++sfb; - l >>= 1; - remaining = (l & 1); - - for (l >>= 1; l > 0; --l) { - x[0] = sfpow34 * that.xr34orig[xr34_orig + 0]; - x[1] = sfpow34 * that.xr34orig[xr34_orig + 1]; - x[2] = sfpow34 * that.xr34orig[xr34_orig + 2]; - x[3] = sfpow34 * that.xr34orig[xr34_orig + 3]; - - k_34_4(x, cod_info.l3_enc, l3); - - l3 += 4; - xr34_orig += 4; - } - if (remaining != 0) { - x[0] = sfpow34 * that.xr34orig[xr34_orig + 0]; - x[1] = sfpow34 * that.xr34orig[xr34_orig + 1]; - - k_34_2(x, cod_info.l3_enc, l3); - - l3 += 2; - xr34_orig += 2; - } - } - } - - protected static final int max_range_short[] = { 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0 }; - - protected static final int max_range_long[] = { 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0 }; - - protected static final int max_range_long_lsf_pretab[] = { 7, 7, 7, 7, 7, - 7, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - - protected void set_subblock_gain(final GrInfo cod_info, - final int mingain_s[], final int sf[]) { - final int maxrange1 = 15, maxrange2 = 7; - final int ifqstepShift = (cod_info.scalefac_scale == 0) ? 1 : 2; - int[] sbg = cod_info.subblock_gain; - final int psymax = (int) cod_info.psymax; - int psydiv = 18; - int sbg0, sbg1, sbg2; - int sfb; - int min_sbg = 7; - - if (psydiv > psymax) { - psydiv = psymax; - } - for (int i = 0; i < 3; ++i) { - int maxsf1 = 0, maxsf2 = 0, minsf = 1000; - /* see if we should use subblock gain */ - for (sfb = i; sfb < psydiv; sfb += 3) { - /* part 1 */ - final int v = -sf[sfb]; - if (maxsf1 < v) { - maxsf1 = v; - } - if (minsf > v) { - minsf = v; - } - } - for (; sfb < L3Side.SFBMAX; sfb += 3) { - /* part 2 */ - final int v = -sf[sfb]; - if (maxsf2 < v) { - maxsf2 = v; - } - if (minsf > v) { - minsf = v; - } - } - - /* - * boost subblock gain as little as possible so we can reach maxsf1 - * with scalefactors 8*sbg >= maxsf1 - */ - { - final int m1 = maxsf1 - (maxrange1 << ifqstepShift); - final int m2 = maxsf2 - (maxrange2 << ifqstepShift); - - maxsf1 = Math.max(m1, m2); - } - if (minsf > 0) { - sbg[i] = minsf >> 3; - } else { - sbg[i] = 0; - } - if (maxsf1 > 0) { - final int m1 = sbg[i]; - final int m2 = (maxsf1 + 7) >> 3; - sbg[i] = Math.max(m1, m2); - } - if (sbg[i] > 0 - && mingain_s[i] > (cod_info.global_gain - sbg[i] * 8)) { - sbg[i] = (cod_info.global_gain - mingain_s[i]) >> 3; - } - if (sbg[i] > 7) { - sbg[i] = 7; - } - if (min_sbg > sbg[i]) { - min_sbg = sbg[i]; - } - } - sbg0 = sbg[0] * 8; - sbg1 = sbg[1] * 8; - sbg2 = sbg[2] * 8; - for (sfb = 0; sfb < L3Side.SFBMAX; sfb += 3) { - sf[sfb + 0] += sbg0; - sf[sfb + 1] += sbg1; - sf[sfb + 2] += sbg2; - } - if (min_sbg > 0) { - for (int i = 0; i < 3; ++i) { - sbg[i] -= min_sbg; - } - cod_info.global_gain -= min_sbg * 8; - } - } - - protected void set_scalefacs(final GrInfo cod_info, - final int[] vbrsfmin, final int sf[], final int[] max_range) { - final int ifqstep = (cod_info.scalefac_scale == 0) ? 2 : 4; - final int ifqstepShift = (cod_info.scalefac_scale == 0) ? 1 : 2; - final int[] scalefac = cod_info.scalefac; - final int sfbmax = cod_info.sfbmax; - final int[] sbg = cod_info.subblock_gain; - final int[] window = cod_info.window; - final int preflag = cod_info.preflag; - - if (preflag != 0) { - for (int sfb = 11; sfb < sfbmax; ++sfb) { - sf[sfb] += qupvt.pretab[sfb] * ifqstep; - } - } - for (int sfb = 0; sfb < sfbmax; ++sfb) { - final int gain = cod_info.global_gain - (sbg[window[sfb]] * 8) - - ((preflag != 0 ? qupvt.pretab[sfb] : 0) * ifqstep); - - if (sf[sfb] < 0) { - final int m = gain - vbrsfmin[sfb]; - /* ifqstep*scalefac >= -sf[sfb], so round UP */ - scalefac[sfb] = (ifqstep - 1 - sf[sfb]) >> ifqstepShift; - - if (scalefac[sfb] > max_range[sfb]) { - scalefac[sfb] = max_range[sfb]; - } - if (scalefac[sfb] > 0 && (scalefac[sfb] << ifqstepShift) > m) { - scalefac[sfb] = m >> ifqstepShift; - } - } else { - scalefac[sfb] = 0; - } - } - for (int sfb = sfbmax; sfb < L3Side.SFBMAX; ++sfb) { - scalefac[sfb] = 0; /* sfb21 */ - } - } - - protected boolean checkScalefactor(final GrInfo cod_info, - final int vbrsfmin[]) { - final int ifqstep = cod_info.scalefac_scale == 0 ? 2 : 4; - for (int sfb = 0; sfb < cod_info.psymax; ++sfb) { - final int s = ((cod_info.scalefac[sfb] + (cod_info.preflag != 0 ? qupvt.pretab[sfb] - : 0)) * ifqstep) - + cod_info.subblock_gain[cod_info.window[sfb]] * 8; - - if ((cod_info.global_gain - s) < vbrsfmin[sfb]) { - /** - * <CODE> - * fprintf( stdout, "sf %d\n", sfb ); - * fprintf( stdout, "min %d\n", vbrsfmin[sfb] ); - * fprintf( stdout, "ggain %d\n", cod_info.global_gain ); - * fprintf( stdout, "scalefac %d\n", cod_info.scalefac[sfb] ); - * fprintf( stdout, "pretab %d\n", (cod_info.preflag ? pretab[sfb] : 0) ); - * fprintf( stdout, "scale %d\n", (cod_info.scalefac_scale + 1) ); - * fprintf( stdout, "subgain %d\n", cod_info.subblock_gain[cod_info.window[sfb]] * 8 ); - * fflush( stdout ); - * exit(-1); - * </CODE> - */ - return false; - } - } - return true; - } - - private void bitcount(final algo_t that) { - boolean rc; - - if (that.gfc.mode_gr == 2) { - rc = tak.scale_bitcount(that.cod_info); - } else { - rc = tak.scale_bitcount_lsf(that.gfc, that.cod_info); - } - if (!rc) { - return; - } - /* this should not happen due to the way the scalefactors are selected */ - throw new RuntimeException("INTERNAL ERROR IN VBR NEW CODE (986), please send bug report"); - } - - private int quantizeAndCountBits(final algo_t that) { - quantize_x34(that); - that.cod_info.part2_3_length = tak.noquant_count_bits(that.gfc, - that.cod_info, null); - return that.cod_info.part2_3_length; - } - - private int tryGlobalStepsize(final algo_t that, final int sfwork[], - final int vbrsfmin[], int delta) { - final float xrpow_max = that.cod_info.xrpow_max; - int sftemp[] = new int[L3Side.SFBMAX], nbits; - int vbrmax = 0; - for (int i = 0; i < L3Side.SFBMAX; ++i) { - int gain = sfwork[i] + delta; - if (gain < vbrsfmin[i]) { - gain = vbrsfmin[i]; - } - if (gain > 255) { - gain = 255; - } - if (vbrmax < gain) { - vbrmax = gain; - } - sftemp[i] = gain; - } - that.alloc.alloc(that, sftemp, vbrsfmin, vbrmax); - bitcount(that); - nbits = quantizeAndCountBits(that); - that.cod_info.xrpow_max = xrpow_max; - return nbits; - } - - private void searchGlobalStepsizeMax(final algo_t that, final int sfwork[], - final int vbrsfmin[], final int target) { - final GrInfo cod_info = that.cod_info; - final int gain = cod_info.global_gain; - int curr = gain; - int gain_ok = 1024; - int nbits = QuantizePVT.LARGE_BITS; - int l = gain, r = 512; - - assert (gain >= 0); - while (l <= r) { - curr = (l + r) >> 1; - nbits = tryGlobalStepsize(that, sfwork, vbrsfmin, curr - gain); - if (nbits == 0 || (nbits + cod_info.part2_length) < target) { - r = curr - 1; - gain_ok = curr; - } else { - l = curr + 1; - if (gain_ok == 1024) { - gain_ok = curr; - } - } - } - if (gain_ok != curr) { - curr = gain_ok; - nbits = tryGlobalStepsize(that, sfwork, vbrsfmin, curr - gain); - } - } - - private int sfDepth(final int sfwork[]) { - int m = 0; - for (int j = L3Side.SFBMAX, i = 0; j > 0; --j, ++i) { - final int di = 255 - sfwork[i]; - if (m < di) { - m = di; - } - assert (sfwork[i] >= 0); - assert (sfwork[i] <= 255); - } - assert (m >= 0); - assert (m <= 255); - return m; - } - - private void cutDistribution(final int sfwork[], final int sf_out[], - final int cut) { - for (int j = L3Side.SFBMAX, i = 0; j > 0; --j, ++i) { - final int x = sfwork[i]; - sf_out[i] = x < cut ? x : cut; - } - } - - private int flattenDistribution(final int sfwork[], final int sf_out[], - final int dm, final int k, final int p) { - int sfmax = 0; - if (dm > 0) { - for (int j = L3Side.SFBMAX, i = 0; j > 0; --j, ++i) { - final int di = p - sfwork[i]; - int x = sfwork[i] + (k * di) / dm; - if (x < 0) { - x = 0; - } else { - if (x > 255) { - x = 255; - } - } - sf_out[i] = x; - if (sfmax < x) { - sfmax = x; - } - } - } else { - for (int j = L3Side.SFBMAX, i = 0; j > 0; --j, ++i) { - int x = sfwork[i]; - sf_out[i] = x; - if (sfmax < x) { - sfmax = x; - } - } - } - return sfmax; - } - - private int tryThatOne(final algo_t that, final int sftemp[], - final int vbrsfmin[], final int vbrmax) { - final float xrpow_max = that.cod_info.xrpow_max; - int nbits = QuantizePVT.LARGE_BITS; - that.alloc.alloc(that, sftemp, vbrsfmin, vbrmax); - bitcount(that); - nbits = quantizeAndCountBits(that); - nbits += that.cod_info.part2_length; - that.cod_info.xrpow_max = xrpow_max; - return nbits; - } - - private void outOfBitsStrategy(final algo_t that, final int sfwork[], - final int vbrsfmin[], final int target) { - int wrk[] = new int[L3Side.SFBMAX]; - final int dm = sfDepth(sfwork); - final int p = that.cod_info.global_gain; - - /* PART 1 */ - { - int bi = dm / 2; - int bi_ok = -1; - int bu = 0; - int bo = dm; - for (;;) { - final int sfmax = flattenDistribution(sfwork, wrk, dm, bi, p); - int nbits = tryThatOne(that, wrk, vbrsfmin, sfmax); - if (nbits <= target) { - bi_ok = bi; - bo = bi - 1; - } else { - bu = bi + 1; - } - if (bu <= bo) { - bi = (bu + bo) / 2; - } else { - break; - } - } - if (bi_ok >= 0) { - if (bi != bi_ok) { - final int sfmax = flattenDistribution(sfwork, wrk, dm, - bi_ok, p); - tryThatOne(that, wrk, vbrsfmin, sfmax); - } - return; - } - } - - /* PART 2: */ - { - int bi = (255 + p) / 2; - int bi_ok = -1; - int bu = p; - int bo = 255; - for (;;) { - final int sfmax = flattenDistribution(sfwork, wrk, dm, dm, bi); - int nbits = tryThatOne(that, wrk, vbrsfmin, sfmax); - if (nbits <= target) { - bi_ok = bi; - bo = bi - 1; - } else { - bu = bi + 1; - } - if (bu <= bo) { - bi = (bu + bo) / 2; - } else { - break; - } - } - if (bi_ok >= 0) { - if (bi != bi_ok) { - final int sfmax = flattenDistribution(sfwork, wrk, dm, dm, - bi_ok); - tryThatOne(that, wrk, vbrsfmin, sfmax); - } - return; - } - } - - /* fall back to old code, likely to be never called */ - searchGlobalStepsizeMax(that, wrk, vbrsfmin, target); - } - - private int reduce_bit_usage(final LameInternalFlags gfc, final int gr, - final int ch) { - final GrInfo cod_info = gfc.l3_side.tt[gr][ch]; - // try some better scalefac storage - tak.best_scalefac_store(gfc, gr, ch, gfc.l3_side); - - // best huffman_divide may save some bits too - if (gfc.use_best_huffman == 1) - tak.best_huffman_divide(gfc, cod_info); - return cod_info.part2_3_length + cod_info.part2_length; - } - - public int VBR_encode_frame(final LameInternalFlags gfc, - final float xr34orig[][][], final float l3_xmin[][][], - final int max_bits[][]) { - int sfwork_[][][] = new int[2][2][L3Side.SFBMAX]; - int vbrsfmin_[][][] = new int[2][2][L3Side.SFBMAX]; - algo_t that_[][] = new algo_t[2][2]; - final int ngr = gfc.mode_gr; - final int nch = gfc.channels_out; - int max_nbits_ch[][] = new int[2][2]; - int max_nbits_gr[] = new int[2]; - int max_nbits_fr = 0; - int use_nbits_ch[][] = new int[2][2]; - int use_nbits_gr[] = new int[2]; - int use_nbits_fr = 0; - - /* - * set up some encoding parameters - */ - for (int gr = 0; gr < ngr; ++gr) { - max_nbits_gr[gr] = 0; - for (int ch = 0; ch < nch; ++ch) { - max_nbits_ch[gr][ch] = max_bits[gr][ch]; - use_nbits_ch[gr][ch] = 0; - max_nbits_gr[gr] += max_bits[gr][ch]; - max_nbits_fr += max_bits[gr][ch]; - that_[gr][ch] = new algo_t(); - that_[gr][ch].gfc = gfc; - that_[gr][ch].cod_info = gfc.l3_side.tt[gr][ch]; - that_[gr][ch].xr34orig = xr34orig[gr][ch]; - if (that_[gr][ch].cod_info.block_type == Encoder.SHORT_TYPE) { - that_[gr][ch].alloc = new ShortBlockConstrain(this); - } else { - that_[gr][ch].alloc = new LongBlockConstrain(this); - } - } /* for ch */ - } - - /* - * searches scalefactors - */ - for (int gr = 0; gr < ngr; ++gr) { - for (int ch = 0; ch < nch; ++ch) { - if (max_bits[gr][ch] > 0) { - algo_t that = that_[gr][ch]; - int[] sfwork = sfwork_[gr][ch]; - int[] vbrsfmin = vbrsfmin_[gr][ch]; - int vbrmax; - - vbrmax = block_sf(that, l3_xmin[gr][ch], sfwork, vbrsfmin); - that.alloc.alloc(that, sfwork, vbrsfmin, vbrmax); - bitcount(that); - } else { - /* - * xr contains no energy l3_enc, our encoding data, will be - * quantized to zero continue with next channel - */ - } - } /* for ch */ - } - - /* - * encode 'as is' - */ - use_nbits_fr = 0; - for (int gr = 0; gr < ngr; ++gr) { - use_nbits_gr[gr] = 0; - for (int ch = 0; ch < nch; ++ch) { - algo_t that = that_[gr][ch]; - if (max_bits[gr][ch] > 0) { - final int max_nonzero_coeff = that.cod_info.max_nonzero_coeff; - - assert (max_nonzero_coeff < 576); - Arrays.fill(that.cod_info.l3_enc, max_nonzero_coeff, 576, 0); - - quantizeAndCountBits(that); - } else { - /* - * xr contains no energy l3_enc, our encoding data, will be - * quantized to zero continue with next channel - */ - } - use_nbits_ch[gr][ch] = reduce_bit_usage(gfc, gr, ch); - use_nbits_gr[gr] += use_nbits_ch[gr][ch]; - } /* for ch */ - use_nbits_fr += use_nbits_gr[gr]; - } - - /* - * check bit constrains - */ - if (use_nbits_fr <= max_nbits_fr) { - boolean ok = true; - for (int gr = 0; gr < ngr; ++gr) { - if (use_nbits_gr[gr] > LameInternalFlags.MAX_BITS_PER_GRANULE) { - /* - * violates the rule that every granule has to use no more - * bits than MAX_BITS_PER_GRANULE - */ - ok = false; - } - for (int ch = 0; ch < nch; ++ch) { - if (use_nbits_ch[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - /* - * violates the rule that every gr_ch has to use no more - * bits than MAX_BITS_PER_CHANNEL - * - * This isn't explicitly stated in the ISO docs, but the - * part2_3_length field has only 12 bits, that makes it - * up to a maximum size of 4095 bits!!! - */ - ok = false; - } - } - } - if (ok) { - return use_nbits_fr; - } - } - - /* - * OK, we are in trouble and have to define how many bits are to be used - * for each granule - */ - { - boolean ok = true; - int sum_fr = 0; - - for (int gr = 0; gr < ngr; ++gr) { - max_nbits_gr[gr] = 0; - for (int ch = 0; ch < nch; ++ch) { - if (use_nbits_ch[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - max_nbits_ch[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } else { - max_nbits_ch[gr][ch] = use_nbits_ch[gr][ch]; - } - max_nbits_gr[gr] += max_nbits_ch[gr][ch]; - } - if (max_nbits_gr[gr] > LameInternalFlags.MAX_BITS_PER_GRANULE) { - float f[] = new float[2], s = 0; - for (int ch = 0; ch < nch; ++ch) { - if (max_nbits_ch[gr][ch] > 0) { - f[ch] = (float) Math.sqrt(Math - .sqrt(max_nbits_ch[gr][ch])); - s += f[ch]; - } else { - f[ch] = 0; - } - } - for (int ch = 0; ch < nch; ++ch) { - if (s > 0) { - max_nbits_ch[gr][ch] = (int) (LameInternalFlags.MAX_BITS_PER_GRANULE - * f[ch] / s); - } else { - max_nbits_ch[gr][ch] = 0; - } - } - if (nch > 1) { - if (max_nbits_ch[gr][0] > use_nbits_ch[gr][0] + 32) { - max_nbits_ch[gr][1] += max_nbits_ch[gr][0]; - max_nbits_ch[gr][1] -= use_nbits_ch[gr][0] + 32; - max_nbits_ch[gr][0] = use_nbits_ch[gr][0] + 32; - } - if (max_nbits_ch[gr][1] > use_nbits_ch[gr][1] + 32) { - max_nbits_ch[gr][0] += max_nbits_ch[gr][1]; - max_nbits_ch[gr][0] -= use_nbits_ch[gr][1] + 32; - max_nbits_ch[gr][1] = use_nbits_ch[gr][1] + 32; - } - if (max_nbits_ch[gr][0] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - max_nbits_ch[gr][0] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } - if (max_nbits_ch[gr][1] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - max_nbits_ch[gr][1] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } - } - max_nbits_gr[gr] = 0; - for (int ch = 0; ch < nch; ++ch) { - max_nbits_gr[gr] += max_nbits_ch[gr][ch]; - } - } - sum_fr += max_nbits_gr[gr]; - } - if (sum_fr > max_nbits_fr) { - { - float f[] = new float[2], s = 0; - for (int gr = 0; gr < ngr; ++gr) { - if (max_nbits_gr[gr] > 0) { - f[gr] = (float) Math.sqrt(max_nbits_gr[gr]); - s += f[gr]; - } else { - f[gr] = 0; - } - } - for (int gr = 0; gr < ngr; ++gr) { - if (s > 0) { - max_nbits_gr[gr] = (int) (max_nbits_fr * f[gr] / s); - } else { - max_nbits_gr[gr] = 0; - } - } - } - if (ngr > 1) { - if (max_nbits_gr[0] > use_nbits_gr[0] + 125) { - max_nbits_gr[1] += max_nbits_gr[0]; - max_nbits_gr[1] -= use_nbits_gr[0] + 125; - max_nbits_gr[0] = use_nbits_gr[0] + 125; - } - if (max_nbits_gr[1] > use_nbits_gr[1] + 125) { - max_nbits_gr[0] += max_nbits_gr[1]; - max_nbits_gr[0] -= use_nbits_gr[1] + 125; - max_nbits_gr[1] = use_nbits_gr[1] + 125; - } - for (int gr = 0; gr < ngr; ++gr) { - if (max_nbits_gr[gr] > LameInternalFlags.MAX_BITS_PER_GRANULE) { - max_nbits_gr[gr] = LameInternalFlags.MAX_BITS_PER_GRANULE; - } - } - } - for (int gr = 0; gr < ngr; ++gr) { - float f[] = new float[2], s = 0; - for (int ch = 0; ch < nch; ++ch) { - if (max_nbits_ch[gr][ch] > 0) { - f[ch] = (float) Math.sqrt(max_nbits_ch[gr][ch]); - s += f[ch]; - } else { - f[ch] = 0; - } - } - for (int ch = 0; ch < nch; ++ch) { - if (s > 0) { - max_nbits_ch[gr][ch] = (int) (max_nbits_gr[gr] - * f[ch] / s); - } else { - max_nbits_ch[gr][ch] = 0; - } - } - if (nch > 1) { - if (max_nbits_ch[gr][0] > use_nbits_ch[gr][0] + 32) { - max_nbits_ch[gr][1] += max_nbits_ch[gr][0]; - max_nbits_ch[gr][1] -= use_nbits_ch[gr][0] + 32; - max_nbits_ch[gr][0] = use_nbits_ch[gr][0] + 32; - } - if (max_nbits_ch[gr][1] > use_nbits_ch[gr][1] + 32) { - max_nbits_ch[gr][0] += max_nbits_ch[gr][1]; - max_nbits_ch[gr][0] -= use_nbits_ch[gr][1] + 32; - max_nbits_ch[gr][1] = use_nbits_ch[gr][1] + 32; - } - for (int ch = 0; ch < nch; ++ch) { - if (max_nbits_ch[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - max_nbits_ch[gr][ch] = LameInternalFlags.MAX_BITS_PER_CHANNEL; - } - } - } - } - } - /* sanity check */ - sum_fr = 0; - for (int gr = 0; gr < ngr; ++gr) { - int sum_gr = 0; - for (int ch = 0; ch < nch; ++ch) { - sum_gr += max_nbits_ch[gr][ch]; - if (max_nbits_ch[gr][ch] > LameInternalFlags.MAX_BITS_PER_CHANNEL) { - ok = false; - } - } - sum_fr += sum_gr; - if (sum_gr > LameInternalFlags.MAX_BITS_PER_GRANULE) { - ok = false; - } - } - if (sum_fr > max_nbits_fr) { - ok = false; - } - if (!ok) { - /* - * we must have done something wrong, fallback to 'on_pe' based - * constrain - */ - for (int gr = 0; gr < ngr; ++gr) { - for (int ch = 0; ch < nch; ++ch) { - max_nbits_ch[gr][ch] = max_bits[gr][ch]; - } - } - } - } - - /* - * we already called the 'best_scalefac_store' function, so we need to - * reset some variables before we can do it again. - */ - for (int ch = 0; ch < nch; ++ch) { - gfc.l3_side.scfsi[ch][0] = 0; - gfc.l3_side.scfsi[ch][1] = 0; - gfc.l3_side.scfsi[ch][2] = 0; - gfc.l3_side.scfsi[ch][3] = 0; - } - for (int gr = 0; gr < ngr; ++gr) { - for (int ch = 0; ch < nch; ++ch) { - gfc.l3_side.tt[gr][ch].scalefac_compress = 0; - } - } - - /* - * alter our encoded data, until it fits into the target bitrate - */ - use_nbits_fr = 0; - for (int gr = 0; gr < ngr; ++gr) { - use_nbits_gr[gr] = 0; - for (int ch = 0; ch < nch; ++ch) { - algo_t that = that_[gr][ch]; - use_nbits_ch[gr][ch] = 0; - if (max_bits[gr][ch] > 0) { - int[] sfwork = sfwork_[gr][ch]; - int[] vbrsfmin = vbrsfmin_[gr][ch]; - cutDistribution(sfwork, sfwork, that.cod_info.global_gain); - outOfBitsStrategy(that, sfwork, vbrsfmin, - max_nbits_ch[gr][ch]); - } - use_nbits_ch[gr][ch] = reduce_bit_usage(gfc, gr, ch); - assert (use_nbits_ch[gr][ch] <= max_nbits_ch[gr][ch]); - use_nbits_gr[gr] += use_nbits_ch[gr][ch]; - } /* for ch */ - use_nbits_fr += use_nbits_gr[gr]; - } - - /* - * check bit constrains, but it should always be ok, if there are no - * bugs ;-) - */ - if (use_nbits_fr <= max_nbits_fr) { - return use_nbits_fr; - } - - throw new RuntimeException(String.format( - "INTERNAL ERROR IN VBR NEW CODE (1313), please send bug report\n" - + "maxbits=%d usedbits=%d\n", max_nbits_fr, - use_nbits_fr)); - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRSeekInfo.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRSeekInfo.java deleted file mode 100644 index 690ba95db..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRSeekInfo.java +++ /dev/null @@ -1,32 +0,0 @@ -package mp3; - -public class VBRSeekInfo { - /** - * What we have seen so far. - */ - int sum; - /** - * How many frames we have seen in this chunk. - */ - int seen; - /** - * How many frames we want to collect into one chunk. - */ - int want; - /** - * Actual position in our bag. - */ - int pos; - /** - * Size of our bag. - */ - int size; - /** - * Pointer to our bag. - */ - int[] bag; - int nVbrNumFrames; - int nBytesWritten; - /* VBR tag data */ - int TotalFrameSize; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTag.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTag.java deleted file mode 100644 index 1b184fe76..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTag.java +++ /dev/null @@ -1,989 +0,0 @@ -/* - * Xing VBR tagging for LAME. - * - * Copyright (c) 1999 A.L. Faber - * Copyright (c) 2001 Jonathan Dee - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package mp3; - -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.charset.Charset; -import java.util.Arrays; - -/** - * A Vbr header may be present in the ancillary data field of the first frame of - * an mp3 bitstream<BR> - * The Vbr header (optionally) contains - * <UL> - * <LI>frames total number of audio frames in the bitstream - * <LI>bytes total number of bytes in the bitstream - * <LI>toc table of contents - * </UL> - * - * toc (table of contents) gives seek points for random access.<BR> - * The ith entry determines the seek point for i-percent duration.<BR> - * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes<BR> - * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes - */ -public class VBRTag { - - Lame lame; - BitStream bs; - Version v; - - public final void setModules(Lame lame, BitStream bs, Version v) { - this.lame = lame; - this.bs = bs; - this.v = v; - } - - private static final int FRAMES_FLAG = 0x0001; - private static final int BYTES_FLAG = 0x0002; - private static final int TOC_FLAG = 0x0004; - private static final int VBR_SCALE_FLAG = 0x0008; - - public static final int NUMTOCENTRIES = 100; - - /** - * (0xB40) the max freeformat 640 32kHz framesize. - */ - public static final int MAXFRAMESIZE = 2880; - - /** - * <PRE> - * 4 bytes for Header Tag - * 4 bytes for Header Flags - * 100 bytes for entry (toc) - * 4 bytes for frame size - * 4 bytes for stream size - * 4 bytes for VBR scale. a VBR quality indicator: 0=best 100=worst - * 20 bytes for LAME tag. for example, "LAME3.12 (beta 6)" - * ___________ - * 140 bytes - * </PRE> - */ - private static final int VBRHEADERSIZE = (NUMTOCENTRIES + 4 + 4 + 4 + 4 + 4); - - private static final int LAMEHEADERSIZE = (VBRHEADERSIZE + 9 + 1 + 1 + 8 - + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2); - - /** - * The size of the Xing header MPEG-1, bit rate in kbps. - */ - private static final int XING_BITRATE1 = 128; - /** - * The size of the Xing header MPEG-2, bit rate in kbps. - */ - private static final int XING_BITRATE2 = 64; - /** - * The size of the Xing header MPEG-2.5, bit rate in kbps. - */ - private static final int XING_BITRATE25 = 32; - - /** - * ISO-8859-1 charset for byte to string operations. - */ - private static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); - - /** - * VBR header magic string. - */ - private static final String VBRTag0 = "Xing"; - /** - * VBR header magic string (VBR == VBRMode.vbr_off). - */ - private static final String VBRTag1 = "Info"; - - /** - * Lookup table for fast CRC-16 computation. Uses the polynomial - * x^16+x^15+x^2+1 - */ - private static int crc16Lookup[] = { 0x0000, 0xC0C1, 0xC181, 0x0140, - 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, - 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, - 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, - 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, - 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, - 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, - 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, - 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, - 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, - 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, - 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, - 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, - 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, - 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, - 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, - 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, - 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, - 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, - 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, - 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, - 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, - 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, - 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, - 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, - 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, - 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, - 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, - 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, - 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, - 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, - 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, - 0x4100, 0x81C1, 0x8081, 0x4040 }; - - /*********************************************************************** - * Robert Hegemann 2001-01-17 - ***********************************************************************/ - - private void addVbr(final VBRSeekInfo v, final int bitrate) { - v.nVbrNumFrames++; - v.sum += bitrate; - v.seen++; - - if (v.seen < v.want) { - return; - } - - if (v.pos < v.size) { - v.bag[v.pos] = v.sum; - v.pos++; - v.seen = 0; - } - if (v.pos == v.size) { - for (int i = 1; i < v.size; i += 2) { - v.bag[i / 2] = v.bag[i]; - } - v.want *= 2; - v.pos /= 2; - } - } - - private void xingSeekTable(VBRSeekInfo v, byte[] t) { - if (v.pos <= 0) - return; - - for (int i = 1; i < NUMTOCENTRIES; ++i) { - float j = i / (float) NUMTOCENTRIES, act, sum; - int indx = (int) (Math.floor(j * v.pos)); - if (indx > v.pos - 1) - indx = v.pos - 1; - act = v.bag[indx]; - sum = v.sum; - int seek_point = (int) (256. * act / sum); - if (seek_point > 255) - seek_point = 255; - t[i] = (byte) seek_point; - } - } - - /** - * Add VBR entry, used to fill the VBR TOC entries. - * - * @param gfp - * global flags - */ - public final void addVbrFrame(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - - int kbps = Tables.bitrate_table[gfp.version][gfc.bitrate_index]; - assert (gfc.VBR_seek_table.bag != null); - addVbr(gfc.VBR_seek_table, kbps); - } - - /** - * Read big endian integer (4-bytes) from header. - * - * @param buf - * header containing the integer - * @param bufPos - * offset into the header - * @return extracted integer - */ - private int extractInteger(final byte[] buf, final int bufPos) { - int x = buf[bufPos + 0] & 0xff; - x <<= 8; - x |= buf[bufPos + 1] & 0xff; - x <<= 8; - x |= buf[bufPos + 2] & 0xff; - x <<= 8; - x |= buf[bufPos + 3] & 0xff; - return x; - } - - /** - * Write big endian integer (4-bytes) in the header. - * - * @param buf - * header to write the integer into - * @param bufPos - * offset into the header - * @param value - * integer value to write - */ - private void createInteger(final byte[] buf, final int bufPos, - final int value) { - buf[bufPos + 0] = (byte) ((value >> 24) & 0xff); - buf[bufPos + 1] = (byte) ((value >> 16) & 0xff); - buf[bufPos + 2] = (byte) ((value >> 8) & 0xff); - buf[bufPos + 3] = (byte) (value & 0xff); - } - - /** - * Write big endian short (2-bytes) in the header. - * - * @param buf - * header to write the integer into - * @param bufPos - * offset into the header - * @param value - * integer value to write - */ - private void createShort(final byte[] buf, final int bufPos, final int value) { - buf[bufPos + 0] = (byte) ((value >> 8) & 0xff); - buf[bufPos + 1] = (byte) (value & 0xff); - } - - /** - * Check for magic strings (Xing/Info). - * - * @param buf - * header to check - * @param bufPos - * header offset to check - * @return magic string found - */ - private boolean isVbrTag(final byte[] buf, final int bufPos) { - return new String(buf, bufPos, VBRTag0.length(), ISO_8859_1) - .equals(VBRTag0) - || new String(buf, bufPos, VBRTag1.length(), ISO_8859_1) - .equals(VBRTag1); - } - - private byte shiftInBitsValue(final byte x, final int n, final int v) { - return (byte) ((x << n) | (v & ~(-1 << n))); - } - - /** - * Construct the MP3 header using the settings of the global flags. - * - * <img src="1000px-Mp3filestructure.svg.png"> - * - * @param gfp - * global flags - * @param buffer - * header - */ - private void setLameTagFrameHeader(final LameGlobalFlags gfp, - final byte[] buffer) { - final LameInternalFlags gfc = gfp.internal_flags; - - // MP3 Sync Word - buffer[0] = shiftInBitsValue(buffer[0], 8, 0xff); - - buffer[1] = shiftInBitsValue(buffer[1], 3, 7); - buffer[1] = shiftInBitsValue(buffer[1], 1, - (gfp.out_samplerate < 16000) ? 0 : 1); - // Version - buffer[1] = shiftInBitsValue(buffer[1], 1, gfp.version); - // 01 == Layer 3 - buffer[1] = shiftInBitsValue(buffer[1], 2, 4 - 3); - // Error protection - buffer[1] = shiftInBitsValue(buffer[1], 1, (!gfp.error_protection) ? 1 - : 0); - - // Bit rate - buffer[2] = shiftInBitsValue(buffer[2], 4, gfc.bitrate_index); - // Frequency - buffer[2] = shiftInBitsValue(buffer[2], 2, gfc.samplerate_index); - // Pad. Bit - buffer[2] = shiftInBitsValue(buffer[2], 1, 0); - // Priv. Bit - buffer[2] = shiftInBitsValue(buffer[2], 1, gfp.extension); - - // Mode - buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.mode.ordinal()); - // Mode extension (Used with Joint Stereo) - buffer[3] = shiftInBitsValue(buffer[3], 2, gfc.mode_ext); - // Copy - buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.copyright); - // Original - buffer[3] = shiftInBitsValue(buffer[3], 1, gfp.original); - // Emphasis - buffer[3] = shiftInBitsValue(buffer[3], 2, gfp.emphasis); - - /* the default VBR header. 48 kbps layer III, no padding, no crc */ - /* but sampling freq, mode and copyright/copy protection taken */ - /* from first valid frame */ - buffer[0] = (byte) 0xff; - byte abyte = (byte) (buffer[1] & 0xf1); - - int bitrate; - if (1 == gfp.version) { - bitrate = XING_BITRATE1; - } else { - if (gfp.out_samplerate < 16000) - bitrate = XING_BITRATE25; - else - bitrate = XING_BITRATE2; - } - - if (gfp.VBR == VbrMode.vbr_off) - bitrate = gfp.brate; - - byte bbyte; - if (gfp.free_format) - bbyte = 0x00; - else - bbyte = (byte) (16 * lame.BitrateIndex(bitrate, gfp.version, - gfp.out_samplerate)); - - /* - * Use as much of the info from the real frames in the Xing header: - * samplerate, channels, crc, etc... - */ - if (gfp.version == 1) { - /* MPEG1 */ - buffer[1] = (byte) (abyte | 0x0a); /* was 0x0b; */ - abyte = (byte) (buffer[2] & 0x0d); /* AF keep also private bit */ - buffer[2] = (byte) (bbyte | abyte); /* 64kbs MPEG1 frame */ - } else { - /* MPEG2 */ - buffer[1] = (byte) (abyte | 0x02); /* was 0x03; */ - abyte = (byte) (buffer[2] & 0x0d); /* AF keep also private bit */ - buffer[2] = (byte) (bbyte | abyte); /* 64kbs MPEG2 frame */ - } - } - - /** - * Get VBR tag information - * - * @param buf - * header to analyze - * @param bufPos - * offset into the header - * @return VBR tag data - */ - public final VBRTagData getVbrTag(final byte[] buf) { - final VBRTagData pTagData = new VBRTagData(); - int bufPos = 0; - - /* get Vbr header data */ - pTagData.flags = 0; - - /* get selected MPEG header data */ - int hId = (buf[bufPos + 1] >> 3) & 1; - int hSrIndex = (buf[bufPos + 2] >> 2) & 3; - int hMode = (buf[bufPos + 3] >> 6) & 3; - int hBitrate = ((buf[bufPos + 2] >> 4) & 0xf); - hBitrate = Tables.bitrate_table[hId][hBitrate]; - - /* check for FFE syncword */ - if ((buf[bufPos + 1] >> 4) == 0xE) - pTagData.samprate = Tables.samplerate_table[2][hSrIndex]; - else - pTagData.samprate = Tables.samplerate_table[hId][hSrIndex]; - - /* determine offset of header */ - if (hId != 0) { - /* mpeg1 */ - if (hMode != 3) - bufPos += (32 + 4); - else - bufPos += (17 + 4); - } else { - /* mpeg2 */ - if (hMode != 3) - bufPos += (17 + 4); - else - bufPos += (9 + 4); - } - - if (!isVbrTag(buf, bufPos)) - return null; - - bufPos += 4; - - pTagData.hId = hId; - - /* get flags */ - int head_flags = pTagData.flags = extractInteger(buf, bufPos); - bufPos += 4; - - if ((head_flags & FRAMES_FLAG) != 0) { - pTagData.frames = extractInteger(buf, bufPos); - bufPos += 4; - } - - if ((head_flags & BYTES_FLAG) != 0) { - pTagData.bytes = extractInteger(buf, bufPos); - bufPos += 4; - } - - if ((head_flags & TOC_FLAG) != 0) { - if (pTagData.toc != null) { - for (int i = 0; i < NUMTOCENTRIES; i++) - pTagData.toc[i] = buf[bufPos + i]; - } - bufPos += NUMTOCENTRIES; - } - - pTagData.vbrScale = -1; - - if ((head_flags & VBR_SCALE_FLAG) != 0) { - pTagData.vbrScale = extractInteger(buf, bufPos); - bufPos += 4; - } - - pTagData.headersize = ((hId + 1) * 72000 * hBitrate) - / pTagData.samprate; - - bufPos += 21; - int encDelay = buf[bufPos + 0] << 4; - encDelay += buf[bufPos + 1] >> 4; - int encPadding = (buf[bufPos + 1] & 0x0F) << 8; - encPadding += buf[bufPos + 2] & 0xff; - /* check for reasonable values (this may be an old Xing header, */ - /* not a INFO tag) */ - if (encDelay < 0 || encDelay > 3000) - encDelay = -1; - if (encPadding < 0 || encPadding > 3000) - encPadding = -1; - - pTagData.encDelay = encDelay; - pTagData.encPadding = encPadding; - - /* success */ - return pTagData; - } - - /** - * Initializes the header - * - * @param gfp - * global flags - */ - public final void InitVbrTag(final LameGlobalFlags gfp) { - final LameInternalFlags gfc = gfp.internal_flags; - - /** - * <PRE> - * Xing VBR pretends to be a 48kbs layer III frame. (at 44.1kHz). - * (at 48kHz they use 56kbs since 48kbs frame not big enough for - * table of contents) - * let's always embed Xing header inside a 64kbs layer III frame. - * this gives us enough room for a LAME version string too. - * size determined by sampling frequency (MPEG1) - * 32kHz: 216 bytes@48kbs 288bytes@ 64kbs - * 44.1kHz: 156 bytes 208bytes@64kbs (+1 if padding = 1) - * 48kHz: 144 bytes 192 - * - * MPEG 2 values are the same since the framesize and samplerate - * are each reduced by a factor of 2. - * </PRE> - */ - int kbps_header; - if (1 == gfp.version) { - kbps_header = XING_BITRATE1; - } else { - if (gfp.out_samplerate < 16000) - kbps_header = XING_BITRATE25; - else - kbps_header = XING_BITRATE2; - } - - if (gfp.VBR == VbrMode.vbr_off) - kbps_header = gfp.brate; - - // make sure LAME Header fits into Frame - int totalFrameSize = ((gfp.version + 1) * 72000 * kbps_header) - / gfp.out_samplerate; - int headerSize = (gfc.sideinfo_len + LAMEHEADERSIZE); - gfc.VBR_seek_table.TotalFrameSize = totalFrameSize; - if (totalFrameSize < headerSize || totalFrameSize > MAXFRAMESIZE) { - /* disable tag, it wont fit */ - gfp.bWriteVbrTag = false; - return; - } - - gfc.VBR_seek_table.nVbrNumFrames = 0; - gfc.VBR_seek_table.nBytesWritten = 0; - gfc.VBR_seek_table.sum = 0; - - gfc.VBR_seek_table.seen = 0; - gfc.VBR_seek_table.want = 1; - gfc.VBR_seek_table.pos = 0; - - if (gfc.VBR_seek_table.bag == null) { - gfc.VBR_seek_table.bag = new int[400]; - gfc.VBR_seek_table.size = 400; - } - - // write dummy VBR tag of all 0's into bitstream - byte buffer[] = new byte[MAXFRAMESIZE]; - - setLameTagFrameHeader(gfp, buffer); - int n = gfc.VBR_seek_table.TotalFrameSize; - for (int i = 0; i < n; ++i) { - bs.add_dummy_byte(gfp, buffer[i] & 0xff, 1); - } - } - - /** - * Fast CRC-16 computation (uses table crc16Lookup). - * - * @param value - * @param crc - * @return - */ - private int crcUpdateLookup(final int value, int crc) { - int tmp = crc ^ value; - crc = (crc >> 8) ^ crc16Lookup[tmp & 0xff]; - return crc; - } - - public final void updateMusicCRC(final int[] crc, final byte[] buffer, - final int bufferPos, final int size) { - for (int i = 0; i < size; ++i) - crc[0] = crcUpdateLookup(buffer[bufferPos + i], crc[0]); - } - - /** - * Write LAME info: mini version + info on various switches used (Jonathan - * Dee 2001/08/31). - * - * @param gfp - * global flags - * @param musicLength - * music length - * @param streamBuffer - * pointer to output buffer - * @param streamBufferPos - * offset into the output buffer - * @param crc - * computation of CRC-16 of Lame Tag so far (starting at frame - * sync) - * @return number of bytes written to the stream - */ - private int putLameVBR(final LameGlobalFlags gfp, final int musicLength, - final byte[] streamBuffer, final int streamBufferPos, int crc) { - final LameInternalFlags gfc = gfp.internal_flags; - - int bytesWritten = 0; - - /* encoder delay */ - int encDelay = gfp.encoder_delay; - /* encoder padding */ - int encPadding = gfp.encoder_padding; - - /* recall: gfp.VBR_q is for example set by the switch -V */ - /* gfp.quality by -q, -h, -f, etc */ - int quality = (100 - 10 * gfp.VBR_q - gfp.quality); - - final String version = v.getLameVeryShortVersion(); - int vbr; - int revision = 0x00; - int revMethod; - // numbering different in vbr_mode vs. Lame tag - int vbrTypeTranslator[] = { 1, 5, 3, 2, 4, 0, 3 }; - - int lowpass = (int) (((gfp.lowpassfreq / 100.0) + .5) > 255 ? 255 - : (gfp.lowpassfreq / 100.0) + .5); - - int peakSignalAmplitude = 0; - - int radioReplayGain = 0; - int audiophileReplayGain = 0; - - int noiseShaping = gfp.internal_flags.noise_shaping; - int stereoMode = 0; - int nonOptimal = 0; - int sourceFreq = 0; - int misc = 0; - int musicCRC = 0; - - // psy model type: Gpsycho or NsPsytune - boolean expNPsyTune = (gfp.exp_nspsytune & 1) != 0; - boolean safeJoint = (gfp.exp_nspsytune & 2) != 0; - - boolean noGapMore = false; - boolean noGapPrevious = false; - - int noGapCount = gfp.internal_flags.nogap_total; - int noGapCurr = gfp.internal_flags.nogap_current; - - // 4 bits - int athType = gfp.ATHtype; - - int flags = 0; - - // vbr modes - int abrBitrate; - switch (gfp.VBR) { - case vbr_abr: - abrBitrate = gfp.VBR_mean_bitrate_kbps; - break; - case vbr_off: - abrBitrate = gfp.brate; - break; - default: - abrBitrate = gfp.VBR_min_bitrate_kbps; - } - - // revision and vbr method - if (gfp.VBR.ordinal() < vbrTypeTranslator.length) - vbr = vbrTypeTranslator[gfp.VBR.ordinal()]; - else - vbr = 0x00; // unknown - - revMethod = 0x10 * revision + vbr; - - // ReplayGain - if (gfc.findReplayGain) { - if (gfc.RadioGain > 0x1FE) - gfc.RadioGain = 0x1FE; - if (gfc.RadioGain < -0x1FE) - gfc.RadioGain = -0x1FE; - - // set name code - radioReplayGain = 0x2000; - // set originator code to `determined automatically' - radioReplayGain |= 0xC00; - - if (gfc.RadioGain >= 0) { - // set gain adjustment - radioReplayGain |= gfc.RadioGain; - } else { - // set the sign bit - radioReplayGain |= 0x200; - // set gain adjustment - radioReplayGain |= -gfc.RadioGain; - } - } - - // peak sample - if (gfc.findPeakSample) - peakSignalAmplitude = Math - .abs((int) ((((float) gfc.PeakSample) / 32767.0) - * Math.pow(2, 23) + .5)); - - // nogap - if (noGapCount != -1) { - if (noGapCurr > 0) - noGapPrevious = true; - - if (noGapCurr < noGapCount - 1) - noGapMore = true; - } - - // flags - flags = athType + ((expNPsyTune ? 1 : 0) << 4) - + ((safeJoint ? 1 : 0) << 5) + ((noGapMore ? 1 : 0) << 6) - + ((noGapPrevious ? 1 : 0) << 7); - - if (quality < 0) - quality = 0; - - // stereo mode field (Intensity stereo is not implemented) - switch (gfp.mode) { - case MONO: - stereoMode = 0; - break; - case STEREO: - stereoMode = 1; - break; - case DUAL_CHANNEL: - stereoMode = 2; - break; - case JOINT_STEREO: - if (gfp.force_ms) - stereoMode = 4; - else - stereoMode = 3; - break; - case NOT_SET: - //$FALL-THROUGH$ - default: - stereoMode = 7; - break; - } - - if (gfp.in_samplerate <= 32000) - sourceFreq = 0x00; - else if (gfp.in_samplerate == 48000) - sourceFreq = 0x02; - else if (gfp.in_samplerate > 48000) - sourceFreq = 0x03; - else { - // default is 44100Hz - sourceFreq = 0x01; - } - - // Check if the user overrided the default LAME behavior with some - // nasty options - if (gfp.short_blocks == ShortBlock.short_block_forced - || gfp.short_blocks == ShortBlock.short_block_dispensed - || ((gfp.lowpassfreq == -1) && (gfp.highpassfreq == -1)) || /* "-k" */ - (gfp.scale_left < gfp.scale_right) - || (gfp.scale_left > gfp.scale_right) - || (gfp.disable_reservoir && gfp.brate < 320) || gfp.noATH - || gfp.ATHonly || (athType == 0) || gfp.in_samplerate <= 32000) - nonOptimal = 1; - - misc = noiseShaping + (stereoMode << 2) + (nonOptimal << 5) - + (sourceFreq << 6); - - musicCRC = gfc.nMusicCRC; - - // Write all this information into the stream - - createInteger(streamBuffer, streamBufferPos + bytesWritten, quality); - bytesWritten += 4; - - for (int j = 0; j < 9; j++) { - streamBuffer[streamBufferPos + bytesWritten + j] = (byte) version - .charAt(j); - } - bytesWritten += 9; - - streamBuffer[streamBufferPos + bytesWritten] = (byte) revMethod; - bytesWritten++; - - streamBuffer[streamBufferPos + bytesWritten] = (byte) lowpass; - bytesWritten++; - - createInteger(streamBuffer, streamBufferPos + bytesWritten, - peakSignalAmplitude); - bytesWritten += 4; - - createShort(streamBuffer, streamBufferPos + bytesWritten, - radioReplayGain); - bytesWritten += 2; - - createShort(streamBuffer, streamBufferPos + bytesWritten, - audiophileReplayGain); - bytesWritten += 2; - - streamBuffer[streamBufferPos + bytesWritten] = (byte) flags; - bytesWritten++; - - if (abrBitrate >= 255) - streamBuffer[streamBufferPos + bytesWritten] = (byte) 0xFF; - else - streamBuffer[streamBufferPos + bytesWritten] = (byte) abrBitrate; - bytesWritten++; - - streamBuffer[streamBufferPos + bytesWritten] = (byte) (encDelay >> 4); - streamBuffer[streamBufferPos + bytesWritten + 1] = (byte) ((encDelay << 4) + (encPadding >> 8)); - streamBuffer[streamBufferPos + bytesWritten + 2] = (byte) encPadding; - - bytesWritten += 3; - - streamBuffer[streamBufferPos + bytesWritten] = (byte) misc; - bytesWritten++; - - // unused in rev0 - streamBuffer[streamBufferPos + bytesWritten++] = 0; - - createShort(streamBuffer, streamBufferPos + bytesWritten, gfp.preset); - bytesWritten += 2; - - createInteger(streamBuffer, streamBufferPos + bytesWritten, musicLength); - bytesWritten += 4; - - createShort(streamBuffer, streamBufferPos + bytesWritten, musicCRC); - bytesWritten += 2; - - // Calculate tag CRC.... must be done here, since it includes previous - // information - - for (int i = 0; i < bytesWritten; i++) - crc = crcUpdateLookup(streamBuffer[streamBufferPos + i], crc); - - createShort(streamBuffer, streamBufferPos + bytesWritten, crc); - bytesWritten += 2; - - return bytesWritten; - } - - private int skipId3v2(final RandomAccessFile fpStream) throws IOException { - // seek to the beginning of the stream - fpStream.seek(0); - // read 10 bytes in case there's an ID3 version 2 header here - byte[] id3v2Header = new byte[10]; - fpStream.readFully(id3v2Header); - /* does the stream begin with the ID3 version 2 file identifier? */ - int id3v2TagSize; - if (!new String(id3v2Header, "ISO-8859-1").startsWith("ID3")) { - /* - * the tag size (minus the 10-byte header) is encoded into four - * bytes where the most significant bit is clear in each byte - */ - id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21) - | ((id3v2Header[7] & 0x7f) << 14) - | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f)) - + id3v2Header.length; - } else { - /* no ID3 version 2 tag in this stream */ - id3v2TagSize = 0; - } - return id3v2TagSize; - } - - public final int getLameTagFrame(final LameGlobalFlags gfp, - final byte[] buffer) { - final LameInternalFlags gfc = gfp.internal_flags; - - if (!gfp.bWriteVbrTag) { - return 0; - } - if (gfc.Class_ID != Lame.LAME_ID) { - return 0; - } - if (gfc.VBR_seek_table.pos <= 0) { - return 0; - } - if (buffer.length < gfc.VBR_seek_table.TotalFrameSize) { - return gfc.VBR_seek_table.TotalFrameSize; - } - - Arrays.fill(buffer, 0, gfc.VBR_seek_table.TotalFrameSize, (byte) 0); - - // 4 bytes frame header - setLameTagFrameHeader(gfp, buffer); - - // Create TOC entries - byte toc[] = new byte[NUMTOCENTRIES]; - - if (gfp.free_format) { - for (int i = 1; i < NUMTOCENTRIES; ++i) - toc[i] = (byte) (255 * i / 100); - } else { - xingSeekTable(gfc.VBR_seek_table, toc); - } - - // Start writing the tag after the zero frame - int streamIndex = gfc.sideinfo_len; - /** - * Note: Xing header specifies that Xing data goes in the ancillary data - * with NO ERROR PROTECTION. If error protecton in enabled, the Xing - * data still starts at the same offset, and now it is in sideinfo data - * block, and thus will not decode correctly by non-Xing tag aware - * players - */ - if (gfp.error_protection) - streamIndex -= 2; - - // Put Vbr tag - if (gfp.VBR == VbrMode.vbr_off) { - buffer[streamIndex++] = (byte) VBRTag1.charAt(0); - buffer[streamIndex++] = (byte) VBRTag1.charAt(1); - buffer[streamIndex++] = (byte) VBRTag1.charAt(2); - buffer[streamIndex++] = (byte) VBRTag1.charAt(3); - - } else { - buffer[streamIndex++] = (byte) VBRTag0.charAt(0); - buffer[streamIndex++] = (byte) VBRTag0.charAt(1); - buffer[streamIndex++] = (byte) VBRTag0.charAt(2); - buffer[streamIndex++] = (byte) VBRTag0.charAt(3); - } - - // Put header flags - createInteger(buffer, streamIndex, FRAMES_FLAG + BYTES_FLAG + TOC_FLAG - + VBR_SCALE_FLAG); - streamIndex += 4; - - // Put Total Number of frames - createInteger(buffer, streamIndex, gfc.VBR_seek_table.nVbrNumFrames); - streamIndex += 4; - - // Put total audio stream size, including Xing/LAME Header - int streamSize = (gfc.VBR_seek_table.nBytesWritten + gfc.VBR_seek_table.TotalFrameSize); - createInteger(buffer, streamIndex, (int) streamSize); - streamIndex += 4; - - /* Put TOC */ - System.arraycopy(toc, 0, buffer, streamIndex, toc.length); - streamIndex += toc.length; - - if (gfp.error_protection) { - // (jo) error_protection: add crc16 information to header - bs.CRC_writeheader(gfc, buffer); - } - - // work out CRC so far: initially crc = 0 - int crc = 0x00; - for (int i = 0; i < streamIndex; i++) - crc = crcUpdateLookup(buffer[i], crc); - // Put LAME VBR info - streamIndex += putLameVBR(gfp, streamSize, buffer, streamIndex, crc); - - return gfc.VBR_seek_table.TotalFrameSize; - } - - /** - * Write final VBR tag to the file. - * - * @param gfp - * global flags - * @param stream - * stream to add the VBR tag to - * @return 0 (OK), -1 else - * @throws IOException - * I/O error - */ - public final int putVbrTag(final LameGlobalFlags gfp, - final RandomAccessFile stream) throws IOException { - final LameInternalFlags gfc = gfp.internal_flags; - - if (gfc.VBR_seek_table.pos <= 0) - return -1; - - // Seek to end of file - stream.seek(stream.length()); - - // Get file size, abort if file has zero length. - if (stream.length() == 0) - return -1; - - // The VBR tag may NOT be located at the beginning of the stream. If an - // ID3 version 2 tag was added, then it must be skipped to write the VBR - // tag data. - int id3v2TagSize = skipId3v2(stream); - - // Seek to the beginning of the stream - stream.seek(id3v2TagSize); - - byte[] buffer = new byte[MAXFRAMESIZE]; - int bytes = getLameTagFrame(gfp, buffer); - if (bytes > buffer.length) { - return -1; - } - - if (bytes < 1) { - return 0; - } - - // Put it all to disk again - stream.write(buffer, 0, bytes); - // success - return 0; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTagData.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTagData.java deleted file mode 100644 index 7ae4acb5b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VBRTagData.java +++ /dev/null @@ -1,50 +0,0 @@ -package mp3; - -/** - * Structure to receive extracted header (toc may be null). - * - * @author Ken - * - */ -public class VBRTagData { - /** - * From MPEG header 0=MPEG2, 1=MPEG1. - */ - protected int hId; - /** - * Sample rate determined from MPEG header. - */ - protected int samprate; - /** - * From Vbr header data. - */ - protected int flags; - /** - * Total bit stream frames from Vbr header data. - */ - public int frames; - /** - * Total bit stream bytes from Vbr header data. - */ - protected int bytes; - /** - * Encoded vbr scale from Vbr header data. - */ - protected int vbrScale; - /** - * May be null if toc not desired. - */ - protected byte[] toc = new byte[VBRTag.NUMTOCENTRIES]; - /** - * Size of VBR header, in bytes. - */ - public int headersize; - /** - * Encoder delay. - */ - public int encDelay; - /** - * Encoder padding added at end of stream. - */ - public int encPadding; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VbrMode.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VbrMode.java deleted file mode 100644 index e01aba003..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/VbrMode.java +++ /dev/null @@ -1,6 +0,0 @@ -package mp3; - -public enum VbrMode { - vbr_off, vbr_mt, vbr_rh, vbr_abr, vbr_mtrh; - public static final VbrMode vbr_default = vbr_mtrh; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Version.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Version.java deleted file mode 100644 index 68db5b0ed..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mp3/Version.java +++ /dev/null @@ -1,90 +0,0 @@ -package mp3; - -public class Version { - - /** - * URL for the LAME website. - */ - private static final String LAME_URL = "http://www.mp3dev.org/"; - - /** - * Major version number. - */ - private static final int LAME_MAJOR_VERSION = 3; - /** - * Minor version number. - */ - private static final int LAME_MINOR_VERSION = 98; - /** - * Patch level. - */ - private static final int LAME_PATCH_VERSION = 4; - - /** - * Major version number. - */ - private static final int PSY_MAJOR_VERSION = 0; - /** - * Minor version number. - */ - private static final int PSY_MINOR_VERSION = 93; - - /** - * A string which describes the version of LAME. - * - * @return string which describes the version of LAME - */ - public final String getLameVersion() { - // primary to write screen reports - return (LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "." + LAME_PATCH_VERSION); - } - - /** - * The short version of the LAME version string. - * - * @return short version of the LAME version string - */ - public final String getLameShortVersion() { - // Adding date and time to version string makes it harder for output - // validation - return (LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "." + LAME_PATCH_VERSION); - } - - /** - * The shortest version of the LAME version string. - * - * @return shortest version of the LAME version string - */ - public final String getLameVeryShortVersion() { - // Adding date and time to version string makes it harder for output - return ("LAME" + LAME_MAJOR_VERSION + "." + LAME_MINOR_VERSION + "r"); - } - - /** - * String which describes the version of GPSYCHO - * - * @return string which describes the version of GPSYCHO - */ - public final String getPsyVersion() { - return (PSY_MAJOR_VERSION + "." + PSY_MINOR_VERSION); - } - - /** - * String which is a URL for the LAME website. - * - * @return string which is a URL for the LAME website - */ - public final String getLameUrl() { - return LAME_URL; - } - - /** - * Quite useless for a java version, however we are compatible ;-) - * - * @return "32bits" - */ - public final String getLameOsBitness() { - return "32bits"; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Common.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Common.java deleted file mode 100644 index ba71f1f00..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Common.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * common.c: some common bitstream operations - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Common.java,v 1.6 2011/08/27 18:57:09 kenchis Exp $ */ - -package mpg; - -import mpg.MPGLib.mpstr_tag; - -public class Common { - - public static final int tabsel_123[][][] = { - { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,}, - {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,}, - {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} }, - - { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,}, - {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,}, - {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} } - }; - - public static final int freqs[] = { 44100, 48000, 32000, 22050, 24000, - 16000, 11025, 12000, 8000 }; - - public float muls[][] = new float[27][64]; - - private static final int MAX_INPUT_FRAMESIZE = 4096; - - public final boolean head_check(final long head, final int check_layer) { - /** - * <PRE> - * look for a valid header. - * if check_layer > 0, then require that - * nLayer = check_layer. - * </PRE> - */ - - /* bits 13-14 = layer 3 */ - int nLayer = (int) (4 - ((head >> 17) & 3)); - - if ((head & 0xffe00000L) != 0xffe00000L) { - /* syncword */ - return false; - } - - if (nLayer == 4) - return false; - - if (check_layer > 0 && nLayer != check_layer) - return false; - - if (((head >> 12) & 0xf) == 0xf) { - /* bits 16,17,18,19 = 1111 invalid bitrate */ - return false; - } - if (((head >> 10) & 0x3) == 0x3) { - /* bits 20,21 = 11 invalid sampling freq */ - return false; - } - if ((head & 0x3) == 0x2) - /* invalid emphasis */ - return false; - return true; - } - - /** - * decode a header and write the information into the frame structure - */ - public final int decode_header(final Frame fr, final long newhead) { - - if ((newhead & (1 << 20)) != 0) { - fr.lsf = (newhead & (1 << 19)) != 0 ? 0x0 : 0x1; - fr.mpeg25 = false; - } else { - fr.lsf = 1; - fr.mpeg25 = true; - } - - fr.lay = (int) (4 - ((newhead >> 17) & 3)); - if (((newhead >> 10) & 0x3) == 0x3) { - throw new RuntimeException("Stream error"); - } - if (fr.mpeg25) { - fr.sampling_frequency = (int) (6 + ((newhead >> 10) & 0x3)); - } else - fr.sampling_frequency = (int) (((newhead >> 10) & 0x3) + (fr.lsf * 3)); - - fr.error_protection = ((newhead >> 16) & 0x1) == 0; - - if (fr.mpeg25) /* allow Bitrate change for 2.5 ... */ - fr.bitrate_index = (int) ((newhead >> 12) & 0xf); - - fr.bitrate_index = (int) ((newhead >> 12) & 0xf); - fr.padding = (int) ((newhead >> 9) & 0x1); - fr.extension = (int) ((newhead >> 8) & 0x1); - fr.mode = (int) ((newhead >> 6) & 0x3); - fr.mode_ext = (int) ((newhead >> 4) & 0x3); - fr.copyright = (int) ((newhead >> 3) & 0x1); - fr.original = (int) ((newhead >> 2) & 0x1); - fr.emphasis = (int) (newhead & 0x3); - - fr.stereo = (fr.mode == MPG123.MPG_MD_MONO) ? 1 : 2; - - switch (fr.lay) { - case 1: - fr.framesize = tabsel_123[fr.lsf][0][fr.bitrate_index] * 12000; - fr.framesize /= freqs[fr.sampling_frequency]; - fr.framesize = ((fr.framesize + fr.padding) << 2) - 4; - fr.down_sample = 0; - fr.down_sample_sblimit = MPG123.SBLIMIT >> (fr.down_sample); - break; - - case 2: - fr.framesize = tabsel_123[fr.lsf][1][fr.bitrate_index] * 144000; - fr.framesize /= freqs[fr.sampling_frequency]; - fr.framesize += fr.padding - 4; - fr.down_sample = 0; - fr.down_sample_sblimit = MPG123.SBLIMIT >> (fr.down_sample); - break; - - case 3: - if (fr.framesize > MAX_INPUT_FRAMESIZE) { - System.err.printf("Frame size too big.\n"); - fr.framesize = MAX_INPUT_FRAMESIZE; - return (0); - } - - if (fr.bitrate_index == 0) - fr.framesize = 0; - else { - fr.framesize = tabsel_123[fr.lsf][2][fr.bitrate_index] * 144000; - fr.framesize /= freqs[fr.sampling_frequency] << (fr.lsf); - fr.framesize = fr.framesize + fr.padding - 4; - } - break; - default: - System.err.printf("Sorry, layer %d not supported\n", fr.lay); - return (0); - } - /* print_header(fr); */ - - return 1; - } - - private static final String modes[] = { "Stereo", "Joint-Stereo", - "Dual-Channel", "Single-Channel" }; - private static final String layers[] = { "Unknown", "I", "II", "III" }; - - public final void print_header(final Frame fr) { - - System.err - .printf("MPEG %s, Layer: %s, Freq: %d, mode: %s, modext: %d, BPF : %d\n", - fr.mpeg25 ? "2.5" : (fr.lsf != 0 ? "2.0" : "1.0"), - layers[fr.lay], freqs[fr.sampling_frequency], - modes[fr.mode], fr.mode_ext, fr.framesize + 4); - System.err - .printf("Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.\n", - fr.stereo, fr.copyright != 0 ? "Yes" : "No", - fr.original != 0 ? "Yes" : "No", - fr.error_protection ? "Yes" : "No", fr.emphasis); - System.err.printf("Bitrate: %d Kbits/s, Extension value: %d\n", - tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index], fr.extension); - } - - public final void print_header_compact(final Frame fr) { - System.err.printf("MPEG %s layer %s, %d kbit/s, %d Hz %s\n", - fr.mpeg25 ? "2.5" : (fr.lsf != 0 ? "2.0" : "1.0"), - layers[fr.lay], - tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index], - freqs[fr.sampling_frequency], modes[fr.mode]); - } - - public final int getbits(final mpstr_tag mp, final int number_of_bits) { - long rval; - - if (number_of_bits <= 0 || null == mp.wordpointer) - return 0; - - { - rval = mp.wordpointer[mp.wordpointerPos + 0] & 0xff; - rval <<= 8; - rval |= mp.wordpointer[mp.wordpointerPos + 1] & 0xff; - rval <<= 8; - rval |= mp.wordpointer[mp.wordpointerPos + 2] & 0xff; - rval <<= mp.bitindex; - rval &= 0xffffffL; - - mp.bitindex += number_of_bits; - - rval >>= (24 - number_of_bits); - - mp.wordpointerPos += (mp.bitindex >> 3); - mp.bitindex &= 7; - } - return (int) rval; - } - - public final int getbits_fast(final mpstr_tag mp, final int number_of_bits) { - long rval; - - { - rval = mp.wordpointer[mp.wordpointerPos + 0] & 0xff; - rval <<= 8; - rval |= mp.wordpointer[mp.wordpointerPos + 1] & 0xff; - rval <<= mp.bitindex; - rval &= 0xffffL; - mp.bitindex += number_of_bits; - - rval >>= (16 - number_of_bits); - - mp.wordpointerPos += (mp.bitindex >> 3); - mp.bitindex &= 7; - } - return (int) rval; - } - - public final int set_pointer(final mpstr_tag mp, final int backstep) { - if (mp.fsizeold < 0 && backstep > 0) { - System.err.printf("hip: Can't step back %d bytes!\n", backstep); - return MPGLib.MP3_ERR; - } - byte[] bsbufold = mp.bsspace[1 - mp.bsnum]; - int bsbufoldPos = 512; - mp.wordpointerPos -= backstep; - if (backstep != 0) - System.arraycopy(bsbufold, bsbufoldPos + mp.fsizeold - backstep, - mp.wordpointer, mp.wordpointerPos, backstep); - mp.bitindex = 0; - return MPGLib.MP3_OK; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/DCT64.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/DCT64.java deleted file mode 100644 index a5ae530f3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/DCT64.java +++ /dev/null @@ -1,346 +0,0 @@ -/* - * dct64_i368.c - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - * Discrete Cosine Tansform (DCT) for subband synthesis - * optimized for machines with no auto-increment. - * The performance is highly compiler dependend. Maybe - * the dct64.c version for 'normal' processor may be faster - * even for Intel processors. - */ - -/* $Id: DCT64.java,v 1.7 2011/05/31 03:33:59 kenchis Exp $ */ - -package mpg; - -public class DCT64 { - - private TabInit tabInit; - - public void setModules(final TabInit ti) { - tabInit = ti; - } - - private void dct64_1(float[] out0, int out0Pos, float[] out1, int out1Pos, - float[] b1, int b2, float[] samples, int samplesPos) { - - { - float[]costab = tabInit.pnts[0]; - - b1[0x00] = samples[samplesPos+0x00] + samples[samplesPos+0x1F]; - b1[0x1F] = (samples[samplesPos+0x00] - samples[samplesPos+0x1F]) * costab[0x0]; - - b1[0x01] = samples[samplesPos+0x01] + samples[samplesPos+0x1E]; - b1[0x1E] = (samples[samplesPos+0x01] - samples[samplesPos+0x1E]) * costab[0x1]; - - b1[0x02] = samples[samplesPos+0x02] + samples[samplesPos+0x1D]; - b1[0x1D] = (samples[samplesPos+0x02] - samples[samplesPos+0x1D]) * costab[0x2]; - - b1[0x03] = samples[samplesPos+0x03] + samples[samplesPos+0x1C]; - b1[0x1C] = (samples[samplesPos+0x03] - samples[samplesPos+0x1C]) * costab[0x3]; - - b1[0x04] = samples[samplesPos+0x04] + samples[samplesPos+0x1B]; - b1[0x1B] = (samples[samplesPos+0x04] - samples[samplesPos+0x1B]) * costab[0x4]; - - b1[0x05] = samples[samplesPos+0x05] + samples[samplesPos+0x1A]; - b1[0x1A] = (samples[samplesPos+0x05] - samples[samplesPos+0x1A]) * costab[0x5]; - - b1[0x06] = samples[samplesPos+0x06] + samples[samplesPos+0x19]; - b1[0x19] = (samples[samplesPos+0x06] - samples[samplesPos+0x19]) * costab[0x6]; - - b1[0x07] = samples[samplesPos+0x07] + samples[samplesPos+0x18]; - b1[0x18] = (samples[samplesPos+0x07] - samples[samplesPos+0x18]) * costab[0x7]; - - b1[0x08] = samples[samplesPos+0x08] + samples[samplesPos+0x17]; - b1[0x17] = (samples[samplesPos+0x08] - samples[samplesPos+0x17]) * costab[0x8]; - - b1[0x09] = samples[samplesPos+0x09] + samples[samplesPos+0x16]; - b1[0x16] = (samples[samplesPos+0x09] - samples[samplesPos+0x16]) * costab[0x9]; - - b1[0x0A] = samples[samplesPos+0x0A] + samples[samplesPos+0x15]; - b1[0x15] = (samples[samplesPos+0x0A] - samples[samplesPos+0x15]) * costab[0xA]; - - b1[0x0B] = samples[samplesPos+0x0B] + samples[samplesPos+0x14]; - b1[0x14] = (samples[samplesPos+0x0B] - samples[samplesPos+0x14]) * costab[0xB]; - - b1[0x0C] = samples[samplesPos+0x0C] + samples[samplesPos+0x13]; - b1[0x13] = (samples[samplesPos+0x0C] - samples[samplesPos+0x13]) * costab[0xC]; - - b1[0x0D] = samples[samplesPos+0x0D] + samples[samplesPos+0x12]; - b1[0x12] = (samples[samplesPos+0x0D] - samples[samplesPos+0x12]) * costab[0xD]; - - b1[0x0E] = samples[samplesPos+0x0E] + samples[samplesPos+0x11]; - b1[0x11] = (samples[samplesPos+0x0E] - samples[samplesPos+0x11]) * costab[0xE]; - - b1[0x0F] = samples[samplesPos+0x0F] + samples[samplesPos+0x10]; - b1[0x10] = (samples[samplesPos+0x0F] - samples[samplesPos+0x10]) * costab[0xF]; - } - - - { - float[] costab = tabInit.pnts[1]; - - b1[b2 + 0x00] = b1[0x00] + b1[0x0F]; - b1[b2 + 0x0F] = (b1[0x00] - b1[0x0F]) * costab[0]; - b1[b2 + 0x01] = b1[0x01] + b1[0x0E]; - b1[b2 + 0x0E] = (b1[0x01] - b1[0x0E]) * costab[1]; - b1[b2 + 0x02] = b1[0x02] + b1[0x0D]; - b1[b2 + 0x0D] = (b1[0x02] - b1[0x0D]) * costab[2]; - b1[b2 + 0x03] = b1[0x03] + b1[0x0C]; - b1[b2 + 0x0C] = (b1[0x03] - b1[0x0C]) * costab[3]; - b1[b2 + 0x04] = b1[0x04] + b1[0x0B]; - b1[b2 + 0x0B] = (b1[0x04] - b1[0x0B]) * costab[4]; - b1[b2 + 0x05] = b1[0x05] + b1[0x0A]; - b1[b2 + 0x0A] = (b1[0x05] - b1[0x0A]) * costab[5]; - b1[b2 + 0x06] = b1[0x06] + b1[0x09]; - b1[b2 + 0x09] = (b1[0x06] - b1[0x09]) * costab[6]; - b1[b2 + 0x07] = b1[0x07] + b1[0x08]; - b1[b2 + 0x08] = (b1[0x07] - b1[0x08]) * costab[7]; - - b1[b2 + 0x10] = b1[0x10] + b1[0x1F]; - b1[b2 + 0x1F] = (b1[0x1F] - b1[0x10]) * costab[0]; - b1[b2 + 0x11] = b1[0x11] + b1[0x1E]; - b1[b2 + 0x1E] = (b1[0x1E] - b1[0x11]) * costab[1]; - b1[b2 + 0x12] = b1[0x12] + b1[0x1D]; - b1[b2 + 0x1D] = (b1[0x1D] - b1[0x12]) * costab[2]; - b1[b2 + 0x13] = b1[0x13] + b1[0x1C]; - b1[b2 + 0x1C] = (b1[0x1C] - b1[0x13]) * costab[3]; - b1[b2 + 0x14] = b1[0x14] + b1[0x1B]; - b1[b2 + 0x1B] = (b1[0x1B] - b1[0x14]) * costab[4]; - b1[b2 + 0x15] = b1[0x15] + b1[0x1A]; - b1[b2 + 0x1A] = (b1[0x1A] - b1[0x15]) * costab[5]; - b1[b2 + 0x16] = b1[0x16] + b1[0x19]; - b1[b2 + 0x19] = (b1[0x19] - b1[0x16]) * costab[6]; - b1[b2 + 0x17] = b1[0x17] + b1[0x18]; - b1[b2 + 0x18] = (b1[0x18] - b1[0x17]) * costab[7]; - } - - { - float[] costab = tabInit.pnts[2]; - - b1[0x00] = b1[b2 + 0x00] + b1[b2 + 0x07]; - b1[0x07] = (b1[b2 + 0x00] - b1[b2 + 0x07]) * costab[0]; - b1[0x01] = b1[b2 + 0x01] + b1[b2 + 0x06]; - b1[0x06] = (b1[b2 + 0x01] - b1[b2 + 0x06]) * costab[1]; - b1[0x02] = b1[b2 + 0x02] + b1[b2 + 0x05]; - b1[0x05] = (b1[b2 + 0x02] - b1[b2 + 0x05]) * costab[2]; - b1[0x03] = b1[b2 + 0x03] + b1[b2 + 0x04]; - b1[0x04] = (b1[b2 + 0x03] - b1[b2 + 0x04]) * costab[3]; - - b1[0x08] = b1[b2 + 0x08] + b1[b2 + 0x0F]; - b1[0x0F] = (b1[b2 + 0x0F] - b1[b2 + 0x08]) * costab[0]; - b1[0x09] = b1[b2 + 0x09] + b1[b2 + 0x0E]; - b1[0x0E] = (b1[b2 + 0x0E] - b1[b2 + 0x09]) * costab[1]; - b1[0x0A] = b1[b2 + 0x0A] + b1[b2 + 0x0D]; - b1[0x0D] = (b1[b2 + 0x0D] - b1[b2 + 0x0A]) * costab[2]; - b1[0x0B] = b1[b2 + 0x0B] + b1[b2 + 0x0C]; - b1[0x0C] = (b1[b2 + 0x0C] - b1[b2 + 0x0B]) * costab[3]; - - b1[0x10] = b1[b2 + 0x10] + b1[b2 + 0x17]; - b1[0x17] = (b1[b2 + 0x10] - b1[b2 + 0x17]) * costab[0]; - b1[0x11] = b1[b2 + 0x11] + b1[b2 + 0x16]; - b1[0x16] = (b1[b2 + 0x11] - b1[b2 + 0x16]) * costab[1]; - b1[0x12] = b1[b2 + 0x12] + b1[b2 + 0x15]; - b1[0x15] = (b1[b2 + 0x12] - b1[b2 + 0x15]) * costab[2]; - b1[0x13] = b1[b2 + 0x13] + b1[b2 + 0x14]; - b1[0x14] = (b1[b2 + 0x13] - b1[b2 + 0x14]) * costab[3]; - - b1[0x18] = b1[b2 + 0x18] + b1[b2 + 0x1F]; - b1[0x1F] = (b1[b2 + 0x1F] - b1[b2 + 0x18]) * costab[0]; - b1[0x19] = b1[b2 + 0x19] + b1[b2 + 0x1E]; - b1[0x1E] = (b1[b2 + 0x1E] - b1[b2 + 0x19]) * costab[1]; - b1[0x1A] = b1[b2 + 0x1A] + b1[b2 + 0x1D]; - b1[0x1D] = (b1[b2 + 0x1D] - b1[b2 + 0x1A]) * costab[2]; - b1[0x1B] = b1[b2 + 0x1B] + b1[b2 + 0x1C]; - b1[0x1C] = (b1[b2 + 0x1C] - b1[b2 + 0x1B]) * costab[3]; - } - - { - final float cos0 = tabInit.pnts[3][0]; - final float cos1 = tabInit.pnts[3][1]; - - b1[b2 + 0x00] = b1[0x00] + b1[0x03]; - b1[b2 + 0x03] = (b1[0x00] - b1[0x03]) * cos0; - b1[b2 + 0x01] = b1[0x01] + b1[0x02]; - b1[b2 + 0x02] = (b1[0x01] - b1[0x02]) * cos1; - - b1[b2 + 0x04] = b1[0x04] + b1[0x07]; - b1[b2 + 0x07] = (b1[0x07] - b1[0x04]) * cos0; - b1[b2 + 0x05] = b1[0x05] + b1[0x06]; - b1[b2 + 0x06] = (b1[0x06] - b1[0x05]) * cos1; - - b1[b2 + 0x08] = b1[0x08] + b1[0x0B]; - b1[b2 + 0x0B] = (b1[0x08] - b1[0x0B]) * cos0; - b1[b2 + 0x09] = b1[0x09] + b1[0x0A]; - b1[b2 + 0x0A] = (b1[0x09] - b1[0x0A]) * cos1; - - b1[b2 + 0x0C] = b1[0x0C] + b1[0x0F]; - b1[b2 + 0x0F] = (b1[0x0F] - b1[0x0C]) * cos0; - b1[b2 + 0x0D] = b1[0x0D] + b1[0x0E]; - b1[b2 + 0x0E] = (b1[0x0E] - b1[0x0D]) * cos1; - - b1[b2 + 0x10] = b1[0x10] + b1[0x13]; - b1[b2 + 0x13] = (b1[0x10] - b1[0x13]) * cos0; - b1[b2 + 0x11] = b1[0x11] + b1[0x12]; - b1[b2 + 0x12] = (b1[0x11] - b1[0x12]) * cos1; - - b1[b2 + 0x14] = b1[0x14] + b1[0x17]; - b1[b2 + 0x17] = (b1[0x17] - b1[0x14]) * cos0; - b1[b2 + 0x15] = b1[0x15] + b1[0x16]; - b1[b2 + 0x16] = (b1[0x16] - b1[0x15]) * cos1; - - b1[b2 + 0x18] = b1[0x18] + b1[0x1B]; - b1[b2 + 0x1B] = (b1[0x18] - b1[0x1B]) * cos0; - b1[b2 + 0x19] = b1[0x19] + b1[0x1A]; - b1[b2 + 0x1A] = (b1[0x19] - b1[0x1A]) * cos1; - - b1[b2 + 0x1C] = b1[0x1C] + b1[0x1F]; - b1[b2 + 0x1F] = (b1[0x1F] - b1[0x1C]) * cos0; - b1[b2 + 0x1D] = b1[0x1D] + b1[0x1E]; - b1[b2 + 0x1E] = (b1[0x1E] - b1[0x1D]) * cos1; - } - - { - final float cos0 = tabInit.pnts[4][0]; - - b1[0x00] = b1[b2 + 0x00] + b1[b2 + 0x01]; - b1[0x01] = (b1[b2 + 0x00] - b1[b2 + 0x01]) * cos0; - b1[0x02] = b1[b2 + 0x02] + b1[b2 + 0x03]; - b1[0x03] = (b1[b2 + 0x03] - b1[b2 + 0x02]) * cos0; - b1[0x02] += b1[0x03]; - - b1[0x04] = b1[b2 + 0x04] + b1[b2 + 0x05]; - b1[0x05] = (b1[b2 + 0x04] - b1[b2 + 0x05]) * cos0; - b1[0x06] = b1[b2 + 0x06] + b1[b2 + 0x07]; - b1[0x07] = (b1[b2 + 0x07] - b1[b2 + 0x06]) * cos0; - b1[0x06] += b1[0x07]; - b1[0x04] += b1[0x06]; - b1[0x06] += b1[0x05]; - b1[0x05] += b1[0x07]; - - b1[0x08] = b1[b2 + 0x08] + b1[b2 + 0x09]; - b1[0x09] = (b1[b2 + 0x08] - b1[b2 + 0x09]) * cos0; - b1[0x0A] = b1[b2 + 0x0A] + b1[b2 + 0x0B]; - b1[0x0B] = (b1[b2 + 0x0B] - b1[b2 + 0x0A]) * cos0; - b1[0x0A] += b1[0x0B]; - - b1[0x0C] = b1[b2 + 0x0C] + b1[b2 + 0x0D]; - b1[0x0D] = (b1[b2 + 0x0C] - b1[b2 + 0x0D]) * cos0; - b1[0x0E] = b1[b2 + 0x0E] + b1[b2 + 0x0F]; - b1[0x0F] = (b1[b2 + 0x0F] - b1[b2 + 0x0E]) * cos0; - b1[0x0E] += b1[0x0F]; - b1[0x0C] += b1[0x0E]; - b1[0x0E] += b1[0x0D]; - b1[0x0D] += b1[0x0F]; - - b1[0x10] = b1[b2 + 0x10] + b1[b2 + 0x11]; - b1[0x11] = (b1[b2 + 0x10] - b1[b2 + 0x11]) * cos0; - b1[0x12] = b1[b2 + 0x12] + b1[b2 + 0x13]; - b1[0x13] = (b1[b2 + 0x13] - b1[b2 + 0x12]) * cos0; - b1[0x12] += b1[0x13]; - - b1[0x14] = b1[b2 + 0x14] + b1[b2 + 0x15]; - b1[0x15] = (b1[b2 + 0x14] - b1[b2 + 0x15]) * cos0; - b1[0x16] = b1[b2 + 0x16] + b1[b2 + 0x17]; - b1[0x17] = (b1[b2 + 0x17] - b1[b2 + 0x16]) * cos0; - b1[0x16] += b1[0x17]; - b1[0x14] += b1[0x16]; - b1[0x16] += b1[0x15]; - b1[0x15] += b1[0x17]; - - b1[0x18] = b1[b2 + 0x18] + b1[b2 + 0x19]; - b1[0x19] = (b1[b2 + 0x18] - b1[b2 + 0x19]) * cos0; - b1[0x1A] = b1[b2 + 0x1A] + b1[b2 + 0x1B]; - b1[0x1B] = (b1[b2 + 0x1B] - b1[b2 + 0x1A]) * cos0; - b1[0x1A] += b1[0x1B]; - - b1[0x1C] = b1[b2 + 0x1C] + b1[b2 + 0x1D]; - b1[0x1D] = (b1[b2 + 0x1C] - b1[b2 + 0x1D]) * cos0; - b1[0x1E] = b1[b2 + 0x1E] + b1[b2 + 0x1F]; - b1[0x1F] = (b1[b2 + 0x1F] - b1[b2 + 0x1E]) * cos0; - b1[0x1E] += b1[0x1F]; - b1[0x1C] += b1[0x1E]; - b1[0x1E] += b1[0x1D]; - b1[0x1D] += b1[0x1F]; - } - - out0[out0Pos+(0x10 * 16)] = b1[0x00]; - out0[out0Pos+(0x10 * 12)] = b1[0x04]; - out0[out0Pos+(0x10 * 8)] = b1[0x02]; - out0[out0Pos+(0x10 * 4)] = b1[0x06]; - out0[out0Pos+(0x10 * 0)] = b1[0x01]; - out1[out1Pos+(0x10 * 0)] = b1[0x01]; - out1[out1Pos+(0x10 * 4)] = b1[0x05]; - out1[out1Pos+(0x10 * 8)] = b1[0x03]; - out1[out1Pos+(0x10 * 12)] = b1[0x07]; - - b1[0x08] += b1[0x0C]; - out0[out0Pos+(0x10 * 14)] = b1[0x08]; - b1[0x0C] += b1[0x0a]; - out0[out0Pos+(0x10 * 10)] = b1[0x0C]; - b1[0x0A] += b1[0x0E]; - out0[out0Pos+(0x10 * 6)] = b1[0x0A]; - b1[0x0E] += b1[0x09]; - out0[out0Pos+(0x10 * 2)] = b1[0x0E]; - b1[0x09] += b1[0x0D]; - out1[out1Pos+(0x10 * 2)] = b1[0x09]; - b1[0x0D] += b1[0x0B]; - out1[out1Pos+(0x10 * 6)] = b1[0x0D]; - b1[0x0B] += b1[0x0F]; - out1[out1Pos+(0x10 * 10)] = b1[0x0B]; - out1[out1Pos+(0x10 * 14)] = b1[0x0F]; - - b1[0x18] += b1[0x1C]; - out0[out0Pos+(0x10 * 15)] = b1[0x10] + b1[0x18]; - out0[out0Pos+(0x10 * 13)] = b1[0x18] + b1[0x14]; - b1[0x1C] += b1[0x1a]; - out0[out0Pos+(0x10 * 11)] = b1[0x14] + b1[0x1C]; - out0[out0Pos+(0x10 * 9)] = b1[0x1C] + b1[0x12]; - b1[0x1A] += b1[0x1E]; - out0[out0Pos+(0x10 * 7)] = b1[0x12] + b1[0x1A]; - out0[out0Pos+(0x10 * 5)] = b1[0x1A] + b1[0x16]; - b1[0x1E] += b1[0x19]; - out0[out0Pos+(0x10 * 3)] = b1[0x16] + b1[0x1E]; - out0[out0Pos+(0x10 * 1)] = b1[0x1E] + b1[0x11]; - b1[0x19] += b1[0x1D]; - out1[out1Pos+(0x10 * 1)] = b1[0x11] + b1[0x19]; - out1[out1Pos+(0x10 * 3)] = b1[0x19] + b1[0x15]; - b1[0x1D] += b1[0x1B]; - out1[out1Pos+(0x10 * 5)] = b1[0x15] + b1[0x1D]; - out1[out1Pos+(0x10 * 7)] = b1[0x1D] + b1[0x13]; - b1[0x1B] += b1[0x1F]; - out1[out1Pos+(0x10 * 9)] = b1[0x13] + b1[0x1B]; - out1[out1Pos+(0x10 * 11)] = b1[0x1B] + b1[0x17]; - out1[out1Pos+(0x10 * 13)] = b1[0x17] + b1[0x1F]; - out1[out1Pos+(0x10 * 15)] = b1[0x1F]; - } - - /* - * the call via dct64 is a trick to force GCC to use - * (new) registers for the b1,b2 pointer to the bufs[xx] field - */ - public void dct64(float[] a, int aPos, float[] b, int bPos, float[] c, - int cPos) { - float bufs[] = new float[0x40]; - dct64_1(a, aPos, b, bPos, bufs, 0x20, c, cPos); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Decode.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Decode.java deleted file mode 100644 index 673105890..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Decode.java +++ /dev/null @@ -1,325 +0,0 @@ -/* - * decode_i396.c: Mpeg Layer-1,2,3 audio decoder - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - * Slighlty optimized for machines without autoincrement/decrement. - * The performance is highly compiler dependend. Maybe - * the decode.c version for 'normal' processor may be faster - * even for Intel processors. - */ - -/* $Id: Decode.java,v 1.10 2011/05/31 03:33:59 kenchis Exp $ */ - -package mpg; - -import mpg.MPGLib.ProcessedBytes; -import mpg.MPGLib.mpstr_tag; - -public class Decode { - - private TabInit tab; - private DCT64 dct64; - - public void setModules(TabInit t, DCT64 d) { - tab = t; - dct64 = d; - } - - interface Factory<T> { - public T create(float x); - } - - /* old WRITE_SAMPLE_CLIPPED */ - private <T> int WRITE_SAMPLE_CLIPPED(int samples, float sum, int clip, - T[] out, Factory<T> tFactory) { - /* old WRITE_SAMPLE_CLIPPED */ - if ((sum) > 32767.0) { - out[samples] = tFactory.create(32767); - (clip)++; - } else if ((sum) < -32768.0) { - out[samples] = tFactory.create(-32768); - (clip)++; - } else { - out[samples] = tFactory.create((int) ((sum) > 0 ? (sum) + 0.5 - : (sum) - 0.5)); - } - return clip; - } - - private <T> void WRITE_SAMPLE_UNCLIPPED(int samples, float sum, int clip, - T[] out, Factory<T> tFactory) { - out[samples] = tFactory.create(sum); - } - - <T>int synth_1to1_mono(mpstr_tag mp, float[] bandPtr, int bandPos, T[] out, - ProcessedBytes pnt, Factory<T> tFactory) { - @SuppressWarnings("unchecked") - T[] samples_tmp = (T[]) (new Object[64]); - int tmp1 = 0; - int i, ret; - ProcessedBytes pnt1 = new ProcessedBytes(); - - ret = synth_1to1(mp, bandPtr, bandPos, 0, samples_tmp, pnt1, tFactory); - int outPos = pnt.pb; - - for (i = 0; i < 32; i++) { - out[outPos++] = samples_tmp[tmp1]; - tmp1 += 2; - } - pnt.pb += 32; - - return ret; - } - - <T> int synth_1to1_mono_unclipped(mpstr_tag mp, float[] bandPtr, - int bandPos, T[] out, ProcessedBytes pnt, - Factory<T> tFactory) { - @SuppressWarnings("unchecked") - T[] samples_tmp = (T[]) (new Object[64]); - int tmp1 = 0; - int i, ret; - ProcessedBytes pnt1 = new ProcessedBytes(); - - ret = synth_1to1_unclipped(mp, bandPtr, bandPos, 0, samples_tmp, - pnt1, tFactory); - int outPos = pnt.pb; - - for (i = 0; i < 32; i++) { - out[outPos++] = samples_tmp[tmp1]; - tmp1 += 2; - } - pnt.pb += 32; - - return ret; - } - - private static final int step = 2; - - <T>int synth_1to1(mpstr_tag mp, float[] bandPtr, int bandPos, int channel, - T[] out, ProcessedBytes pnt, Factory<T> tFactory) { - int bo; - int samples = pnt.pb; - float[] b0; - int b0Pos; - float buf[][]; - int clip = 0; - int bo1; - - bo = mp.synth_bo; - - if (0 == channel) { - bo--; - bo &= 0xf; - buf = mp.synth_buffs[0]; - } else { - samples ++; - buf = mp.synth_buffs[1]; - } - - if ((bo & 0x1) != 0) { - b0 = buf[0]; - b0Pos = 0; - bo1 = bo; - dct64.dct64(buf[1], ((bo + 1) & 0xf), buf[0], bo, bandPtr, bandPos); - } else { - b0 = buf[1]; - b0Pos = 0; - bo1 = bo + 1; - dct64.dct64(buf[0], bo, buf[1], bo + 1, bandPtr, bandPos); - } - - mp.synth_bo = bo; - - { - int j; - int window = 16 - bo1; - - for (j = 16; j != 0; j--, b0Pos += 0x10, window += 0x20, samples += step) { - float sum; - sum = tab.decwin[window + 0x0] * b0[b0Pos + 0x0]; - sum -= tab.decwin[window + 0x1] * b0[b0Pos + 0x1]; - sum += tab.decwin[window + 0x2] * b0[b0Pos + 0x2]; - sum -= tab.decwin[window + 0x3] * b0[b0Pos + 0x3]; - sum += tab.decwin[window + 0x4] * b0[b0Pos + 0x4]; - sum -= tab.decwin[window + 0x5] * b0[b0Pos + 0x5]; - sum += tab.decwin[window + 0x6] * b0[b0Pos + 0x6]; - sum -= tab.decwin[window + 0x7] * b0[b0Pos + 0x7]; - sum += tab.decwin[window + 0x8] * b0[b0Pos + 0x8]; - sum -= tab.decwin[window + 0x9] * b0[b0Pos + 0x9]; - sum += tab.decwin[window + 0xA] * b0[b0Pos + 0xA]; - sum -= tab.decwin[window + 0xB] * b0[b0Pos + 0xB]; - sum += tab.decwin[window + 0xC] * b0[b0Pos + 0xC]; - sum -= tab.decwin[window + 0xD] * b0[b0Pos + 0xD]; - sum += tab.decwin[window + 0xE] * b0[b0Pos + 0xE]; - sum -= tab.decwin[window + 0xF] * b0[b0Pos + 0xF]; - clip = WRITE_SAMPLE_CLIPPED(samples, sum, clip, out, tFactory); - } - - { - float sum; - sum = tab.decwin[window + 0x0] * b0[b0Pos + 0x0]; - sum += tab.decwin[window + 0x2] * b0[b0Pos + 0x2]; - sum += tab.decwin[window + 0x4] * b0[b0Pos + 0x4]; - sum += tab.decwin[window + 0x6] * b0[b0Pos + 0x6]; - sum += tab.decwin[window + 0x8] * b0[b0Pos + 0x8]; - sum += tab.decwin[window + 0xA] * b0[b0Pos + 0xA]; - sum += tab.decwin[window + 0xC] * b0[b0Pos + 0xC]; - sum += tab.decwin[window + 0xE] * b0[b0Pos + 0xE]; - clip = WRITE_SAMPLE_CLIPPED(samples, sum, clip, out, tFactory); - b0Pos -= 0x10; - window -= 0x20; - samples += step; - } - window += bo1 << 1; - - for (j = 15; j != 0; j--, b0Pos -= 0x10, window -= 0x20, samples += step) { - float sum; - sum = -tab.decwin[window + -0x1] * b0[b0Pos + 0x0]; - sum -= tab.decwin[window + -0x2] * b0[b0Pos + 0x1]; - sum -= tab.decwin[window + -0x3] * b0[b0Pos + 0x2]; - sum -= tab.decwin[window + -0x4] * b0[b0Pos + 0x3]; - sum -= tab.decwin[window + -0x5] * b0[b0Pos + 0x4]; - sum -= tab.decwin[window + -0x6] * b0[b0Pos + 0x5]; - sum -= tab.decwin[window + -0x7] * b0[b0Pos + 0x6]; - sum -= tab.decwin[window + -0x8] * b0[b0Pos + 0x7]; - sum -= tab.decwin[window + -0x9] * b0[b0Pos + 0x8]; - sum -= tab.decwin[window + -0xA] * b0[b0Pos + 0x9]; - sum -= tab.decwin[window + -0xB] * b0[b0Pos + 0xA]; - sum -= tab.decwin[window + -0xC] * b0[b0Pos + 0xB]; - sum -= tab.decwin[window + -0xD] * b0[b0Pos + 0xC]; - sum -= tab.decwin[window + -0xE] * b0[b0Pos + 0xD]; - sum -= tab.decwin[window + -0xF] * b0[b0Pos + 0xE]; - sum -= tab.decwin[window + -0x0] * b0[b0Pos + 0xF]; - - clip = WRITE_SAMPLE_CLIPPED(samples, sum, clip, out, tFactory); - } - } - pnt.pb += 64; - - return clip; - } - - <T>int - synth_1to1_unclipped(mpstr_tag mp, float[] bandPtr, int bandPos, int channel, T[] out, ProcessedBytes pnt, Factory<T> tFactory) - { - int bo; - int samples = pnt.pb; - float[] b0; - int b0Pos; - float buf[][]; - int clip = 0; - int bo1; - - bo = mp.synth_bo; - - if (0 == channel) { - bo--; - bo &= 0xf; - buf = mp.synth_buffs[0]; - } else { - samples ++; - buf = mp.synth_buffs[1]; - } - - if ((bo & 0x1) != 0) { - b0 = buf[0]; - b0Pos = 0; - bo1 = bo; - dct64.dct64(buf[1], ((bo + 1) & 0xf), buf[0], bo, bandPtr, bandPos); - } else { - b0 = buf[1]; - b0Pos = 0; - bo1 = bo + 1; - dct64.dct64(buf[0], bo, buf[1], bo + 1, bandPtr, bandPos); - } - - mp.synth_bo = bo; - - { - int j; - int window = 16 - bo1; - - for (j = 16; j != 0; j--, b0Pos += 0x10, window += 0x20, samples += step) { - float sum; - sum = tab.decwin[window + 0x0] * b0[b0Pos + 0x0]; - sum -= tab.decwin[window + 0x1] * b0[b0Pos + 0x1]; - sum += tab.decwin[window + 0x2] * b0[b0Pos + 0x2]; - sum -= tab.decwin[window + 0x3] * b0[b0Pos + 0x3]; - sum += tab.decwin[window + 0x4] * b0[b0Pos + 0x4]; - sum -= tab.decwin[window + 0x5] * b0[b0Pos + 0x5]; - sum += tab.decwin[window + 0x6] * b0[b0Pos + 0x6]; - sum -= tab.decwin[window + 0x7] * b0[b0Pos + 0x7]; - sum += tab.decwin[window + 0x8] * b0[b0Pos + 0x8]; - sum -= tab.decwin[window + 0x9] * b0[b0Pos + 0x9]; - sum += tab.decwin[window + 0xA] * b0[b0Pos + 0xA]; - sum -= tab.decwin[window + 0xB] * b0[b0Pos + 0xB]; - sum += tab.decwin[window + 0xC] * b0[b0Pos + 0xC]; - sum -= tab.decwin[window + 0xD] * b0[b0Pos + 0xD]; - sum += tab.decwin[window + 0xE] * b0[b0Pos + 0xE]; - sum -= tab.decwin[window + 0xF] * b0[b0Pos + 0xF]; - WRITE_SAMPLE_UNCLIPPED(samples, sum, clip, out, tFactory); - } - - { - float sum; - sum = tab.decwin[window + 0x0] * b0[b0Pos + 0x0]; - sum += tab.decwin[window + 0x2] * b0[b0Pos + 0x2]; - sum += tab.decwin[window + 0x4] * b0[b0Pos + 0x4]; - sum += tab.decwin[window + 0x6] * b0[b0Pos + 0x6]; - sum += tab.decwin[window + 0x8] * b0[b0Pos + 0x8]; - sum += tab.decwin[window + 0xA] * b0[b0Pos + 0xA]; - sum += tab.decwin[window + 0xC] * b0[b0Pos + 0xC]; - sum += tab.decwin[window + 0xE] * b0[b0Pos + 0xE]; - WRITE_SAMPLE_UNCLIPPED(samples, sum, clip, out, tFactory); - b0Pos -= 0x10; - window -= 0x20; - samples += step; - } - window += bo1 << 1; - - for (j = 15; j != 0; j--, b0Pos -= 0x10, window -= 0x20, samples += step) { - float sum; - sum = -tab.decwin[window + -0x1] * b0[b0Pos + 0x0]; - sum -= tab.decwin[window + -0x2] * b0[b0Pos + 0x1]; - sum -= tab.decwin[window + -0x3] * b0[b0Pos + 0x2]; - sum -= tab.decwin[window + -0x4] * b0[b0Pos + 0x3]; - sum -= tab.decwin[window + -0x5] * b0[b0Pos + 0x4]; - sum -= tab.decwin[window + -0x6] * b0[b0Pos + 0x5]; - sum -= tab.decwin[window + -0x7] * b0[b0Pos + 0x6]; - sum -= tab.decwin[window + -0x8] * b0[b0Pos + 0x7]; - sum -= tab.decwin[window + -0x9] * b0[b0Pos + 0x8]; - sum -= tab.decwin[window + -0xA] * b0[b0Pos + 0x9]; - sum -= tab.decwin[window + -0xB] * b0[b0Pos + 0xA]; - sum -= tab.decwin[window + -0xC] * b0[b0Pos + 0xB]; - sum -= tab.decwin[window + -0xD] * b0[b0Pos + 0xC]; - sum -= tab.decwin[window + -0xE] * b0[b0Pos + 0xD]; - sum -= tab.decwin[window + -0xF] * b0[b0Pos + 0xE]; - sum -= tab.decwin[window + -0x0] * b0[b0Pos + 0xF]; - - WRITE_SAMPLE_UNCLIPPED(samples, sum, clip, out, tFactory); - } - } - pnt.pb += 64; - - return clip; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Frame.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Frame.java deleted file mode 100644 index bddbf6fd0..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Frame.java +++ /dev/null @@ -1,31 +0,0 @@ -package mpg; - -import mpg.L2Tables.al_table2; - -public class Frame { - - int stereo; - int jsbound; - int single; /* single channel (monophonic) */ - int lsf; /* 0 = MPEG-1, 1 = MPEG-2/2.5 */ - boolean mpeg25; /* 1 = MPEG-2.5, 0 = MPEG-1/2 */ - int lay; /* Layer */ - boolean error_protection; /* 1 = CRC-16 code following header */ - int bitrate_index; - int sampling_frequency; /* sample rate of decompressed audio in Hz */ - int padding; - int extension; - int mode; - int mode_ext; - int copyright; - int original; - int emphasis; - int framesize; /* computed framesize */ - - /* AF: ADDED FOR LAYER1/LAYER2 */ - int II_sblimit; - al_table2 []alloc; - int down_sample_sblimit; - int down_sample; - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Huffman.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Huffman.java deleted file mode 100644 index f8b6a75fc..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Huffman.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * huffman tables ... recalcualted to work with my optimzed - * decoder scheme (MH) - * - * probably we could save a few bytes of memory, because the - * smaller tables are often the part of a bigger table - */ - -package mpg; - -public class Huffman { - - public static class newhuff { - public newhuff(int bits, short[] t) { - linbits = bits; - table = t; - } - - public final int linbits; - public final short[] table; - }; - - private static final short tab0[] = { 0 }; - - private static final short tab1[] = { -5, -3, -1, 17, 1, 16, 0 }; - - private static final short tab2[] = { -15, -11, -9, -5, -3, -1, 34, 2, 18, - -1, 33, 32, 17, -1, 1, 16, 0 }; - - private static final short tab3[] = { -13, -11, -9, -5, -3, -1, 34, 2, 18, - -1, 33, 32, 16, 17, -1, 1, 0 }; - - private static final short tab5[] = { -29, -25, -23, -15, -7, -5, -3, -1, - 51, 35, 50, 49, -3, -1, 19, 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, - 32, 17, -1, 1, 16, 0 }; - - private static final short tab6[] = { -25, -19, -13, -9, -5, -3, -1, 51, 3, - 35, -1, 50, 48, -1, 19, 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, - -1, 17, -1, 16, 0 }; - - private static final short tab7[] = { -69, -65, -57, -39, -29, -17, -11, - -7, -3, -1, 85, 69, -1, 84, 83, -1, 53, 68, -3, -1, 37, 82, 21, -5, - -1, 81, -1, 5, 52, -1, 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, - 65, 64, -11, -7, -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, - 34, 18, -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0 }; - - private static final short tab8[] = { -65, -63, -59, -45, -31, -19, -13, - -7, -5, -3, -1, 85, 84, 69, 83, -3, -1, 53, 68, 37, -3, -1, 82, 5, - 21, -5, -1, 81, -1, 52, 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, - 65, -3, -1, 4, 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, - 34, -1, 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0 }; - - private static final short tab9[] = { -63, -53, -41, -29, -19, -11, -5, -3, - -1, 85, 69, 53, -1, 83, -1, 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, - -1, 81, 52, -1, 67, -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, - 20, 65, -5, -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, - 2, 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0 }; - - private static final short tab10[] = { -125, -121, -111, -83, -55, -35, - -21, -13, -7, -3, -1, 119, 103, -1, 118, 87, -3, -1, 117, 102, 71, - -3, -1, 116, 86, -1, 101, 55, -9, -3, -1, 115, 70, -3, -1, 85, 84, - 99, -1, 39, 114, -11, -5, -3, -1, 100, 7, 112, -1, 98, -1, 69, 53, - -5, -1, 6, -1, 83, 68, 23, -17, -5, -1, 113, -1, 54, 38, -5, -3, - -1, 37, 82, 21, -1, 81, -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, - 80, -19, -11, -7, -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, - 64, 35, -1, 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, - -1, 2, 32, 17, -1, 1, 16, 0 }; - - private static final short tab11[] = { -121, -113, -89, -59, -43, -27, -17, - -7, -3, -1, 119, 103, -1, 118, 117, -3, -1, 102, 71, -1, 116, -1, - 87, 85, -5, -3, -1, 86, 101, 55, -1, 115, 70, -9, -7, -3, -1, 69, - 84, -1, 53, 83, 39, -1, 114, -1, 100, 7, -5, -1, 113, -1, 23, 112, - -3, -1, 54, 99, -1, 96, -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, - 98, -3, -1, 38, 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, - 51, -1, 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, - 50, -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2, 32, - 17, -3, -1, 1, 16, 0 }; - - private static final short tab12[] = { -115, -99, -73, -45, -27, -17, -9, - -5, -3, -1, 119, 103, 118, -1, 87, 117, -3, -1, 102, 71, -1, 116, - 101, -3, -1, 86, 55, -3, -1, 115, 85, 39, -7, -3, -1, 114, 70, -1, - 100, 23, -5, -1, 113, -1, 7, 112, -1, 54, 99, -13, -9, -3, -1, 69, - 84, -1, 68, -1, 6, 5, -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, - 53, 83, -1, 37, 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, - -1, 80, 4, 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, - -3, -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1, 2, - 32, 0, 17, -1, 1, 16 }; - - private static final short tab13[] = { -509, -503, -475, -405, -333, -265, - -205, -153, -115, -83, -53, -35, -21, -13, -9, -7, -5, -3, -1, 254, - 252, 253, 237, 255, -1, 239, 223, -3, -1, 238, 207, -1, 222, 191, - -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1, 236, 221, -9, -5, - -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249, 234, -1, 189, - 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158, -5, -1, 142, - -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1, 203, 246, - 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245, 231, -1, - 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1, 63, -1, - 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15, -5, -3, - -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1, 200, 214, - 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1, 240, -1, - 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1, 46, 14, - -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3, -1, 199, - 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1, 198, 61, - -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5, -1, 183, - -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167, 151, 75, - 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76, 196, -1, - 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137, 28, -43, - -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106, -5, -3, - -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43, -1, 165, - 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178, -11, - -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1, 58, 163, - -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161, -3, -1, - 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88, -1, 133, - 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1, 131, -1, - 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25, 145, -3, - -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100, 40, -1, 130, - 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113, -1, 85, 7, -7, - -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38, -1, 98, 53, -5, -1, - 129, -1, 8, 128, -3, -1, 22, 97, -1, 6, 96, -13, -9, -5, -3, -1, - 83, 68, 37, -1, 82, 5, -1, 21, 81, -7, -3, -1, 52, 67, -1, 80, 36, - -3, -1, 66, 51, 20, -19, -11, -5, -1, 65, -1, 4, 64, -3, -1, 35, - 50, 19, -3, -1, 49, 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, - -1, 17, 1, 16, 0 }; - - private static final short tab15[] = { -495, -445, -355, -263, -183, -115, - -77, -43, -27, -13, -7, -3, -1, 255, 239, -1, 254, 223, -1, 238, - -1, 253, 207, -7, -3, -1, 252, 222, -1, 237, 191, -1, 251, -1, 206, - 236, -7, -3, -1, 221, 175, -1, 250, 190, -3, -1, 235, 205, -1, 220, - 159, -15, -7, -3, -1, 249, 234, -1, 189, 219, -3, -1, 143, 248, -1, - 204, 158, -7, -3, -1, 233, 127, -1, 247, 173, -3, -1, 218, 188, -1, - 111, -1, 174, 15, -19, -11, -3, -1, 203, 246, -3, -1, 142, 232, -1, - 95, 157, -3, -1, 245, 126, -1, 231, 172, -9, -3, -1, 202, 187, -3, - -1, 217, 141, 79, -3, -1, 244, 63, -1, 243, 216, -33, -17, -9, -3, - -1, 230, 47, -1, 242, -1, 110, 240, -3, -1, 31, 241, -1, 156, 201, - -7, -3, -1, 94, 171, -1, 186, 229, -3, -1, 125, 215, -1, 78, 228, - -15, -7, -3, -1, 140, 200, -1, 62, 109, -3, -1, 214, 227, -1, 155, - 185, -7, -3, -1, 46, 170, -1, 226, 30, -5, -1, 225, -1, 14, 224, - -1, 93, 213, -45, -25, -13, -7, -3, -1, 124, 199, -1, 77, 139, -1, - 212, -1, 184, 154, -7, -3, -1, 169, 108, -1, 198, 61, -1, 211, 210, - -9, -5, -3, -1, 45, 13, 29, -1, 123, 183, -5, -1, 209, -1, 92, 208, - -1, 197, 138, -17, -7, -3, -1, 168, 76, -1, 196, 107, -5, -1, 182, - -1, 153, 12, -1, 60, 195, -9, -3, -1, 122, 167, -1, 166, -1, 192, - 11, -1, 194, -1, 44, 91, -55, -29, -15, -7, -3, -1, 181, 28, -1, - 137, 152, -3, -1, 193, 75, -1, 180, 106, -5, -3, -1, 59, 121, 179, - -3, -1, 151, 136, -1, 43, 90, -11, -5, -1, 178, -1, 165, 27, -1, - 177, -1, 176, 105, -7, -3, -1, 150, 74, -1, 164, 120, -3, -1, 135, - 58, 163, -17, -7, -3, -1, 89, 149, -1, 42, 162, -3, -1, 26, 161, - -3, -1, 10, 160, 104, -7, -3, -1, 134, 73, -1, 148, 57, -5, -1, - 147, -1, 119, 9, -1, 88, 133, -53, -29, -13, -7, -3, -1, 41, 103, - -1, 118, 146, -1, 145, -1, 25, 144, -7, -3, -1, 72, 132, -1, 87, - 117, -3, -1, 56, 131, -1, 102, 71, -7, -3, -1, 40, 130, -1, 24, - 129, -7, -3, -1, 116, 8, -1, 128, 86, -3, -1, 101, 55, -1, 115, 70, - -17, -7, -3, -1, 39, 114, -1, 100, 23, -3, -1, 85, 113, -3, -1, 7, - 112, 54, -7, -3, -1, 99, 69, -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, - 96, 53, -33, -19, -9, -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, - 21, 81, -3, -1, 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, - -1, 20, 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48, - 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16, 0 }; - - private static final short tab16[] = { -509, -503, -461, -323, -103, -37, - -27, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1, 207, 252, -1, - 191, 251, -5, -1, 175, -1, 250, 159, -3, -1, 249, 248, 143, -7, -3, - -1, 127, 247, -1, 111, 246, 255, -9, -5, -3, -1, 95, 245, 79, -1, - 244, 243, -53, -1, 240, -1, 63, -29, -19, -13, -7, -5, -1, 206, -1, - 236, 221, 222, -1, 233, -1, 234, 217, -1, 238, -1, 237, 235, -3, - -1, 190, 205, -3, -1, 220, 219, 174, -11, -5, -1, 204, -1, 173, - 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125, 94, 189, 242, - -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13, -5, -1, 158, - -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3, -1, 187, 141, - -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186, -1, 229, - 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1, 214, 155, - -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169, -5, -1, - 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213, -3, -1, - 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154, 108, - -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1, 153, - 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1, 192, - -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45, -1, - 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107, -1, - 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12, -1, - 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1, 178, - 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74, 164, - -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33, -19, - -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3, -1, - 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147, -1, 88, - 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1, 145, -1, 144, - 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3, -1, 102, 40, - 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1, 8, 86, 55, -9, - -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3, -1, 100, 85, 7, 23, - -23, -13, -5, -1, 113, -1, 112, 54, -3, -1, 99, 69, -1, 84, 38, -3, - -1, 98, 22, -1, 97, -1, 6, 96, -9, -5, -1, 83, -1, 53, 68, -1, 37, - 82, -1, 81, -1, 21, 5, -33, -23, -13, -7, -3, -1, 52, 67, -1, 80, - 36, -3, -1, 66, 51, 20, -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, - 19, 49, -3, -1, 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, - 1, 16, 0 }; - - private static final short tab24[] = { -451, -117, -43, -25, -15, -7, -3, - -1, 239, 254, -1, 223, 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, - 250, -1, 175, 159, -1, 249, 248, -9, -5, -3, -1, 143, 127, 247, -1, - 111, 246, -3, -1, 95, 245, -1, 79, 244, -71, -7, -3, -1, 63, 243, - -1, 47, 242, -5, -1, 241, -1, 31, 240, -25, -9, -1, 15, -3, -1, - 238, 222, -1, 237, 206, -7, -3, -1, 236, 221, -1, 190, 235, -3, -1, - 205, 220, -1, 174, 234, -15, -7, -3, -1, 189, 219, -1, 204, 158, - -3, -1, 233, 173, -1, 218, 188, -7, -3, -1, 203, 142, -1, 232, 157, - -3, -1, 217, 126, -1, 231, 172, 255, -235, -143, -77, -45, -25, - -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3, -1, 14, 224, 13, - 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9, -5, -1, 229, -1, - 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1, 78, 46, 62, -15, - -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185, 170, -1, 226, 30, - -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199, 77, -1, 139, 184, - -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3, -1, 198, 61, -1, - 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3, -1, 209, 92, -1, - 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196, -3, -1, 107, 182, - -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1, 167, 44, -3, -1, - 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1, 137, 152, -1, 193, - 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10, 26, -5, -1, 180, -1, - 106, 166, -3, -1, 121, 151, -3, -1, 160, 9, 144, -9, -3, -1, 179, - 136, -3, -1, 43, 90, 178, -7, -3, -1, 165, 27, -1, 177, 105, -1, - 150, 164, -17, -9, -5, -3, -1, 74, 120, 135, -1, 58, 163, -3, -1, - 89, 149, -1, 42, 162, -7, -3, -1, 161, 104, -1, 134, 119, -3, -1, - 73, 148, -1, 57, 147, -63, -31, -15, -7, -3, -1, 88, 133, -1, 41, - 103, -3, -1, 118, 146, -1, 25, 145, -7, -3, -1, 72, 132, -1, 87, - 117, -3, -1, 56, 131, -1, 102, 40, -17, -7, -3, -1, 130, 24, -1, - 71, 116, -5, -1, 129, -1, 8, 128, -1, 86, 101, -7, -5, -1, 23, -1, - 7, 112, 115, -3, -1, 55, 39, 114, -15, -7, -3, -1, 70, 100, -1, 85, - 113, -3, -1, 54, 99, -1, 69, 84, -7, -3, -1, 38, 98, -1, 22, 97, - -5, -3, -1, 6, 96, 53, -1, 83, 68, -51, -37, -23, -15, -9, -3, -1, - 37, 82, -1, 21, -1, 5, 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, - 51, 20, -9, -5, -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, - -3, -1, 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16, 0 }; - - private static final short tab_c0[] = { -29, -21, -13, -7, -3, -1, 11, 15, - -1, 13, 14, -3, -1, 7, 5, 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, - 1, -1, 4, 8, 0 }; - - private static final short tab_c1[] = { -15, -7, -3, -1, 15, 14, -1, 13, - 12, -3, -1, 11, 10, -1, 9, 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, - 3, 2, -1, 1, 0 }; - - public static final newhuff ht[] = { new newhuff( /* 0 */0, tab0), - new newhuff( /* 2 */0, tab1), new newhuff( /* 3 */0, tab2), - new newhuff( /* 3 */0, tab3), new newhuff( /* 0 */0, tab0), - new newhuff( /* 4 */0, tab5), new newhuff( /* 4 */0, tab6), - new newhuff( /* 6 */0, tab7), new newhuff( /* 6 */0, tab8), - new newhuff( /* 6 */0, tab9), new newhuff( /* 8 */0, tab10), - new newhuff( /* 8 */0, tab11), new newhuff( /* 8 */0, tab12), - new newhuff( /* 16 */0, tab13), new newhuff( /* 0 */0, tab0), - new newhuff( /* 16 */0, tab15), - - new newhuff( /* 16 */1, tab16), new newhuff( /* 16 */2, tab16), - new newhuff( /* 16 */3, tab16), new newhuff( /* 16 */4, tab16), - new newhuff( /* 16 */6, tab16), new newhuff( /* 16 */8, tab16), - new newhuff( /* 16 */10, tab16), new newhuff( /* 16 */13, tab16), - new newhuff( /* 16 */4, tab24), new newhuff( /* 16 */5, tab24), - new newhuff( /* 16 */6, tab24), new newhuff( /* 16 */7, tab24), - new newhuff( /* 16 */8, tab24), new newhuff( /* 16 */9, tab24), - new newhuff( /* 16 */11, tab24), new newhuff( /* 16 */13, tab24) }; - - public static final newhuff htc[] = { - new newhuff( /* 1 , 1 , */0, tab_c0), - new newhuff( /* 1 , 1 , */0, tab_c1) }; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Interface.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Interface.java deleted file mode 100644 index 85b95ca6d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Interface.java +++ /dev/null @@ -1,700 +0,0 @@ -/* - * interface.c - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* $Id: Interface.java,v 1.12 2011/08/27 18:57:09 kenchis Exp $ */ - -package mpg; - -import mp3.VBRTag; -import mp3.VBRTagData; -import mpg.Decode.Factory; -import mpg.MPGLib.ProcessedBytes; -import mpg.MPGLib.buf; -import mpg.MPGLib.mpstr_tag; - -public class Interface { - - private VBRTag vbr; - private Common common; - - public void setModules(VBRTag v, Common c) { - vbr = v; - common = c; - layer1.setModules(common, decode); - layer2.setModules(common); - layer3.setModules(common); - decode.setModules(tab, dct); - dct.setModules(tab); - } - - protected Decode decode = new Decode(); - private Layer1 layer1 = new Layer1() ; - private Layer2 layer2 = new Layer2(); - private Layer3 layer3 = new Layer3(); - private DCT64 dct = new DCT64(); - private TabInit tab = new TabInit(); - - mpstr_tag - InitMP3() - { - mpstr_tag mp = new mpstr_tag(); - - mp.framesize = 0; - mp.num_frames = 0; - mp.enc_delay = -1; - mp.enc_padding = -1; - mp.vbr_header = false; - mp.header_parsed = false; - mp.side_parsed = false; - mp.data_parsed = false; - mp.free_format = false; - mp.old_free_format = false; - mp.ssize = 0; - mp.dsize = 0; - mp.fsizeold = -1; - mp.bsize = 0; - mp.head = mp.tail = null; - mp.fr.single = -1; - mp.bsnum = 0; - mp.wordpointer = mp.bsspace[mp.bsnum]; - mp.wordpointerPos = 512; - mp.bitindex = 0; - mp.synth_bo = 1; - mp.sync_bitstream = 1; - - tab.make_decode_tables(32767); - - layer3.init_layer3(MPG123.SBLIMIT); - - layer2.init_layer2(); - - return mp; - } - - void - ExitMP3(mpstr_tag mp) - { - buf b, bn; - - b = mp.tail; - while (b!=null) { - b.pnt=null; - bn = b.next; - b = bn; - } - } - - buf - addbuf(mpstr_tag mp, byte []buf, int bufPos, int size) - { - buf nbuf; - - nbuf = new buf(); - nbuf.pnt = new byte[size]; - nbuf.size = size; - System.arraycopy(buf, bufPos, nbuf.pnt, 0, size); - nbuf.next = null; - nbuf.prev = mp.head; - nbuf.pos = 0; - - if (null==mp.tail) { - mp.tail = nbuf; - } - else { - mp.head.next = nbuf; - } - - mp.head = nbuf; - mp.bsize += size; - - return nbuf; - } - - void - remove_buf(mpstr_tag mp) - { - buf buf = mp.tail; - - mp.tail = buf.next; - if (mp.tail!=null) - mp.tail.prev = null; - else { - mp.tail = mp.head = null; - } - - buf.pnt=null; - buf=null; - - } - - int - read_buf_byte(mpstr_tag mp) - { - int b; - - int pos; - - - pos = mp.tail.pos; - while (pos >= mp.tail.size) { - remove_buf(mp); - if (null==mp.tail) { - throw new RuntimeException("hip: Fatal error! tried to read past mp buffer"); - } - pos = mp.tail.pos; - } - - b = mp.tail.pnt[pos] & 0xff; - mp.bsize--; - mp.tail.pos++; - - - return b; - } - - void - read_head(mpstr_tag mp) - { - long head; - - head = read_buf_byte(mp); - head <<= 8; - head |= read_buf_byte(mp); - head <<= 8; - head |= read_buf_byte(mp); - head <<= 8; - head |= read_buf_byte(mp); - - mp.header = head; - } - - void - copy_mp(mpstr_tag mp, int size, byte[]ptr, int ptrPos) - { - int len = 0; - - while (len < size && mp.tail!=null) { - int nlen; - int blen = mp.tail.size - mp.tail.pos; - if ((size - len) <= blen) { - nlen = size - len; - } - else { - nlen = blen; - } - System.arraycopy(mp.tail.pnt, mp.tail.pos, ptr, ptrPos+len, nlen); - len += nlen; - mp.tail.pos += nlen; - mp.bsize -= nlen; - if (mp.tail.pos == mp.tail.size) { - remove_buf(mp); - } - } - } - - /* number of bytes needed by GetVbrTag to parse header */ - public static final int XING_HEADER_SIZE =194; - - /* - traverse mp data structure without changing it - (just like sync_buffer) - pull out Xing bytes - call vbr header check code from LAME - if we find a header, parse it and also compute the VBR header size - if no header, do nothing. - - bytes = number of bytes before MPEG header. skip this many bytes - before starting to read - return value: number of bytes in VBR header, including syncword - */ - int - check_vbr_header(mpstr_tag mp, int bytes) - { - int i, pos; - buf buf = mp.tail; - byte xing[]=new byte[XING_HEADER_SIZE]; - - pos = buf.pos; - /* skip to valid header */ - for (i = 0; i < bytes; ++i) { - while (pos >= buf.size) { - buf = buf.next; - if (null==buf) - return -1; /* fatal error */ - pos = buf.pos; - } - ++pos; - } - /* now read header */ - for (i = 0; i < XING_HEADER_SIZE; ++i) { - while (pos >= buf.size) { - buf = buf.next; - if (null==buf) - return -1; /* fatal error */ - pos = buf.pos; - } - xing[i] = buf.pnt[pos]; - ++pos; - } - - /* check first bytes for Xing header */ - VBRTagData pTagData = vbr.getVbrTag(xing); - mp.vbr_header = pTagData != null; - if (mp.vbr_header) { - mp.num_frames = pTagData.frames; - mp.enc_delay = pTagData.encDelay; - mp.enc_padding = pTagData.encPadding; - - /* fprintf(stderr,"hip: delays: %i %i \n",mp.enc_delay,mp.enc_padding); */ - /* fprintf(stderr,"hip: Xing VBR header dectected. MP3 file has %i frames\n", pTagData.frames); */ - if (pTagData.headersize < 1) - return 1; - return pTagData.headersize; - } - return 0; - } - - int - sync_buffer(mpstr_tag mp, boolean free_match) - { - /* traverse mp structure without modifying pointers, looking - * for a frame valid header. - * if free_format, valid header must also have the same - * samplerate. - * return number of bytes in mp, before the header - * return -1 if header is not found - */ - int b[] = { 0, 0, 0, 0 }; - int i, pos; - boolean h; - buf buf = mp.tail; - if (null==buf) - return -1; - - pos = buf.pos; - for (i = 0; i < mp.bsize; i++) { - /* get 4 bytes */ - - b[0] = b[1]; - b[1] = b[2]; - b[2] = b[3]; - while (pos >= buf.size) { - buf = buf.next; - pos = buf.pos; - } - b[3] = buf.pnt[pos] & 0xff; - ++pos; - - if (i >= 3) { - Frame fr = mp.fr; - long head; - - head = b[0]; - head <<= 8; - head |= b[1]; - head <<= 8; - head |= b[2]; - head <<= 8; - head |= b[3]; - h = common.head_check(head, fr.lay); - - if (h && free_match) { - /* just to be even more thorough, match the sample rate */ - int mode, stereo, sampling_frequency, lsf; - boolean mpeg25; - - if ((head & (1 << 20))!=0) { - lsf = (head & (1 << 19)) !=0 ? 0x0 : 0x1; - mpeg25 = false; - } - else { - lsf = 1; - mpeg25 = true; - } - - mode = (int) ((head >> 6) & 0x3); - stereo = (mode == MPG123.MPG_MD_MONO) ? 1 : 2; - - if (mpeg25) - sampling_frequency = (int) (6 + ((head >> 10) & 0x3)); - else - sampling_frequency = (int) (((head >> 10) & 0x3) + (lsf * 3)); - h = ((stereo == fr.stereo) && (lsf == fr.lsf) && (mpeg25 == fr.mpeg25) && - (sampling_frequency == fr.sampling_frequency)); - } - - if (h) { - return i - 3; - } - } - } - return -1; - } - - mpstr_tag - decode_reset() - { - return InitMP3(); /* Less error prone to just to reinitialise. */ - } - - int - audiodata_precedesframes(mpstr_tag mp) - { - if (mp.fr.lay == 3) - return layer3.layer3_audiodata_precedesframes(mp); - else - return 0; /* For Layer 1 & 2 the audio data starts at the frame that describes it, so no audio data precedes. */ - } - - interface ISynth { - <T>int synth_1to1_mono_ptr (mpstr_tag mp, float[] in, int inPos, T[] out, ProcessedBytes p, Factory<T> tFactory); - <T>int synth_1to1_ptr (mpstr_tag mp, float[] in, int inPos, int i, T[] out, ProcessedBytes p, Factory<T> tFactory); - } - - <T>int - decodeMP3_clipchoice(mpstr_tag mp, byte[] in, int inPos, int isize, T[] out, ProcessedBytes done, - ISynth synth, Factory<T> tFactory) - { - int i, iret, bits, bytes; - - if (in!=null && isize!=0 && addbuf(mp, in, inPos, isize) == null) - return MPGLib.MP3_ERR; - - /* First decode header */ - if (!mp.header_parsed) { - - if (mp.fsizeold == -1 || mp.sync_bitstream!=0) { - int vbrbytes; - mp.sync_bitstream = 0; - - /* This is the very first call. sync with anything */ - /* bytes= number of bytes before header */ - bytes = sync_buffer(mp, false); - - /* now look for Xing VBR header */ - if (mp.bsize >= bytes + XING_HEADER_SIZE) { - /* vbrbytes = number of bytes in entire vbr header */ - vbrbytes = check_vbr_header(mp, bytes); - } - else { - /* not enough data to look for Xing header */ -// #ifdef HIP_DEBUG -// fprintf(stderr, "hip: not enough data to look for Xing header\n"); -// #endif - return MPGLib.MP3_NEED_MORE; - } - - if (mp.vbr_header) { - /* do we have enough data to parse entire Xing header? */ - if (bytes + vbrbytes > mp.bsize) { - /* fprintf(stderr,"hip: not enough data to parse entire Xing header\n"); */ - return MPGLib.MP3_NEED_MORE; - } - - /* read in Xing header. Buffer data in case it - * is used by a non zero main_data_begin for the next - * frame, but otherwise dont decode Xing header */ -// #ifdef HIP_DEBUG -// fprintf(stderr, "hip: found xing header, skipping %i bytes\n", vbrbytes + bytes); -// #endif - for (i = 0; i < vbrbytes + bytes; ++i) - read_buf_byte(mp); - /* now we need to find another syncword */ - /* just return and make user send in more data */ - - return MPGLib.MP3_NEED_MORE; - } - } - else { - /* match channels, samplerate, etc, when syncing */ - bytes = sync_buffer(mp, true); - } - - /* buffer now synchronized */ - if (bytes < 0) { - /* fprintf(stderr,"hip: need more bytes %d\n", bytes); */ - return MPGLib.MP3_NEED_MORE; - } - if (bytes > 0) { - /* there were some extra bytes in front of header. - * bitstream problem, but we are now resynced - * should try to buffer previous data in case new - * frame has nonzero main_data_begin, but we need - * to make sure we do not overflow buffer - */ - int size; - System.err.printf("hip: bitstream problem, resyncing skipping %d bytes...\n", bytes); - mp.old_free_format = false; - - /* FIXME: correct ??? */ - mp.sync_bitstream = 1; - - /* skip some bytes, buffer the rest */ - size = mp.wordpointerPos - 512; - - if (size > MPG123.MAXFRAMESIZE) { - /* wordpointer buffer is trashed. probably cant recover, but try anyway */ - System.err.printf("hip: wordpointer trashed. size=%i (%i) bytes=%i \n", - size, MPG123.MAXFRAMESIZE, bytes); - size = 0; - mp.wordpointer = mp.bsspace[mp.bsnum]; - mp.wordpointerPos = 512; - } - - /* buffer contains 'size' data right now - we want to add 'bytes' worth of data, but do not - exceed MAXFRAMESIZE, so we through away 'i' bytes */ - i = (size + bytes) - MPG123.MAXFRAMESIZE; - for (; i > 0; --i) { - --bytes; - read_buf_byte(mp); - } - - copy_mp(mp, bytes, mp.wordpointer, mp.wordpointerPos); - mp.fsizeold += bytes; - } - - read_head(mp); - common.decode_header(mp.fr, mp.header); - mp.header_parsed = true; - mp.framesize = mp.fr.framesize; - mp.free_format = (mp.framesize == 0); - - if (mp.fr.lsf!=0) - mp.ssize = (mp.fr.stereo == 1) ? 9 : 17; - else - mp.ssize = (mp.fr.stereo == 1) ? 17 : 32; - if (mp.fr.error_protection) - mp.ssize += 2; - - mp.bsnum = 1 - mp.bsnum; /* toggle buffer */ - mp.wordpointer = mp.bsspace[mp.bsnum]; - mp.wordpointerPos = 512; - mp.bitindex = 0; - - /* for very first header, never parse rest of data */ - if (mp.fsizeold == -1) { -// #ifdef HIP_DEBUG -// fprintf(stderr, "hip: not parsing the rest of the data of the first header\n"); -// #endif - return MPGLib.MP3_NEED_MORE; - } - } /* end of header parsing block */ - - /* now decode side information */ - if (!mp.side_parsed) { - - /* Layer 3 only */ - if (mp.fr.lay == 3) { - if (mp.bsize < mp.ssize) - return MPGLib.MP3_NEED_MORE; - - copy_mp(mp, mp.ssize, mp.wordpointer, mp.wordpointerPos); - - if (mp.fr.error_protection) - common.getbits(mp, 16); - bits = layer3.do_layer3_sideinfo(mp); - /* bits = actual number of bits needed to parse this frame */ - /* can be negative, if all bits needed are in the reservoir */ - if (bits < 0) - bits = 0; - - /* read just as many bytes as necessary before decoding */ - mp.dsize = (bits + 7) / 8; - -// #ifdef HIP_DEBUG -// fprintf(stderr, -// "hip: %d bits needed to parse layer III frame, number of bytes to read before decoding dsize = %d\n", -// bits, mp.dsize); -// #endif - - /* this will force mpglib to read entire frame before decoding */ - /* mp.dsize= mp.framesize - mp.ssize; */ - - } - else { - /* Layers 1 and 2 */ - - /* check if there is enough input data */ - if (mp.fr.framesize > mp.bsize) - return MPGLib.MP3_NEED_MORE; - - /* takes care that the right amount of data is copied into wordpointer */ - mp.dsize = mp.fr.framesize; - mp.ssize = 0; - } - - mp.side_parsed = true; - } - - /* now decode main data */ - iret = MPGLib.MP3_NEED_MORE; - if (!mp.data_parsed) { - if (mp.dsize > mp.bsize) { - return MPGLib.MP3_NEED_MORE; - } - - copy_mp(mp, mp.dsize, mp.wordpointer, mp.wordpointerPos); - - done.pb = 0; - - /*do_layer3(&mp.fr,(unsigned char *) out,done); */ - switch (mp.fr.lay) { - case 1: - if (mp.fr.error_protection) - common.getbits(mp, 16); - - layer1.do_layer1(mp, out, done, tFactory); - break; - - case 2: - if (mp.fr.error_protection) - common.getbits(mp, 16); - - layer2.do_layer2(mp, out, done, synth, tFactory); - break; - - case 3: - layer3.do_layer3(mp, out, done, synth, tFactory); - break; - default: - System.err.printf("hip: invalid layer %d\n", mp.fr.lay); - } - - mp.wordpointer = mp.bsspace[mp.bsnum]; - mp.wordpointerPos = 512 + mp.ssize + mp.dsize; - - mp.data_parsed = true; - iret = MPGLib.MP3_OK; - } - - - /* remaining bits are ancillary data, or reservoir for next frame - * If free format, scan stream looking for next frame to determine - * mp.framesize */ - if (mp.free_format) { - if (mp.old_free_format) { - /* free format. bitrate must not vary */ - mp.framesize = mp.fsizeold_nopadding + (mp.fr.padding); - } - else { - bytes = sync_buffer(mp, true); - if (bytes < 0) - return iret; - mp.framesize = bytes + mp.ssize + mp.dsize; - mp.fsizeold_nopadding = mp.framesize - mp.fr.padding; - /* - fprintf(stderr,"hip: freeformat bitstream: estimated bitrate=%ikbs \n", - 8*(4+mp.framesize)*freqs[mp.fr.sampling_frequency]/ - (1000*576*(2-mp.fr.lsf))); - */ - } - } - - /* buffer the ancillary data and reservoir for next frame */ - bytes = mp.framesize - (mp.ssize + mp.dsize); - if (bytes > mp.bsize) { - return iret; - } - - if (bytes > 0) { - int size; - copy_mp(mp, bytes, mp.wordpointer, mp.wordpointerPos); - mp.wordpointerPos += bytes; - - size = mp.wordpointerPos - 512; - if (size > MPG123.MAXFRAMESIZE) { - System.err.printf("hip: fatal error. MAXFRAMESIZE not large enough.\n"); - } - - } - - /* the above frame is completely parsed. start looking for next frame */ - mp.fsizeold = mp.framesize; - mp.old_free_format = mp.free_format; - mp.framesize = 0; - mp.header_parsed = false; - mp.side_parsed = false; - mp.data_parsed = false; - - return iret; - } - - <T>int - decodeMP3(MPGLib.mpstr_tag mp, byte []in, int bufferPos, int isize, T []out, int osize, ProcessedBytes done, Factory<T> tFactory) - { - if (osize < 2304) { - System.err.printf("hip: Insufficient memory for decoding buffer %d\n", osize); - return MPGLib.MP3_ERR; - } - - /* passing pointers to the functions which clip the samples */ - ISynth synth = new ISynth() { - - @Override - public <X> int synth_1to1_mono_ptr(mpstr_tag mp, float[] in, - int inPos, X[] out, ProcessedBytes p, - Factory<X> tFactory) { - return decode.synth_1to1_mono(mp, in, inPos, out, p, tFactory); - } - - @Override - public <X> int synth_1to1_ptr(mpstr_tag mp, float[] in, int inPos, - int i, X[] out, ProcessedBytes p, - Factory<X> tFactory) { - return decode.synth_1to1(mp, in, inPos, i, out, p, tFactory); - } - - }; - return decodeMP3_clipchoice(mp, in, bufferPos, isize, out, done, synth, tFactory); - } - - <T>int - decodeMP3_unclipped(MPGLib.mpstr_tag mp, byte []in, int bufferPos, int isize, T []out, int osize, ProcessedBytes done, Factory<T> tFactory) - { - /* we forbid input with more than 1152 samples per channel for output in unclipped mode */ - if (osize < 1152 * 2) { - System.err.printf("hip: out space too small for unclipped mode\n"); - return MPGLib.MP3_ERR; - } - - ISynth synth = new ISynth() { - - @Override - public <X>int synth_1to1_mono_ptr(mpstr_tag mp, float[] in, - int inPos, X[] out, ProcessedBytes p, - Factory<X> tFactory) { - return decode.synth_1to1_mono_unclipped(mp, in, inPos, out, p, tFactory); - } - - @Override - public <X>int synth_1to1_ptr(mpstr_tag mp, float[] in, int inPos, - int i, X[] out, ProcessedBytes p, - Factory<X> tFactory) { - return decode.synth_1to1_unclipped(mp, in, inPos, i, out, p, tFactory); - } - - }; - /* passing pointers to the functions which don't clip the samples */ - return decodeMP3_clipchoice(mp, in, bufferPos, isize, out, done, synth, tFactory); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/L2Tables.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/L2Tables.java deleted file mode 100644 index d04099b8d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/L2Tables.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Layer 2 Alloc tables .. - * most other tables are calculated on program start (which is (of course) - * not ISO-conform) .. - * Layer-3 huffman table is in huffman.h - */ -package mpg; - - -public class L2Tables { - - public static final class al_table2 { - public al_table2(final int b, final int d) { - this.bits = (short) b; - this.d = (short) d; - } - - short bits; - short d; - }; - - public static final al_table2 alloc_0[] = { - new al_table2(4, 0), new al_table2(5, 3), new al_table2(3, -3), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), new al_table2(10, - -511), - new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(3, -3), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), new al_table2(10, - -511), - new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(3, -3), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), new al_table2(10, - -511), - new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767) - }; - - public static final al_table2 alloc_1[] = { - new al_table2(4, 0), new al_table2(5, 3), new al_table2(3, -3), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), new al_table2(10, - -511), - new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(3, -3), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), new al_table2(10, - -511), - new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(3, -3), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), new al_table2(10, - -511), - new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(16, -32767) - }; - - public static final al_table2 alloc_2[] = { - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), - new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), - new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63) - }; - - public static final al_table2 alloc_3[] = { - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), - new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), new al_table2(9, -255), - new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), new al_table2(15, -16383), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63) - }; - - public static final al_table2 alloc_4[] = { - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), - new al_table2(4, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(3, -3), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), new al_table2(8, -127), - new al_table2(9, -255), new al_table2(10, -511), new al_table2(11, -1023), new al_table2(12, -2047), new al_table2(13, -4095), new al_table2(14, -8191), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(3, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), new al_table2(4, -7), new al_table2(5, -15), new al_table2(6, -31), new al_table2(7, -63), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9), - new al_table2(2, 0), new al_table2(5, 3), new al_table2(7, 5), new al_table2(10, 9) - }; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer1.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer1.java deleted file mode 100644 index 6d2e13e02..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer1.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * layer1.c: Mpeg Layer-1 audio decoder - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* $Id: Layer1.java,v 1.5 2011/05/31 19:42:01 kenchis Exp $ */ - -package mpg; - -import mpg.Decode.Factory; -import mpg.MPGLib.ProcessedBytes; -import mpg.MPGLib.mpstr_tag; - -public class Layer1 { - private Common common; - private Decode decode; - - public void setModules(Common c, Decode d) { - common = c; - decode = d; - } - - private void I_step_one(final mpstr_tag mp, final int balloc[], - final int scale_index[], final Frame fr) { - int ba = 0; - int sca = 0; - - assert(fr.stereo == 1 || fr.stereo == 2); - if (fr.stereo == 2) { - int i; - int jsbound = fr.jsbound; - for (i = 0; i < jsbound; i++) { - balloc[ba++] = common.getbits(mp, 4); - balloc[ba++] = common.getbits(mp, 4); - } - for (i = jsbound; i < MPG123.SBLIMIT; i++) - balloc[ba++] = common.getbits(mp, 4); - - ba = 0; - - for (i = 0; i < jsbound; i++) { - if ((balloc[ba]++)!=0) - scale_index[sca++] = common.getbits(mp, 6); - if ((balloc[ba++])!=0) - scale_index[sca++] = common.getbits(mp, 6); - } - for (i = jsbound; i < MPG123.SBLIMIT; i++) - if ((balloc[ba++])!=0) { - scale_index[sca++] = common.getbits(mp, 6); - scale_index[sca++] = common.getbits(mp, 6); - } - } - else { - int i; - for (i = 0; i < MPG123.SBLIMIT; i++) - balloc[ba++] = common.getbits(mp, 4); - ba = 0; - for (i = 0; i < MPG123.SBLIMIT; i++) - if ((balloc[ba++])!=0) - scale_index[sca++] = common.getbits(mp, 6); - } - } - - private void I_step_two(final mpstr_tag mp, final float fraction[][], - final int balloc[], final int scale_index[], final Frame fr) { - int i, n; - int smpb[]=new int[2 * MPG123.SBLIMIT]; /* values: 0-65535 */ - int sample; - int ba = 0; - int sca = 0; - - assert(fr.stereo == 1 || fr.stereo == 2); - if (fr.stereo == 2) { - int jsbound = fr.jsbound; - int f0 = 0; - int f1 = 0; - ba = 0; - for (sample = 0, i = 0; i < jsbound; i++) { - n = balloc[ba++]; - if (n!=0) - smpb[sample++] = common.getbits(mp, n + 1); - n = balloc[ba++]; - if (n!=0) - smpb[sample++] = common.getbits(mp, n + 1); - } - for (i = jsbound; i < MPG123.SBLIMIT; i++) { - n = balloc[ba++]; - if (n!=0) - smpb[sample++] = common.getbits(mp, n + 1); - } - ba = 0; - for (sample = 0, i = 0; i < jsbound; i++) { - n = balloc[ba++]; - if (n!=0) - fraction[0][f0++] = (float) (((-1) << n) + (smpb[sample++]) + 1) * common.muls[n + 1][scale_index[sca++]]; - else - fraction[0][f0++] = 0.0f; - n = balloc[ba++]; - if (n!=0) - fraction[1][f1++] = (float) (((-1) << n) + (smpb[sample++]) + 1) * common.muls[n + 1][scale_index[sca++]]; - else - fraction[1][f1++] = 0.0f; - } - for (i = jsbound; i < MPG123.SBLIMIT; i++) { - n = balloc[ba++]; - if (n!=0) { - float samp = (float) (((-1) << n) + (smpb[sample++]) + 1); - fraction[0][f0++] = samp * common.muls[n + 1][scale_index[sca++]]; - fraction[1][f1++] = samp * common.muls[n + 1][scale_index[sca++]]; - } - else - fraction[0][f0++] = fraction[1][f1++] = 0.0f; - } - for (i = fr.down_sample_sblimit; i < 32; i++) - fraction[0][i] = fraction[1][i] = 0.0f; - } - else { - int f0 = 0; - ba = 0; - for (sample = 0, i = 0; i < MPG123.SBLIMIT; i++) { - n = balloc[ba++]; - if (n!=0) - smpb[sample++] = common.getbits(mp, n + 1); - } - ba = 0; - for (sample = 0, i = 0; i < MPG123.SBLIMIT; i++) { - n = balloc[ba++]; - if (n!=0) - fraction[0][f0++] = (float) (((-1) << n) + (smpb[sample++]) + 1) * common.muls[n + 1][scale_index[sca++]]; - else - fraction[0][f0++] = 0.0f; - } - for (i = fr.down_sample_sblimit; i < 32; i++) - fraction[0][i] = 0.0f; - } - } - - public <T> int do_layer1(final mpstr_tag mp, final T[] pcm_sample, - final ProcessedBytes pcm_point, final Factory<T> tFactory) { - int clip = 0; - int balloc[]=new int[2 * MPG123.SBLIMIT]; - int scale_index[]=new int[2 * MPG123.SBLIMIT]; - float fraction[][]=new float[2][MPG123.SBLIMIT]; - Frame fr = mp.fr; - int i, stereo = fr.stereo; - int single = fr.single; - - fr.jsbound = (fr.mode == MPG123.MPG_MD_JOINT_STEREO) ? (fr.mode_ext << 2) + 4 : 32; - - if (stereo == 1 || single == 3) - single = 0; - - I_step_one(mp, balloc, scale_index, fr); - - for (i = 0; i < MPG123.SCALE_BLOCK; i++) { - I_step_two(mp, fraction, balloc, scale_index, fr); - - if (single >= 0) { - clip += decode.synth_1to1_mono(mp, fraction[single], 0, pcm_sample, pcm_point, tFactory); - } - else { - ProcessedBytes p1 = new ProcessedBytes(); - p1.pb = pcm_point.pb; - clip += decode.synth_1to1(mp, fraction[0], 0, 0, pcm_sample, p1, tFactory); - clip += decode.synth_1to1(mp, fraction[1], 0, 1, pcm_sample, pcm_point, tFactory); - } - } - - return clip; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer2.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer2.java deleted file mode 100644 index c7f49b969..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer2.java +++ /dev/null @@ -1,315 +0,0 @@ -/* - * layer2.c: Mpeg Layer-2 audio decoder - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* $Id: Layer2.java,v 1.4 2011/05/31 19:42:01 kenchis Exp $ */ - -package mpg; - -import mpg.Decode.Factory; -import mpg.Interface.ISynth; -import mpg.MPGLib.ProcessedBytes; -import mpg.MPGLib.mpstr_tag; - -public class Layer2 { - - private Common common; - - public void setModules(final Common c) { - common = c; - } - - private final int grp_3tab[]=new int[32 * 3]; /* used: 27 */ - private final int grp_5tab[]=new int[128 * 3]; /* used: 125 */ - private final int grp_9tab[]=new int[1024 * 3]; /* used: 729 */ - - private static final double mulmul[] = { - 0.0, -2.0 / 3.0, 2.0 / 3.0, - 2.0 / 7.0, 2.0 / 15.0, 2.0 / 31.0, 2.0 / 63.0, 2.0 / 127.0, 2.0 / 255.0, - 2.0 / 511.0, 2.0 / 1023.0, 2.0 / 2047.0, 2.0 / 4095.0, 2.0 / 8191.0, - 2.0 / 16383.0, 2.0 / 32767.0, 2.0 / 65535.0, - -4.0 / 5.0, -2.0 / 5.0, 2.0 / 5.0, 4.0 / 5.0, - -8.0 / 9.0, -4.0 / 9.0, -2.0 / 9.0, 2.0 / 9.0, 4.0 / 9.0, 8.0 / 9.0 - }; - private final int base[][] = { - {1, 0, 2,}, - {17, 18, 0, 19, 20,}, - {21, 1, 22, 23, 0, 24, 25, 2, 26} - }; - - private final int tablen[] = { 3, 5, 9 }; - private final int tables[][] = { grp_3tab, grp_5tab, grp_9tab }; - private int itable; - - public void init_layer2() { - int i, j, k, l, len; - float[] table; - - for (i = 0; i < 3; i++) { - itable = 0; - len = tablen[i]; - for (j = 0; j < len; j++) - for (k = 0; k < len; k++) - for (l = 0; l < len; l++) { - tables[i][itable++] = base[i][l]; - tables[i][itable++] = base[i][k]; - tables[i][itable++] = base[i][j]; - } - } - - for (k = 0; k < 27; k++) { - double m = mulmul[k]; - table = common.muls[k]; - int tablePos = 0; - for (j = 3, i = 0; i < 63; i++, j--) - table[tablePos++] = (float) (m * Math.pow(2.0, (double) j / 3.0)); - table[tablePos++] = 0.0f; - } - } - - private int scfsi_buf[]=new int[64]; - - private void II_step_one(final mpstr_tag mp, final int[] bit_alloc, - final int[] scale, final Frame fr) { - int scalePos = 0; - int stereo = fr.stereo - 1; - int sblimit = fr.II_sblimit; - int jsbound = fr.jsbound; - int sblimit2 = fr.II_sblimit << stereo; - int alloc1 = 0; - int i; - int scfsi, bita; - int sc, step; - - bita = 0; - if (stereo!=0) { - for (i = jsbound; i!=0; i--, alloc1 += (1 << step)) { - bit_alloc[bita++] = (char) common.getbits(mp, step = fr.alloc[alloc1].bits); - bit_alloc[bita++] = (char) common.getbits(mp, step); - } - for (i = sblimit - jsbound; i!=0; i--, alloc1 += (1 << step)) { - bit_alloc[bita+0] = (char) common.getbits(mp, step = fr.alloc[alloc1].bits); - bit_alloc[bita+1] = bit_alloc[bita+0]; - bita += 2; - } - bita = 0; - scfsi = 0; - for (i = sblimit2; i!=0; i--) - if (bit_alloc[bita++]!=0) - scfsi_buf[scfsi++] = (char) common.getbits_fast(mp, 2); - } - else { /* mono */ - - for (i = sblimit; i!=0; i--, alloc1 += (1 << step)) - bit_alloc[bita++] = (char) common.getbits(mp, step = fr.alloc[alloc1].bits); - bita = 0; - scfsi = 0; - for (i = sblimit; i!=0; i--) - if (bit_alloc[bita++]!=0) - scfsi_buf[scfsi++] = (char) common.getbits_fast(mp, 2); - } - - bita = 0; - scfsi = 0; - for (i = sblimit2; i!=0; i--) - if (bit_alloc[bita++]!=0) - switch (scfsi_buf[scfsi++]) { - case 0: - scale[scalePos++] = common.getbits_fast(mp, 6); - scale[scalePos++] = common.getbits_fast(mp, 6); - scale[scalePos++] = common.getbits_fast(mp, 6); - break; - case 1: - scale[scalePos++] = sc = common.getbits_fast(mp, 6); - scale[scalePos++] = sc; - scale[scalePos++] = common.getbits_fast(mp, 6); - break; - case 2: - scale[scalePos++] = sc = common.getbits_fast(mp, 6); - scale[scalePos++] = sc; - scale[scalePos++] = sc; - break; - default: /* case 3 */ - scale[scalePos++] = common.getbits_fast(mp, 6); - scale[scalePos++] = sc = common.getbits_fast(mp, 6); - scale[scalePos++] = sc; - break; - } - - } - - private final int []table[] = { null, null, null, grp_3tab, null, grp_5tab, null, null, null, grp_9tab }; - - private void II_step_two(final mpstr_tag mp, final int[] bit_alloc, - final float fraction[][][], final int[] scale, final Frame fr, - final int x1) { - int scalePos = 0; - int i, j, k, ba; - int stereo = fr.stereo; - int sblimit = fr.II_sblimit; - int jsbound = fr.jsbound; - int alloc2, alloc1 = 0; - int bita = 0; - int d1, step; - - for (i = 0; i < jsbound; i++, alloc1 += (1 << step)) { - step = fr.alloc[alloc1].bits; - for (j = 0; j < stereo; j++) { - ba = bit_alloc[bita++]; - if (ba!=0) { - k = fr.alloc[(alloc2 = alloc1 + ba)].bits; - if ((d1 = fr.alloc[alloc2].d) < 0) { - float cm = common.muls[k][scale[scalePos+x1]]; - fraction[j][0][i] = ((float) ((int) common.getbits(mp, k) + d1)) * cm; - fraction[j][1][i] = ((float) ((int) common.getbits(mp, k) + d1)) * cm; - fraction[j][2][i] = ((float) ((int) common.getbits(mp, k) + d1)) * cm; - } - else { - int idx, tab, m = scale[scalePos+x1]; - idx = (int) common.getbits(mp, k); - tab = (idx + idx + idx); - fraction[j][0][i] = common.muls[table[d1][tab++]][m]; - fraction[j][1][i] = common.muls[table[d1][tab++]][m]; - fraction[j][2][i] = common.muls[table[d1][tab]][m]; - } - scalePos += 3; - } - else - fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0f; - } - } - - for (i = jsbound; i < sblimit; i++, alloc1 += (1 << step)) { - step = fr.alloc[alloc1].bits; - bita++; /* channel 1 and channel 2 bitalloc are the same */ - ba = bit_alloc[bita++]; - if (ba!=0) { - k = fr.alloc[(alloc2 = alloc1 + ba)].bits; - if ((d1 = fr.alloc[alloc2].d) < 0) { - float cm; - cm = common.muls[k][scale[scalePos+x1 + 3]]; - fraction[1][0][i] = (fraction[0][0][i] = (float) ((int) common.getbits(mp, k) + d1)) * cm; - fraction[1][1][i] = (fraction[0][1][i] = (float) ((int) common.getbits(mp, k) + d1)) * cm; - fraction[1][2][i] = (fraction[0][2][i] = (float) ((int) common.getbits(mp, k) + d1)) * cm; - cm = common.muls[k][scale[scalePos+x1]]; - fraction[0][0][i] *= cm; - fraction[0][1][i] *= cm; - fraction[0][2][i] *= cm; - } - else { - int idx, tab, m1, m2; - m1 = scale[scalePos+x1]; - m2 = scale[scalePos+x1 + 3]; - idx = (int) common.getbits(mp, k); - tab = (idx + idx + idx); - fraction[0][0][i] = common.muls[table[d1][tab]][m1]; - fraction[1][0][i] = common.muls[table[d1][tab++]][m2]; - fraction[0][1][i] = common.muls[table[d1][tab]][m1]; - fraction[1][1][i] = common.muls[table[d1][tab++]][m2]; - fraction[0][2][i] = common.muls[table[d1][tab]][m1]; - fraction[1][2][i] = common.muls[table[d1][tab]][m2]; - } - scalePos += 6; - } - else { - fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] = - fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0f; - } - /* - should we use individual scalefac for channel 2 or - is the current way the right one , where we just copy channel 1 to - channel 2 ?? - The current 'strange' thing is, that we throw away the scalefac - values for the second channel ...!! - . changed .. now we use the scalefac values of channel one !! - */ - } - /* if(sblimit > (fr.down_sample_sblimit) ) */ - /* sblimit = fr.down_sample_sblimit; */ - - for (i = sblimit; i < MPG123.SBLIMIT; i++) - for (j = 0; j < stereo; j++) - fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0f; - - } - - private static final int translate[][][] = - { { { 0,2,2,2,2,2,2,0,0,0,1,1,1,1,1,0 } , - { 0,2,2,0,0,0,1,1,1,1,1,1,1,1,1,0 } } , - { { 0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0 } , - { 0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0 } } , - { { 0,3,3,3,3,3,3,0,0,0,1,1,1,1,1,0 } , - { 0,3,3,0,0,0,1,1,1,1,1,1,1,1,1,0 } } }; - - private final L2Tables.al_table2 []tables2[] = { L2Tables.alloc_0, L2Tables.alloc_1, L2Tables.alloc_2, L2Tables.alloc_3, L2Tables.alloc_4 }; - private final int sblims[] = { 27, 30, 8, 12, 30 }; - - private void II_select_table(final Frame fr) { - int table, sblim; - - if (fr.lsf!=0) - table = 4; - else - table = translate[fr.sampling_frequency][2 - fr.stereo][fr.bitrate_index]; - sblim = sblims[table]; - - fr.alloc = tables2[table]; - fr.II_sblimit = sblim; - } - - public <T> int do_layer2(final mpstr_tag mp, final T[] pcm_sample, - final ProcessedBytes pcm_point, final ISynth synth, - final Factory<T> tFactory) { - int clip = 0; - int i, j; - float fraction[][][]=new float[2][4][MPG123.SBLIMIT]; /* pick_table clears unused subbands */ - int bit_alloc[]=new int[64]; - int scale[]=new int[192]; - Frame fr = mp.fr; - int stereo = fr.stereo; - int single = fr.single; - - II_select_table(fr); - fr.jsbound = (fr.mode == MPG123.MPG_MD_JOINT_STEREO) ? (fr.mode_ext << 2) + 4 : fr.II_sblimit; - - if (stereo == 1 || single == 3) - single = 0; - - II_step_one(mp, bit_alloc, scale, fr); - - for (i = 0; i < MPG123.SCALE_BLOCK; i++) { - II_step_two(mp, bit_alloc, fraction, scale, fr, i >> 2); - for (j = 0; j < 3; j++) { - if (single >= 0) { - clip += synth.synth_1to1_mono_ptr(mp, fraction[single][j], 0, pcm_sample, pcm_point, tFactory); - } - else { - ProcessedBytes p1 = new ProcessedBytes(); - p1.pb = pcm_point.pb; - clip += synth.synth_1to1_ptr(mp, fraction[0][j], 0, 0, pcm_sample, p1, tFactory); - clip += synth.synth_1to1_ptr(mp, fraction[1][j], 0, 1, pcm_sample, pcm_point, tFactory); - } - } - } - - return clip; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer3.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer3.java deleted file mode 100644 index 04f2246ee..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/Layer3.java +++ /dev/null @@ -1,2019 +0,0 @@ -/* - * layer3.c: Mpeg Layer-3 audio decoder - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* $Id: Layer3.java,v 1.19 2011/06/17 05:26:42 kenchis Exp $ */ -package mpg; - -import mpg.Decode.Factory; -import mpg.Huffman.newhuff; -import mpg.Interface.ISynth; -import mpg.MPG123.III_sideinfo; -import mpg.MPG123.gr_info_s; -import mpg.MPGLib.ProcessedBytes; -import mpg.MPGLib.mpstr_tag; - -public class Layer3 { - private Common common; - - public void setModules(final Common c) { - common = c; - } - - private float ispow[] = new float[8207]; - private float aa_ca[] = new float[8], aa_cs[] = new float[8]; - private float COS1[][] = new float[12][6]; - private float win[][] = new float[4][36]; - private float win1[][] = new float[4][36]; - private float gainpow2[] = new float[256 + 118 + 4]; - private float COS9[] = new float[9]; - private float COS6_1, COS6_2; - private float tfcos36[] = new float[9]; - private float tfcos12[] = new float[3]; - - private static class bandInfoStruct { - public bandInfoStruct(final short[] lIdx, final short[] lDiff, - final short[] sIdx, final short[] sDiff) { - longIdx = lIdx; - longDiff = lDiff; - shortIdx = sIdx; - shortDiff = sDiff; - } - - short longIdx[] = new short[23]; - short longDiff[] = new short[22]; - short shortIdx[] = new short[14]; - short shortDiff[] = new short[13]; - }; - - private int longLimit[][] = new int[9][23]; - private int shortLimit[][] = new int[9][14]; - - private static bandInfoStruct bandInfo[] = { - - /* MPEG 1.0 */ - new bandInfoStruct( - new short[]{0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576}, - new short[]{4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158}, - new short[]{0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3}, - new short[]{4,4,4,4,6,8,10,12,14,18,22,30,56}) , - - new bandInfoStruct( - new short[]{0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576}, - new short[]{4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192}, - new short[]{0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3}, - new short[]{4,4,4,4,6,6,10,12,14,16,20,26,66}) , - - new bandInfoStruct( - new short[]{0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} , - new short[]{4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} , - new short[]{0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} , - new short[]{4,4,4,4,6,8,12,16,20,26,34,42,12}) , - - /* MPEG 2.0 */ - new bandInfoStruct( - new short[]{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, - new short[]{6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } , - new short[]{0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} , - new short[]{4,4,4,6,6,8,10,14,18,26,32,42,18 }) , - /* docs: 332. mpg123: 330 */ - new bandInfoStruct( - new short[]{0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576}, - new short[]{6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 } , - new short[]{0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} , - new short[]{4,4,4,6,8,10,12,14,18,24,32,44,12 } ) , - - new bandInfoStruct( - new short[]{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, - new short[]{6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 }, - new short[]{0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3}, - new short[]{4,4,4,6,8,10,12,14,18,24,30,40,18 } ) , - /* MPEG 2.5 */ - new bandInfoStruct( - new short[]{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} , - new short[]{6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, - new short[]{0,12,24,36,54,78,108,144,186,240,312,402,522,576}, - new short[]{4,4,4,6,8,10,12,14,18,24,30,40,18} ), - new bandInfoStruct( - new short[]{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} , - new short[]{6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, - new short[]{0,12,24,36,54,78,108,144,186,240,312,402,522,576}, - new short[]{4,4,4,6,8,10,12,14,18,24,30,40,18} ), - new bandInfoStruct( - new short[]{0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}, - new short[]{12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2}, - new short[]{0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576}, - new short[]{8,8,8,12,16,20,24,28,36,2,2,2,26} ) , - }; - - private int mapbuf0[][] = new int[9][152]; - private int mapbuf1[][] = new int[9][156]; - private int mapbuf2[][] = new int[9][44]; - private int map[][][] = new int[9][3][]; - private int mapend[][] = new int[9][3]; - - /** - * MPEG 2.0 slen for 'normal' mode. - */ - private int n_slen2[] = new int[512]; - /** - * MPEG 2.0 slen for intensity stereo. - */ - private int i_slen2[] = new int[256]; - - private float tan1_1[] = new float[16], tan2_1[] = new float[16], - tan1_2[] = new float[16], tan2_2[] = new float[16]; - private float pow1_1[][] = new float[2][16], pow2_1[][] = new float[2][16], - pow1_2[][] = new float[2][16], pow2_2[][] = new float[2][16]; - - private int get1bit(final mpstr_tag mp) { - int rval = (mp.wordpointer[mp.wordpointerPos] & 0xff) << mp.bitindex; - rval &= 0xff; - mp.bitindex++; - mp.wordpointerPos += (mp.bitindex >> 3); - mp.bitindex &= 7; - - return rval >> 7; - } - - private static double Ci[] = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, - -0.0142, -0.0037 }; - private static int len[] = { 36, 36, 12, 36 }; - - /* - * init tables for layer-3 - */ - public void init_layer3(final int down_sample_sblimit) { - for (int i = -256; i < 118 + 4; i++) - gainpow2[i + 256] = (float) Math.pow((double) 2.0, -0.25 - * (double) (i + 210)); - - for (int i = 0; i < 8207; i++) - ispow[i] = (float) Math.pow((double) i, (double) 4.0 / 3.0); - - for (int i = 0; i < 8; i++) { - double sq = Math.sqrt(1.0 + Ci[i] * Ci[i]); - aa_cs[i] = (float) (1.0 / sq); - aa_ca[i] = (float) (Ci[i] / sq); - } - - for (int i = 0; i < 18; i++) { - win[0][i] = win[1][i] = (float) (0.5 * Math.sin(MPG123.M_PI / 72.0 - * (double) (2 * (i + 0) + 1)) / Math.cos(MPG123.M_PI - * (double) (2 * (i + 0) + 19) / 72.0)); - win[0][i + 18] = win[3][i + 18] = (float) (0.5 * Math - .sin(MPG123.M_PI / 72.0 * (double) (2 * (i + 18) + 1)) / Math - .cos(MPG123.M_PI * (double) (2 * (i + 18) + 19) / 72.0)); - } - for (int i = 0; i < 6; i++) { - win[1][i + 18] = (float) (0.5 / Math.cos(MPG123.M_PI - * (double) (2 * (i + 18) + 19) / 72.0)); - win[3][i + 12] = (float) (0.5 / Math.cos(MPG123.M_PI - * (double) (2 * (i + 12) + 19) / 72.0)); - win[1][i + 24] = (float) (0.5 * Math.sin(MPG123.M_PI / 24.0 - * (double) (2 * i + 13)) / Math.cos(MPG123.M_PI - * (double) (2 * (i + 24) + 19) / 72.0)); - win[1][i + 30] = win[3][i] = 0.0f; - win[3][i + 6] = (float) (0.5 * Math.sin(MPG123.M_PI / 24.0 - * (double) (2 * i + 1)) / Math.cos(MPG123.M_PI - * (double) (2 * (i + 6) + 19) / 72.0)); - } - - for (int i = 0; i < 9; i++) - COS9[i] = (float) Math.cos(MPG123.M_PI / 18.0 * (double) i); - - for (int i = 0; i < 9; i++) - tfcos36[i] = (float) (0.5 / Math.cos(MPG123.M_PI - * (double) (i * 2 + 1) / 36.0)); - for (int i = 0; i < 3; i++) - tfcos12[i] = (float) (0.5 / Math.cos(MPG123.M_PI - * (double) (i * 2 + 1) / 12.0)); - - COS6_1 = (float) Math.cos(MPG123.M_PI / 6.0 * (double) 1); - COS6_2 = (float) Math.cos(MPG123.M_PI / 6.0 * (double) 2); - - for (int i = 0; i < 12; i++) { - win[2][i] = (float) (0.5 * Math.sin(MPG123.M_PI / 24.0 - * (double) (2 * i + 1)) / Math.cos(MPG123.M_PI - * (double) (2 * i + 7) / 24.0)); - for (int j = 0; j < 6; j++) - COS1[i][j] = (float) Math.cos(MPG123.M_PI / 24.0 - * (double) ((2 * i + 7) * (2 * j + 1))); - } - - for (int j = 0; j < 4; j++) { - for (int i = 0; i < len[j]; i += 2) - win1[j][i] = +win[j][i]; - for (int i = 1; i < len[j]; i += 2) - win1[j][i] = -win[j][i]; - } - - for (int i = 0; i < 16; i++) { - double t = Math.tan((double) i * MPG123.M_PI / 12.0); - tan1_1[i] = (float) (t / (1.0 + t)); - tan2_1[i] = (float) (1.0 / (1.0 + t)); - tan1_2[i] = (float) (MPG123.M_SQRT2 * t / (1.0 + t)); - tan2_2[i] = (float) (MPG123.M_SQRT2 / (1.0 + t)); - - for (int j = 0; j < 2; j++) { - double base = Math.pow(2.0, -0.25 * (j + 1.0)); - double p1 = 1.0, p2 = 1.0; - if (i > 0) { - if ((i & 1) != 0) - p1 = Math.pow(base, (i + 1.0) * 0.5); - else - p2 = Math.pow(base, i * 0.5); - } - pow1_1[j][i] = (float) p1; - pow2_1[j][i] = (float) p2; - pow1_2[j][i] = (float) (MPG123.M_SQRT2 * p1); - pow2_2[j][i] = (float) (MPG123.M_SQRT2 * p2); - } - } - - for (int j = 0; j < 9; j++) { - final bandInfoStruct bi = bandInfo[j]; - int mp; - int cb, lwin; - int bdf; - - map[j][0] = mapbuf0[j]; - mp = 0; - bdf = 0; - int i; - for (i = 0, cb = 0; cb < 8; cb++, i += bi.longDiff[bdf++]) { - map[j][0][mp++] = (bi.longDiff[bdf]) >> 1; - map[j][0][mp++] = i; - map[j][0][mp++] = 3; - map[j][0][mp++] = cb; - } - bdf = +3; - for (cb = 3; cb < 13; cb++) { - int l = (bi.shortDiff[bdf++]) >> 1; - for (lwin = 0; lwin < 3; lwin++) { - map[j][0][mp++] = l; - map[j][0][mp++] = i + lwin; - map[j][0][mp++] = lwin; - map[j][0][mp++] = cb; - } - i += 6 * l; - } - mapend[j][0] = mp; - - map[j][1] = mapbuf1[j]; - mp = 0; - bdf = 0; - for (i = 0, cb = 0; cb < 13; cb++) { - int l = (bi.shortDiff[bdf++]) >> 1; - for (lwin = 0; lwin < 3; lwin++) { - map[j][1][mp++] = l; - map[j][1][mp++] = i + lwin; - map[j][1][mp++] = lwin; - map[j][1][mp++] = cb; - } - i += 6 * l; - } - mapend[j][1] = mp; - - map[j][2] = mapbuf2[j]; - mp = 0; - bdf = 0; - for (cb = 0; cb < 22; cb++) { - map[j][2][mp++] = (bi.longDiff[bdf++]) >> 1; - map[j][2][mp++] = cb; - } - mapend[j][2] = mp; - - } - - for (int j = 0; j < 9; j++) { - for (int i = 0; i < 23; i++) { - longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1; - if (longLimit[j][i] > (down_sample_sblimit)) - longLimit[j][i] = down_sample_sblimit; - } - for (int i = 0; i < 14; i++) { - shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1; - if (shortLimit[j][i] > (down_sample_sblimit)) - shortLimit[j][i] = down_sample_sblimit; - } - } - - for (int i = 0; i < 5; i++) { - for (int j = 0; j < 6; j++) { - for (int k = 0; k < 6; k++) { - int n = k + j * 6 + i * 36; - i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12); - } - } - } - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - for (int k = 0; k < 4; k++) { - int n = k + j * 4 + i * 16; - i_slen2[n + 180] = i | (j << 3) | (k << 6) | (4 << 12); - } - } - } - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 3; j++) { - int n = j + i * 3; - i_slen2[n + 244] = i | (j << 3) | (5 << 12); - n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15); - } - } - - for (int i = 0; i < 5; i++) { - for (int j = 0; j < 5; j++) { - for (int k = 0; k < 4; k++) { - int l; - for (l = 0; l < 4; l++) { - int n = l + k * 4 + j * 16 + i * 80; - n_slen2[n] = i | (j << 3) | (k << 6) | (l << 9) - | (0 << 12); - } - } - } - } - for (int i = 0; i < 5; i++) { - for (int j = 0; j < 5; j++) { - for (int k = 0; k < 4; k++) { - int n = k + j * 4 + i * 20; - n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12); - } - } - } - } - - /* - * read additional side information - */ - - private void III_get_side_info_1(final mpstr_tag mp, final III_sideinfo si, - final int stereo, final int ms_stereo, final int sfreq, - final int single) { - int ch, gr; - int powdiff = (single == 3) ? 4 : 0; - - si.main_data_begin = common.getbits(mp, 9); - if (stereo == 1) - si.private_bits = common.getbits_fast(mp, 5); - else - si.private_bits = common.getbits_fast(mp, 3); - - for (ch = 0; ch < stereo; ch++) { - si.ch[ch].gr[0].scfsi = -1; - si.ch[ch].gr[1].scfsi = common.getbits_fast(mp, 4); - } - - for (gr = 0; gr < 2; gr++) { - for (ch = 0; ch < stereo; ch++) { - gr_info_s gr_infos = si.ch[ch].gr[gr]; - - gr_infos.part2_3_length = common.getbits(mp, 12); - gr_infos.big_values = common.getbits_fast(mp, 9); - if (gr_infos.big_values > 288) { - System.err.printf("big_values too large! %d\n", gr_infos.big_values); - gr_infos.big_values = 288; - } - { - int qss = common.getbits_fast(mp, 8); - gr_infos.pow2gain = gainpow2; - gr_infos.pow2gainPos = 256 - qss + powdiff; - if (mp.pinfo != null) { - mp.pinfo.qss[gr][ch] = qss; - } - } - if (ms_stereo!=0) - gr_infos.pow2gainPos += 2; - gr_infos.scalefac_compress = common.getbits_fast(mp, 4); - /* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 . win-sw-flag = 0 */ - if (get1bit(mp)!=0) { - int i; - gr_infos.block_type = common.getbits_fast(mp, 2); - gr_infos.mixed_block_flag = get1bit(mp); - gr_infos.table_select[0] = common.getbits_fast(mp, 5); - gr_infos.table_select[1] = common.getbits_fast(mp, 5); - - - /* - * table_select[2] not needed, because there is no region2, - * but to satisfy some verifications tools we set it either. - */ - gr_infos.table_select[2] = 0; - for (i = 0; i < 3; i++) { - int sbg = (common.getbits_fast(mp, 3) << 3); - gr_infos.full_gain[i] = gr_infos.pow2gain; - gr_infos.full_gainPos[i] = gr_infos.pow2gainPos + sbg; - if (mp.pinfo != null) - mp.pinfo.sub_gain[gr][ch][i] = sbg / 8; - } - - if (gr_infos.block_type == 0) { - System.err.printf("Blocktype == 0 and window-switching == 1 not allowed.\n"); - /* error seems to be very good recoverable, so don't exit */ - /* exit(1); */ - } - /* region_count/start parameters are implicit in this case. */ - gr_infos.region1start = 36 >> 1; - gr_infos.region2start = 576 >> 1; - } - else { - int i, r0c, r1c; - for (i = 0; i < 3; i++) - gr_infos.table_select[i] = common.getbits_fast(mp, 5); - r0c = common.getbits_fast(mp, 4); - r1c = common.getbits_fast(mp, 3); - gr_infos.region1start = bandInfo[sfreq].longIdx[r0c + 1] >> 1; - gr_infos.region2start = bandInfo[sfreq].longIdx[r0c + 1 + r1c + 1] >> 1; - gr_infos.block_type = 0; - gr_infos.mixed_block_flag = 0; - } - gr_infos.preflag = get1bit(mp); - gr_infos.scalefac_scale = get1bit(mp); - gr_infos.count1table_select = get1bit(mp); - } - } - } - - /* - * Side Info for MPEG 2.0 / LSF - */ - private void III_get_side_info_2(final mpstr_tag mp, final III_sideinfo si, - final int stereo, final int ms_stereo, final int sfreq, - final int single) { - int ch; - int powdiff = (single == 3) ? 4 : 0; - - si.main_data_begin = common.getbits(mp, 8); - - if (stereo == 1) - si.private_bits = get1bit(mp); - else - si.private_bits = common.getbits_fast(mp, 2); - - for (ch = 0; ch < stereo; ch++) { - gr_info_s gr_infos = si.ch[ch].gr[0]; - int qss; - - gr_infos.part2_3_length = common.getbits(mp, 12); - gr_infos.big_values = common.getbits_fast(mp, 9); - if (gr_infos.big_values > 288) { - System.err.printf("big_values too large! %d\n", gr_infos.big_values); - gr_infos.big_values = 288; - } - qss = common.getbits_fast(mp, 8); - gr_infos.pow2gain = gainpow2; - gr_infos.pow2gainPos = 256 - qss + powdiff; - if (mp.pinfo != null) { - mp.pinfo.qss[0][ch] = qss; - } - - if (ms_stereo!=0) - gr_infos.pow2gainPos += 2; - gr_infos.scalefac_compress = common.getbits(mp, 9); - /* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 . win-sw-flag = 0 */ - if (get1bit(mp)!=0) { - int i; - gr_infos.block_type = common.getbits_fast(mp, 2); - gr_infos.mixed_block_flag = get1bit(mp); - gr_infos.table_select[0] = common.getbits_fast(mp, 5); - gr_infos.table_select[1] = common.getbits_fast(mp, 5); - /* - * table_select[2] not needed, because there is no region2, - * but to satisfy some verifications tools we set it either. - */ - gr_infos.table_select[2] = 0; - for (i = 0; i < 3; i++) { - int sbg = (common.getbits_fast(mp, 3) << 3); - gr_infos.full_gain[i] = gr_infos.pow2gain; - gr_infos.full_gainPos[i] = gr_infos.pow2gainPos+sbg; - if (mp.pinfo != null) - mp.pinfo.sub_gain[0][ch][i] = sbg / 8; - - } - - if (gr_infos.block_type == 0) { - System.err.printf("Blocktype == 0 and window-switching == 1 not allowed.\n"); - /* error seems to be very good recoverable, so don't exit */ - /* exit(1); */ - } - /* region_count/start parameters are implicit in this case. */ - /* check this again! */ - if (gr_infos.block_type == 2) { - if (sfreq == 8) - gr_infos.region1start = 36; - else - gr_infos.region1start = 36 >> 1; - } - else if (sfreq == 8) - /* check this for 2.5 and sfreq=8 */ - gr_infos.region1start = 108 >> 1; - else - gr_infos.region1start = 54 >> 1; - gr_infos.region2start = 576 >> 1; - } - else { - int i, r0c, r1c; - for (i = 0; i < 3; i++) - gr_infos.table_select[i] = common.getbits_fast(mp, 5); - r0c = common.getbits_fast(mp, 4); - r1c = common.getbits_fast(mp, 3); - gr_infos.region1start = bandInfo[sfreq].longIdx[r0c + 1] >> 1; - gr_infos.region2start = bandInfo[sfreq].longIdx[r0c + 1 + r1c + 1] >> 1; - gr_infos.block_type = 0; - gr_infos.mixed_block_flag = 0; - } - gr_infos.scalefac_scale = get1bit(mp); - gr_infos.count1table_select = get1bit(mp); - } - } - - private static final int slen[][] = { - {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, - {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} - }; - /* - * read scalefactors - */ - - private int - III_get_scale_factors_1(mpstr_tag mp, int []scf, gr_info_s gr_infos) - { - int scfPos=0; - int numbits; - int num0 = slen[0][gr_infos.scalefac_compress]; - int num1 = slen[1][gr_infos.scalefac_compress]; - - if (gr_infos.block_type == 2) { - int i = 18; - numbits = (num0 + num1) * 18; - - if (gr_infos.mixed_block_flag!=0) { - for (i = 8; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num0); - i = 9; - numbits -= num0; /* num0 * 17 + num1 * 18 */ - } - - for (; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num0); - for (i = 18; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num1); - scf[scfPos++] = 0; - scf[scfPos++] = 0; - scf[scfPos++] = 0; /* short[13][0..2] = 0 */ - } - else { - int i; - int scfsi = gr_infos.scfsi; - - if (scfsi < 0) { /* scfsi < 0 => granule == 0 */ - for (i = 11; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num0); - for (i = 10; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num1); - numbits = (num0 + num1) * 10 + num0; - } - else { - numbits = 0; - if (0==(scfsi & 0x8)) { - for (i = 6; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num0); - numbits += num0 * 6; - } - else { - scfPos += 6; - } - - if (0==(scfsi & 0x4)) { - for (i = 5; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num0); - numbits += num0 * 5; - } - else { - scfPos += 5; - } - - if (0==(scfsi & 0x2)) { - for (i = 5; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num1); - numbits += num1 * 5; - } - else { - scfPos += 5; - } - - if (0==(scfsi & 0x1)) { - for (i = 5; i!=0; i--) - scf[scfPos++] = common.getbits_fast(mp, num1); - numbits += num1 * 5; - } - else { - scfPos += 5; - } - } - - scf[scfPos++] = 0; /* no l[21] in original sources */ - } - return numbits; - } - - private static final int stab[][][] = { - { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} , - { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } , - { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} , - {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } , - { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} , - { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } }; - - private int - III_get_scale_factors_2(mpstr_tag mp, int []scf, gr_info_s gr_infos, int i_stereo) - { - int scfPos=0; - int[] pnt; - int i, j; - int slen; - int n = 0; - int numbits = 0; - - if (i_stereo!=0) /* i_stereo AND second channel . do_layer3() checks this */ - slen = i_slen2[gr_infos.scalefac_compress >> 1]; - else - slen = n_slen2[gr_infos.scalefac_compress]; - - gr_infos.preflag = (slen >> 15) & 0x1; - - n = 0; - if (gr_infos.block_type == 2) { - n++; - if (gr_infos.mixed_block_flag!=0) - n++; - } - - pnt = stab[n][(slen >> 12) & 0x7]; - - for (i = 0; i < 4; i++) { - int num = slen & 0x7; - slen >>= 3; - if (num!=0) { - for (j = 0; j < (int) (pnt[i]); j++) - scf[scfPos++] = common.getbits_fast(mp, num); - numbits += pnt[i] * num; - } - else { - for (j = 0; j < (int) (pnt[i]); j++) - scf[scfPos++] = 0; - } - } - - n = (n << 1) + 1; - for (i = 0; i < n; i++) - scf[scfPos++] = 0; - - return numbits; - } - - private static final int pretab1 [] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0}; /* char enough ? */ - private static final int pretab2 [] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - - private int - III_dequantize_sample(mpstr_tag mp, float xr[], int []scf, - gr_info_s gr_infos, int sfreq, int part2bits) - { - int scfPos = 0; - int shift = 1 + gr_infos.scalefac_scale; - float []xrpnt = (float []) xr; - int xrpntPos=0; - int l[]=new int[3], l3; - int part2remain = gr_infos.part2_3_length - part2bits; - int me; - - /* fprintf(stderr,"part2remain = %d, gr_infos.part2_3_length = %d, part2bits = %d\n", - part2remain, gr_infos.part2_3_length, part2bits); */ - - { - int i; - - for (i = ((MPG123.SBLIMIT*MPG123.SSLIMIT) - xrpntPos) >> 1; i > 0; i--) { - xrpnt[xrpntPos++] = 0.0f; - xrpnt[xrpntPos++] = 0.0f; - } - - xrpnt = (float [])xr; - xrpntPos = 0; - } - - { - int bv = gr_infos.big_values; - int region1 = gr_infos.region1start; - int region2 = gr_infos.region2start; - - l3 = ((576 >> 1) - bv) >> 1; - /* - * we may lose the 'odd' bit here !! - * check this later again - */ - if (bv <= region1) { - l[0] = bv; - l[1] = 0; - l[2] = 0; - } - else { - l[0] = region1; - if (bv <= region2) { - l[1] = bv - l[0]; - l[2] = 0; - } - else { - l[1] = region2 - l[0]; - l[2] = bv - region2; - } - } - } - /* MDH crash fix */ - { - int i; - for (i = 0; i < 3; i++) { - if (l[i] < 0) { - System.err.printf("hip: Bogus region length (%d)\n", l[i]); - l[i] = 0; - } - } - } - /* end MDH crash fix */ - - if (gr_infos.block_type == 2) { - /* - * decoding with short or mixed mode BandIndex table - */ - int i, max[]=new int[4]; - int step = 0, lwin = 0, cb = 0; - float v = 0.0f; - int []m; - int mc; - int mPos=0; - if (gr_infos.mixed_block_flag!=0) { - max[3] = -1; - max[0] = max[1] = max[2] = 2; - m = map[sfreq][0]; - mPos = 0; - me = mapend[sfreq][0]; - } - else { - max[0] = max[1] = max[2] = max[3] = -1; - /* max[3] not really needed in this case */ - m = map[sfreq][1]; - mPos = 0; - me = mapend[sfreq][1]; - } - - mc = 0; - for (i = 0; i < 2; i++) { - int lp = l[i]; - newhuff []h = Huffman.ht; - int hPos = (gr_infos.table_select[i]); - - for (; lp!=0; lp--, mc--) { - int x, y; - if ((0==mc)) { - mc = m[mPos++]; - xrpnt = (float[]) xr; - xrpntPos = (m[mPos++]); - lwin = m[mPos++]; - cb = m[mPos++]; - if (lwin == 3) { - v = gr_infos.pow2gain[gr_infos.pow2gainPos+(((scf[scfPos++]) << shift))]; - step = 1; - } - else { - v = gr_infos.full_gain[lwin][gr_infos.full_gainPos[lwin]+((scf[scfPos++]) << shift)]; - step = 3; - } - } - { - short []val = h[hPos].table; - int valPos=0; - while ((y = val[valPos++]) < 0) { - if (get1bit(mp)!=0) - valPos -= y; - part2remain--; - } - x = y >> 4; - y &= 0xf; - } - if (x == 15) { - max[lwin] = cb; - part2remain -= h[hPos].linbits + 1; - x += common.getbits(mp, (int) h[hPos].linbits); - if (get1bit(mp)!=0) - xrpnt[xrpntPos] = -ispow[x] * v; - else - xrpnt[xrpntPos] = ispow[x] * v; - } - else if (x!=0) { - max[lwin] = cb; - if (get1bit(mp)!=0) - xrpnt[xrpntPos] = -ispow[x] * v; - else - xrpnt[xrpntPos] = ispow[x] * v; - part2remain--; - } - else - xrpnt[xrpntPos] = 0.0f; - xrpntPos += step; - if (y == 15) { - max[lwin] = cb; - part2remain -= h[hPos].linbits + 1; - y += common.getbits(mp, (int) h[hPos].linbits); - if (get1bit(mp)!=0) - xrpnt[xrpntPos] = -ispow[y] * v; - else - xrpnt[xrpntPos] = ispow[y] * v; - } - else if (y!=0) { - max[lwin] = cb; - if (get1bit(mp)!=0) - xrpnt[xrpntPos] = -ispow[y] * v; - else - xrpnt[xrpntPos] = ispow[y] * v; - part2remain--; - } - else - xrpnt[xrpntPos] = 0.0f; - xrpntPos += step; - } - } - for (; l3!=0 && (part2remain > 0); l3--) { - newhuff []h = Huffman.htc; - int hPos = (gr_infos.count1table_select); - short []val = h[hPos].table; - int valPos = 0; - short a; - - while ((a = val[valPos++]) < 0) { - part2remain--; - if (part2remain < 0) { - part2remain++; - a = 0; - break; - } - if (get1bit(mp)!=0) - valPos -= a; - } - for (i = 0; i < 4; i++) { - if (0==(i & 1)) { - if (0==mc) { - mc = m[mPos++]; - xrpnt = ((float []) xr); - xrpntPos = (m[mPos++]); - lwin = m[mPos++]; - cb = m[mPos++]; - if (lwin == 3) { - v = gr_infos.pow2gain[gr_infos.pow2gainPos+((scf[scfPos++]) << shift)]; - step = 1; - } - else { - v = gr_infos.full_gain[lwin][gr_infos.full_gainPos[lwin]+((scf[scfPos++]) << shift)]; - step = 3; - } - } - mc--; - } - if ((a & (0x8 >> i))!=0) { - max[lwin] = cb; - part2remain--; - if (part2remain < 0) { - part2remain++; - break; - } - if (get1bit(mp)!=0) - xrpnt[xrpntPos] = -v; - else - xrpnt[xrpntPos] = v; - } - else - xrpnt[xrpntPos] = 0.0f; - xrpntPos += step; - } - } - - while (mPos < me) { - if (0==mc) { - mc = m[mPos++]; - xrpnt = ((float []) xr); - xrpntPos = m[mPos++]; - if ((m[mPos++]) == 3) - step = 1; - else - step = 3; - mPos++; /* cb */ - } - mc--; - xrpnt[xrpntPos] = 0.0f; - xrpntPos += step; - xrpnt[xrpntPos] = 0.0f; - xrpntPos += step; - /* we could add a little opt. here: - * if we finished a band for window 3 or a long band - * further bands could copied in a simple loop without a - * special 'map' decoding - */ - } - - gr_infos.maxband[0] = max[0] + 1; - gr_infos.maxband[1] = max[1] + 1; - gr_infos.maxband[2] = max[2] + 1; - gr_infos.maxbandl = max[3] + 1; - - { - int rmax = max[0] > max[1] ? max[0] : max[1]; - rmax = (rmax > max[2] ? rmax : max[2]) + 1; - gr_infos.maxb = rmax!=0 ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3] + 1]; - } - - } - else { - /* - * decoding with 'long' BandIndex table (block_type != 2) - */ - int []pretab = (int []) (gr_infos.preflag!=0 ? pretab1 : pretab2); - int pretabPos = 0; - int i, max = -1; - int cb = 0; - int []m = map[sfreq][2]; - int mPos=0; - float v = 0.0f; - int mc = 0; - - /* - * long hash table values - */ - for (i = 0; i < 3; i++) { - int lp = l[i]; - newhuff []h = Huffman.ht; - int hPos = (gr_infos.table_select[i]); - - for (; lp!=0; lp--, mc--) { - int x, y; - - if (0==mc) { - mc = m[mPos++]; - v = gr_infos.pow2gain[gr_infos.pow2gainPos+(((scf[scfPos++]) + (pretab[pretabPos++])) << shift)]; - cb = m[mPos++]; - } - { - short []val = h[hPos].table; - int valPos = 0; - while ((y = val[valPos++]) < 0) { - if (get1bit(mp)!=0) - valPos -= y; - part2remain--; - } - x = y >> 4; - y &= 0xf; - } - if (x == 15) { - max = cb; - part2remain -= h[hPos].linbits + 1; - x += common.getbits(mp, (int) h[hPos].linbits); - if (get1bit(mp)!=0) - xrpnt[xrpntPos++] = -ispow[x] * v; - else - xrpnt[xrpntPos++] = ispow[x] * v; - } - else if (x!=0) { - max = cb; - if (get1bit(mp)!=0) - xrpnt[xrpntPos++] = -ispow[x] * v; - else - xrpnt[xrpntPos++] = ispow[x] * v; - part2remain--; - } - else - xrpnt[xrpntPos++] = 0.0f; - - if (y == 15) { - max = cb; - part2remain -= h[hPos].linbits + 1; - y += common.getbits(mp, (int) h[hPos].linbits); - if (get1bit(mp)!=0) - xrpnt[xrpntPos++] = -ispow[y] * v; - else - xrpnt[xrpntPos++] = ispow[y] * v; - } - else if (y!=0) { - max = cb; - if (get1bit(mp)!=0) - xrpnt[xrpntPos++] = -ispow[y] * v; - else - xrpnt[xrpntPos++] = ispow[y] * v; - part2remain--; - } - else - xrpnt[xrpntPos++] = 0.0f; - } - } - - /* - * short (count1table) values - */ - for (; l3!=0 && (part2remain > 0); l3--) { - newhuff []h = Huffman.htc; - int hPos = (gr_infos.count1table_select); - short []val = h[hPos].table; - int valPos = 0; - short a; - - while ((a = val[valPos++]) < 0) { - part2remain--; - if (part2remain < 0) { - part2remain++; - a = 0; - break; - } - if (get1bit(mp)!=0) - valPos -= a; - } - for (i = 0; i < 4; i++) { - if (0==(i & 1)) { - if (0==mc) { - mc = m[mPos++]; - cb = m[mPos++]; - v = gr_infos.pow2gain[gr_infos.pow2gainPos+(((scf[scfPos++]) + (pretab[pretabPos++])) << shift)]; - } - mc--; - } - if ((a & (0x8 >> i))!=0) { - max = cb; - part2remain--; - if (part2remain < 0) { - part2remain++; - break; - } - if (get1bit(mp)!=0) - xrpnt[xrpntPos++] = -v; - else - xrpnt[xrpntPos++] = v; - } - else - xrpnt[xrpntPos++] = 0.0f; - } - } - - /* - * zero part - */ - for (i = ((MPG123.SBLIMIT*MPG123.SSLIMIT) - xrpntPos) >> 1; i!=0; i--) { - xrpnt[xrpntPos++] = 0.0f; - xrpnt[xrpntPos++] = 0.0f; - } - - gr_infos.maxbandl = max + 1; - gr_infos.maxb = longLimit[sfreq][gr_infos.maxbandl]; - } - - while (part2remain > 16) { - common.getbits(mp, 16); /* Dismiss stuffing Bits */ - part2remain -= 16; - } - if (part2remain > 0) - common.getbits(mp, part2remain); - else if (part2remain < 0) { - System.err.printf("hip: Can't rewind stream by %d bits!\n", -part2remain); - return 1; /* . error */ - } - return 0; - } - - /* - * III_stereo: calculate real channel values for Joint-I-Stereo-mode - */ - private void - III_i_stereo(float xr_buf[][], int []scalefac, - gr_info_s gr_infos, int sfreq, int ms_stereo, int lsf) - { - float[][] xr = xr_buf ; - final bandInfoStruct bi = bandInfo[sfreq]; - float tabl1[], tabl2[]; - - if (lsf!=0) { - int p = gr_infos.scalefac_compress & 0x1; - if (ms_stereo!=0) { - tabl1 = pow1_2[p]; - tabl2 = pow2_2[p]; - } - else { - tabl1 = pow1_1[p]; - tabl2 = pow2_1[p]; - } - } - else { - if (ms_stereo!=0) { - tabl1 = tan1_2; - tabl2 = tan2_2; - } - else { - tabl1 = tan1_1; - tabl2 = tan2_1; - } - } - - if (gr_infos.block_type == 2) { - int lwin, do_l = 0; - if (gr_infos.mixed_block_flag!=0) - do_l = 1; - - for (lwin = 0; lwin < 3; lwin++) { /* process each window */ - /* get first band with zero values */ - int is_p, sb, idx, sfb = gr_infos.maxband[lwin]; /* sfb is minimal 3 for mixed mode */ - if (sfb > 3) - do_l = 0; - - for (; sfb < 12; sfb++) { - is_p = scalefac[sfb * 3 + lwin - gr_infos.mixed_block_flag]; /* scale: 0-15 */ - if (is_p != 7) { - float t1, t2; - sb = bi.shortDiff[sfb]; - idx = bi.shortIdx[sfb] + lwin; - t1 = tabl1[is_p]; - t2 = tabl2[is_p]; - for (; sb > 0; sb--, idx += 3) { - float v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - } - - /* in the original: copy 10 to 11 , here: copy 11 to 12 - maybe still wrong??? (copy 12 to 13?) */ - is_p = scalefac[11 * 3 + lwin - gr_infos.mixed_block_flag]; /* scale: 0-15 */ - sb = bi.shortDiff[12]; - idx = bi.shortIdx[12] + lwin; - if (is_p != 7) { - float t1, t2; - t1 = tabl1[is_p]; - t2 = tabl2[is_p]; - for (; sb > 0; sb--, idx += 3) { - float v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - } /* end for(lwin; .. ; . ) */ - - if (do_l!=0) { - /* also check l-part, if ALL bands in the three windows are 'empty' - * and mode = mixed_mode - */ - int sfb = gr_infos.maxbandl; - int idx = bi.longIdx[sfb]; - - for (; sfb < 8; sfb++) { - int sb = bi.longDiff[sfb]; - int is_p = scalefac[sfb]; /* scale: 0-15 */ - if (is_p != 7) { - float t1, t2; - t1 = tabl1[is_p]; - t2 = tabl2[is_p]; - for (; sb > 0; sb--, idx++) { - float v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - else - idx += sb; - } - } - } - else { /* ((gr_infos.block_type != 2)) */ - - int sfb = gr_infos.maxbandl; - int is_p, idx = bi.longIdx[sfb]; - for (; sfb < 21; sfb++) { - int sb = bi.longDiff[sfb]; - is_p = scalefac[sfb]; /* scale: 0-15 */ - if (is_p != 7) { - float t1, t2; - t1 = tabl1[is_p]; - t2 = tabl2[is_p]; - for (; sb > 0; sb--, idx++) { - float v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - else - idx += sb; - } - - is_p = scalefac[20]; /* copy l-band 20 to l-band 21 */ - if (is_p != 7) { - int sb; - float t1 = tabl1[is_p], t2 = tabl2[is_p]; - - for (sb = bi.longDiff[21]; sb > 0; sb--, idx++) { - float v = xr[0][idx]; - xr[0][idx] = v * t1; - xr[1][idx] = v * t2; - } - } - } /* ... */ - } - - private void - III_antialias(float xr[], gr_info_s gr_infos) - { - int sblim; - - if (gr_infos.block_type == 2) { - if (0==gr_infos.mixed_block_flag) - return; - sblim = 1; - } - else { - sblim = gr_infos.maxb - 1; - } - - /* 31 alias-reduction operations between each pair of sub-bands */ - /* with 8 butterflies between each pair */ - - { - int sb; - float []xr1 = (float []) xr; - int xr1Pos=MPG123.SSLIMIT; - - for (sb = sblim; sb!=0; sb--, xr1Pos += 10) { - int ss; - float cs[] = aa_cs, ca[] = aa_ca; - int caPos=0; int csPos=0; - float []xr2 = xr1; - int xr2Pos = xr1Pos; - - for (ss = 7; ss >= 0; ss--) { /* upper and lower butterfly inputs */ - float bu = xr2[--xr2Pos], bd = xr1[xr1Pos]; - xr2[xr2Pos] = (bu * (cs[csPos])) - (bd * (ca[caPos])); - xr1[xr1Pos++] = (bd * (cs[csPos++])) + (bu * (ca[caPos++])); - } - } - } - } - - /* - DCT insipired by Jeff Tsay's DCT from the maplay package - this is an optimized version with manual unroll. - - References: - [1] S. Winograd: "On Computing the Discrete Fourier Transform", - Mathematics of Computation, Volume 32, Number 141, January 1978, - Pages 175-199 - */ - - private void dct36(float[] inbuf, int inbufPos,float[] o1, int o1Pos,float[] o2, int o2Pos,float[] wintab,float[] tsbuf, int tsPos) - { - { - float []in = inbuf; - int inPos = inbufPos; - - in[inPos+17]+=in[inPos+16]; in[inPos+16]+=in[inPos+15]; in[inPos+15]+=in[inPos+14]; - in[inPos+14]+=in[inPos+13]; in[inPos+13]+=in[inPos+12]; in[inPos+12]+=in[inPos+11]; - in[inPos+11]+=in[inPos+10]; in[inPos+10]+=in[inPos+9]; in[inPos+9] +=in[inPos+8]; - in[inPos+8] +=in[inPos+7]; in[inPos+7] +=in[inPos+6]; in[inPos+6] +=in[inPos+5]; - in[inPos+5] +=in[inPos+4]; in[inPos+4] +=in[inPos+3]; in[inPos+3] +=in[inPos+2]; - in[inPos+2] +=in[inPos+1]; in[inPos+1] +=in[inPos+0]; - - in[inPos+17]+=in[inPos+15]; in[inPos+15]+=in[inPos+13]; in[inPos+13]+=in[inPos+11]; in[inPos+11]+=in[inPos+9]; - in[inPos+9] +=in[inPos+7]; in[inPos+7] +=in[inPos+5]; in[inPos+5] +=in[inPos+3]; in[inPos+3] +=in[inPos+1]; - - { - - final float []c = COS9; - float []out2 = o2; - int out2Pos = o2Pos; - float []w = wintab; - float []out1 = o1; - int out1Pos = o1Pos; - float []ts = tsbuf; - - float ta33,ta66,tb33,tb66; - - ta33 = in[inPos+2*3+0] * c[3]; - ta66 = in[inPos+2*6+0] * c[6]; - tb33 = in[inPos+2*3+1] * c[3]; - tb66 = in[inPos+2*6+1] * c[6]; - - { - float tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = in[inPos+2*1+0] * c[1] + ta33 + in[inPos+2*5+0] * c[5] + in[inPos+2*7+0] * c[7]; - tmp1b = in[inPos+2*1+1] * c[1] + tb33 + in[inPos+2*5+1] * c[5] + in[inPos+2*7+1] * c[7]; - tmp2a = in[inPos+2*0+0] + in[inPos+2*2+0] * c[2] + in[inPos+2*4+0] * c[4] + ta66 + in[inPos+2*8+0] * c[8]; - tmp2b = in[inPos+2*0+1] + in[inPos+2*2+1] * c[2] + in[inPos+2*4+1] * c[4] + tb66 + in[inPos+2*8+1] * c[8]; - -// MACRO1(0); - { - float sum0 = tmp1a + tmp2a; - float sum1 = (tmp1b + tmp2b) * tfcos36[(0)]; - float tmp; - out2[out2Pos+9 + (0)] = (tmp = sum0 + sum1) * w[27 + (0)]; - out2[out2Pos+8 - (0)] = tmp * w[26 - (0)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(0))] = out1[out1Pos+8-(0)] + sum0 * w[8-(0)]; - ts[tsPos + MPG123.SBLIMIT*(9+(0))] = out1[out1Pos+9+(0)] + sum0 * w[9+(0)]; - } -// MACRO2(8); - { - float sum0, sum1; - sum0 = tmp2a - tmp1a; - sum1 = (tmp2b - tmp1b) * tfcos36[(8)]; - float tmp; - out2[out2Pos+9 + (8)] = (tmp = sum0 + sum1) * w[27 + (8)]; - out2[out2Pos+8 - (8)] = tmp * w[26 - (8)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(8))] = out1[out1Pos+8-(8)] + sum0 * w[8-(8)]; - ts[tsPos + MPG123.SBLIMIT*(9+(8))] = out1[out1Pos+9+(8)] + sum0 * w[9+(8)]; - } - } - - { - float tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = ( in[inPos+2*1+0] - in[inPos+2*5+0] - in[inPos+2*7+0] ) * c[3]; - tmp1b = ( in[inPos+2*1+1] - in[inPos+2*5+1] - in[inPos+2*7+1] ) * c[3]; - tmp2a = ( in[inPos+2*2+0] - in[inPos+2*4+0] - in[inPos+2*8+0] ) * c[6] - in[inPos+2*6+0] + in[inPos+2*0+0]; - tmp2b = ( in[inPos+2*2+1] - in[inPos+2*4+1] - in[inPos+2*8+1] ) * c[6] - in[inPos+2*6+1] + in[inPos+2*0+1]; - -// MACRO1(1); - { - float sum0 = tmp1a + tmp2a; - float sum1 = (tmp1b + tmp2b) * tfcos36[(1)]; - float tmp; - out2[out2Pos+9 + (1)] = (tmp = sum0 + sum1) * w[27 + (1)]; - out2[out2Pos+8 - (1)] = tmp * w[26 - (1)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(1))] = out1[out1Pos+8-(1)] + sum0 * w[8-(1)]; - ts[tsPos + MPG123.SBLIMIT*(9+(1))] = out1[out1Pos+9+(1)] + sum0 * w[9+(1)]; - } -// MACRO2(7); - { - float sum0, sum1; - sum0 = tmp2a - tmp1a; - sum1 = (tmp2b - tmp1b) * tfcos36[(7)]; - float tmp; - out2[out2Pos+9 + (7)] = (tmp = sum0 + sum1) * w[27 + (7)]; - out2[out2Pos+8 - (7)] = tmp * w[26 - (7)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(7))] = out1[out1Pos+8-(7)] + sum0 * w[8-(7)]; - ts[tsPos + MPG123.SBLIMIT*(9+(7))] = out1[out1Pos+9+(7)] + sum0 * w[9+(7)]; - } - } - - { - float tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = in[inPos+2*1+0] * c[5] - ta33 - in[inPos+2*5+0] * c[7] + in[inPos+2*7+0] * c[1]; - tmp1b = in[inPos+2*1+1] * c[5] - tb33 - in[inPos+2*5+1] * c[7] + in[inPos+2*7+1] * c[1]; - tmp2a = in[inPos+2*0+0] - in[inPos+2*2+0] * c[8] - in[inPos+2*4+0] * c[2] + ta66 + in[inPos+2*8+0] * c[4]; - tmp2b = in[inPos+2*0+1] - in[inPos+2*2+1] * c[8] - in[inPos+2*4+1] * c[2] + tb66 + in[inPos+2*8+1] * c[4]; - -// MACRO1(2); - { - float sum0 = tmp1a + tmp2a; - float sum1 = (tmp1b + tmp2b) * tfcos36[(2)]; - float tmp; - out2[out2Pos+9 + (2)] = (tmp = sum0 + sum1) * w[27 + (2)]; - out2[out2Pos+8 - (2)] = tmp * w[26 - (2)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(2))] = out1[out1Pos+8-(2)] + sum0 * w[8-(2)]; - ts[tsPos + MPG123.SBLIMIT*(9+(2))] = out1[out1Pos+9+(2)] + sum0 * w[9+(2)]; - } -// MACRO2(6); - { - float sum0, sum1; - sum0 = tmp2a - tmp1a; - sum1 = (tmp2b - tmp1b) * tfcos36[(6)]; - float tmp; - out2[out2Pos+9 + (6)] = (tmp = sum0 + sum1) * w[27 + (6)]; - out2[out2Pos+8 - (6)] = tmp * w[26 - (6)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(6))] = out1[out1Pos+8-(6)] + sum0 * w[8-(6)]; - ts[tsPos + MPG123.SBLIMIT*(9+(6))] = out1[out1Pos+9+(6)] + sum0 * w[9+(6)]; - } - } - - { - float tmp1a,tmp2a,tmp1b,tmp2b; - tmp1a = in[inPos+2*1+0] * c[7] - ta33 + in[inPos+2*5+0] * c[1] - in[inPos+2*7+0] * c[5]; - tmp1b = in[inPos+2*1+1] * c[7] - tb33 + in[inPos+2*5+1] * c[1] - in[inPos+2*7+1] * c[5]; - tmp2a = in[inPos+2*0+0] - in[inPos+2*2+0] * c[4] + in[inPos+2*4+0] * c[8] + ta66 - in[inPos+2*8+0] * c[2]; - tmp2b = in[inPos+2*0+1] - in[inPos+2*2+1] * c[4] + in[inPos+2*4+1] * c[8] + tb66 - in[inPos+2*8+1] * c[2]; - -// MACRO1(3); - { - float sum0 = tmp1a + tmp2a; - float sum1 = (tmp1b + tmp2b) * tfcos36[(3)]; - float tmp; - out2[out2Pos+9 + (3)] = (tmp = sum0 + sum1) * w[27 + (3)]; - out2[out2Pos+8 - (3)] = tmp * w[26 - (3)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(3))] = out1[out1Pos+8-(3)] + sum0 * w[8-(3)]; - ts[tsPos + MPG123.SBLIMIT*(9+(3))] = out1[out1Pos+9+(3)] + sum0 * w[9+(3)]; - } -// MACRO2(5); - { - float sum0, sum1; - sum0 = tmp2a - tmp1a; - sum1 = (tmp2b - tmp1b) * tfcos36[(5)]; - float tmp; - out2[out2Pos+9 + (5)] = (tmp = sum0 + sum1) * w[27 + (5)]; - out2[out2Pos+8 - (5)] = tmp * w[26 - (5)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(5))] = out1[out1Pos+8-(5)] + sum0 * w[8-(5)]; - ts[tsPos + MPG123.SBLIMIT*(9+(5))] = out1[out1Pos+9+(5)] + sum0 * w[9+(5)]; - } - } - - { - float sum0,sum1; - sum0 = in[inPos+2*0+0] - in[inPos+2*2+0] + in[inPos+2*4+0] - in[inPos+2*6+0] + in[inPos+2*8+0]; - sum1 = (in[inPos+2*0+1] - in[inPos+2*2+1] + in[inPos+2*4+1] - in[inPos+2*6+1] + in[inPos+2*8+1] ) * tfcos36[4]; -// MACRO0(4) - { - float tmp; - out2[out2Pos+9 + (4)] = (tmp = sum0 + sum1) * w[27 + (4)]; - out2[out2Pos+8 - (4)] = tmp * w[26 - (4)]; - sum0 -= sum1; - ts[tsPos + MPG123.SBLIMIT*(8-(4))] = out1[out1Pos + 8-(4)] + sum0 * w[8-(4)]; - ts[tsPos + MPG123.SBLIMIT*(9+(4))] = out1[out1Pos + 9+(4)] + sum0 * w[9+(4)]; - } - } - } - - } - } - - /* - * new DCT12 - */ - private void dct12(float[]in,int inbufPos,float[]rawout1, int rawout1Pos,float[]rawout2, int rawout2Pos,float[]wi,float[]ts, int tsPos) - { - { - float in0,in1,in2,in3,in4,in5; - float []out1 = rawout1; - int out1Pos = rawout1Pos; - ts[tsPos+MPG123.SBLIMIT*0] = out1[out1Pos+0]; ts[tsPos+MPG123.SBLIMIT*1] = out1[out1Pos+1]; ts[tsPos+MPG123.SBLIMIT*2] = out1[out1Pos+2]; - ts[tsPos+MPG123.SBLIMIT*3] = out1[out1Pos+3]; ts[tsPos+MPG123.SBLIMIT*4] = out1[out1Pos+4]; ts[tsPos+MPG123.SBLIMIT*5] = out1[out1Pos+5]; - -// DCT12_PART1 - { - in5 = in[inbufPos+5 * 3]; - in5 += (in4 = in[inbufPos+4 * 3]); - in4 += (in3 = in[inbufPos+3 * 3]); - in3 += (in2 = in[inbufPos+2 * 3]); - in2 += (in1 = in[inbufPos+1 * 3]); - in1 += (in0 = in[inbufPos+0 * 3]); - - in5 += in3; - in3 += in1; - - in2 *= COS6_1; - in3 *= COS6_1; - } - { - float tmp0,tmp1 = (in0 - in4); - { - float tmp2 = (in1 - in5) * tfcos12[1]; - tmp0 = tmp1 + tmp2; - tmp1 -= tmp2; - } - ts[tsPos+(17-1)*MPG123.SBLIMIT] = out1[out1Pos+17-1] + tmp0 * wi[11-1]; - ts[tsPos+(12+1)*MPG123.SBLIMIT] = out1[out1Pos+12+1] + tmp0 * wi[6+1]; - ts[tsPos+(6 +1)*MPG123.SBLIMIT] = out1[out1Pos+6 +1] + tmp1 * wi[1]; - ts[tsPos+(11-1)*MPG123.SBLIMIT] = out1[out1Pos+11-1] + tmp1 * wi[5-1]; - } - -// DCT12_PART2 - { - in0 += in4 * COS6_2; - - in4 = in0 + in2; - in0 -= in2; - - in1 += in5 * COS6_2; - - in5 = (in1 + in3) * tfcos12[0]; - in1 = (in1 - in3) * tfcos12[2]; - - in3 = in4 + in5; - in4 -= in5; - - in2 = in0 + in1; - in0 -= in1; - } - ts[tsPos+(17-0)*MPG123.SBLIMIT] = out1[out1Pos+17-0] + in2 * wi[11-0]; - ts[tsPos+(12+0)*MPG123.SBLIMIT] = out1[out1Pos+12+0] + in2 * wi[6+0]; - ts[tsPos+(12+2)*MPG123.SBLIMIT] = out1[out1Pos+12+2] + in3 * wi[6+2]; - ts[tsPos+(17-2)*MPG123.SBLIMIT] = out1[out1Pos+17-2] + in3 * wi[11-2]; - - ts[tsPos+(6+0)*MPG123.SBLIMIT] = out1[out1Pos+6+0] + in0 * wi[0]; - ts[tsPos+(11-0)*MPG123.SBLIMIT] = out1[out1Pos+11-0] + in0 * wi[5-0]; - ts[tsPos+(6+2)*MPG123.SBLIMIT] = out1[out1Pos+6+2] + in4 * wi[2]; - ts[tsPos+(11-2)*MPG123.SBLIMIT] = out1[out1Pos+11-2] + in4 * wi[5-2]; - } - - inbufPos++; - - { - float in0,in1,in2,in3,in4,in5; - float []out2 = rawout2; - int out2Pos = rawout2Pos; - -// DCT12_PART1 - { - in5 = in[inbufPos+5 * 3]; - in5 += (in4 = in[inbufPos+4 * 3]); - in4 += (in3 = in[inbufPos+3 * 3]); - in3 += (in2 = in[inbufPos+2 * 3]); - in2 += (in1 = in[inbufPos+1 * 3]); - in1 += (in0 = in[inbufPos+0 * 3]); - - in5 += in3; - in3 += in1; - - in2 *= COS6_1; - in3 *= COS6_1; - } - - { - float tmp0,tmp1 = (in0 - in4); - { - float tmp2 = (in1 - in5) * tfcos12[1]; - tmp0 = tmp1 + tmp2; - tmp1 -= tmp2; - } - out2[out2Pos+5-1] = tmp0 * wi[11-1]; - out2[out2Pos+0+1] = tmp0 * wi[6+1]; - ts[tsPos+(12+1)*MPG123.SBLIMIT] += tmp1 * wi[1]; - ts[tsPos+(17-1)*MPG123.SBLIMIT] += tmp1 * wi[5-1]; - } - -// DCT12_PART2 - { - in0 += in4 * COS6_2; - - in4 = in0 + in2; - in0 -= in2; - - in1 += in5 * COS6_2; - - in5 = (in1 + in3) * tfcos12[0]; - in1 = (in1 - in3) * tfcos12[2]; - - in3 = in4 + in5; - in4 -= in5; - - in2 = in0 + in1; - in0 -= in1; - } - - out2[out2Pos+5-0] = in2 * wi[11-0]; - out2[out2Pos+0+0] = in2 * wi[6+0]; - out2[out2Pos+0+2] = in3 * wi[6+2]; - out2[out2Pos+5-2] = in3 * wi[11-2]; - - ts[tsPos+(12+0)*MPG123.SBLIMIT] += in0 * wi[0]; - ts[tsPos+(17-0)*MPG123.SBLIMIT] += in0 * wi[5-0]; - ts[tsPos+(12+2)*MPG123.SBLIMIT] += in4 * wi[2]; - ts[tsPos+(17-2)*MPG123.SBLIMIT] += in4 * wi[5-2]; - } - - inbufPos++; - - { - float in0,in1,in2,in3,in4,in5; - float []out2 = rawout2; - int out2Pos = rawout2Pos; - out2[out2Pos+12]=out2[out2Pos+13]=out2[out2Pos+14]=out2[out2Pos+15]=out2[out2Pos+16]=out2[out2Pos+17]=0.0f; - -// DCT12_PART1 - { - in5 = in[inbufPos+5 * 3]; - in5 += (in4 = in[inbufPos+4 * 3]); - in4 += (in3 = in[inbufPos+3 * 3]); - in3 += (in2 = in[inbufPos+2 * 3]); - in2 += (in1 = in[inbufPos+1 * 3]); - in1 += (in0 = in[inbufPos+0 * 3]); - - in5 += in3; - in3 += in1; - - in2 *= COS6_1; - in3 *= COS6_1; - } - - { - float tmp0,tmp1 = (in0 - in4); - { - float tmp2 = (in1 - in5) * tfcos12[1]; - tmp0 = tmp1 + tmp2; - tmp1 -= tmp2; - } - out2[out2Pos+11-1] = tmp0 * wi[11-1]; - out2[out2Pos+6 +1] = tmp0 * wi[6+1]; - out2[out2Pos+0+1] += tmp1 * wi[1]; - out2[out2Pos+5-1] += tmp1 * wi[5-1]; - } - -// DCT12_PART2 - { - in0 += in4 * COS6_2; - - in4 = in0 + in2; - in0 -= in2; - - in1 += in5 * COS6_2; - - in5 = (in1 + in3) * tfcos12[0]; - in1 = (in1 - in3) * tfcos12[2]; - - in3 = in4 + in5; - in4 -= in5; - - in2 = in0 + in1; - in0 -= in1; - } - - out2[out2Pos+11-0] = in2 * wi[11-0]; - out2[out2Pos+6 +0] = in2 * wi[6+0]; - out2[out2Pos+6 +2] = in3 * wi[6+2]; - out2[out2Pos+11-2] = in3 * wi[11-2]; - - out2[out2Pos+0+0] += in0 * wi[0]; - out2[out2Pos+5-0] += in0 * wi[5-0]; - out2[out2Pos+0+2] += in4 * wi[2]; - out2[out2Pos+5-2] += in4 * wi[5-2]; - } - } - - /* - * III_hybrid - */ - private void - III_hybrid(mpstr_tag mp, float fsIn[], float tsOut[], - int ch, gr_info_s gr_infos) - { - float []tspnt = (float []) tsOut; - int tspntPos = 0; - float block[][][] = mp.hybrid_block; - int []blc = mp.hybrid_blc; - float rawout1[], rawout2[]; - int rawout1Pos, rawout2Pos; - int bt; - int sb = 0; - - { - int b = blc[ch]; - rawout1 = block[b][ch]; - rawout1Pos = 0; - b = -b + 1; - rawout2 = block[b][ch]; - rawout2Pos = 0; - blc[ch] = b; - } - - - if (gr_infos.mixed_block_flag!=0) { - sb = 2; - dct36(fsIn, 0 * MPG123.SSLIMIT, rawout1, rawout1Pos, rawout2, rawout2Pos, win[0], tspnt, tspntPos+0); - dct36(fsIn, 1 * MPG123.SSLIMIT, rawout1, rawout1Pos+18, rawout2, rawout2Pos+18, win1[0], tspnt, tspntPos+1); - rawout1Pos += 36; - rawout2Pos += 36; - tspntPos += 2; - } - - bt = gr_infos.block_type; - if (bt == 2) { - for (; sb < (int) gr_infos.maxb; sb += 2, tspntPos += 2, rawout1Pos += 36, rawout2Pos += 36) { - dct12(fsIn, sb * MPG123.SSLIMIT, rawout1, rawout1Pos, rawout2, rawout2Pos, win[2], tspnt, tspntPos+0); - dct12(fsIn, (sb + 1) * MPG123.SSLIMIT, rawout1, rawout1Pos+18, rawout2, rawout2Pos+18, win1[2], tspnt, tspntPos+1); - } - } - else { - for (; sb < (int) gr_infos.maxb; sb += 2, tspntPos += 2, rawout1Pos += 36, rawout2Pos += 36) { - dct36(fsIn, sb * MPG123.SSLIMIT, rawout1, rawout1Pos, rawout2, rawout2Pos, win[bt], tspnt, tspntPos+0); - dct36(fsIn, (sb + 1) * MPG123.SSLIMIT, rawout1, rawout1Pos+18, rawout2, rawout2Pos+18, win1[bt], tspnt, tspntPos+1); - } - } - - for (; sb < MPG123.SBLIMIT; sb++, tspntPos++) { - int i; - for (i = 0; i < MPG123.SSLIMIT; i++) { - tspnt[tspntPos+i * MPG123.SBLIMIT] = rawout1[rawout1Pos++]; - rawout2[rawout2Pos++] = 0.0f; - } - } - } - - /* - * main layer3 handler - */ - private III_sideinfo sideinfo = new III_sideinfo(); - - public int - layer3_audiodata_precedesframes(mpstr_tag mp) - { - int audioDataInFrame; - int framesToBacktrack; - - /* specific to Layer 3, since Layer 1 & 2 the audio data starts at the frame that describes it. */ - /* determine how many bytes and therefore bitstream frames the audio data precedes it's matching frame */ - /* fprintf(stderr, "hip: main_data_begin = %d, mp.bsize %d, mp.fsizeold %d, mp.ssize %d\n", - sideinfo.main_data_begin, mp.bsize, mp.fsizeold, mp.ssize); */ - /* compute the number of frames to backtrack, 4 for the header, ssize already holds the CRC */ - /* TODO Erroneously assumes current frame is same as previous frame. */ - audioDataInFrame = mp.bsize - 4 - mp.ssize; - framesToBacktrack = (sideinfo.main_data_begin + audioDataInFrame - 1) / audioDataInFrame; - /* fprintf(stderr, "hip: audioDataInFrame %d framesToBacktrack %d\n", audioDataInFrame, framesToBacktrack); */ - return framesToBacktrack; - } - - public int - do_layer3_sideinfo(mpstr_tag mp) - { - Frame fr = mp.fr; - int stereo = fr.stereo; - int single = fr.single; - int ms_stereo; - int sfreq = fr.sampling_frequency; - int granules; - int ch, gr, databits; - - if (stereo == 1) { /* stream is mono */ - single = 0; - } - - if (fr.mode == MPG123.MPG_MD_JOINT_STEREO) { - ms_stereo = fr.mode_ext & 0x2; - } - else - ms_stereo = 0; - - - if (fr.lsf!=0) { - granules = 1; - III_get_side_info_2(mp, sideinfo, stereo, ms_stereo, sfreq, single); - } - else { - granules = 2; - III_get_side_info_1(mp, sideinfo, stereo, ms_stereo, sfreq, single); - } - - databits = 0; - for (gr = 0; gr < granules; ++gr) { - for (ch = 0; ch < stereo; ++ch) { - gr_info_s gr_infos = (sideinfo.ch[ch].gr[gr]); - databits += gr_infos.part2_3_length; - } - } - return databits - 8 * sideinfo.main_data_begin; - } - - private float hybridIn[][]=new float[2][MPG123.SBLIMIT*MPG123.SSLIMIT]; - private float hybridOut[][]=new float[2][MPG123.SSLIMIT*MPG123.SBLIMIT]; - - public <T>int - do_layer3(mpstr_tag mp, T[] pcm_sample, ProcessedBytes pcm_point, - ISynth synth, Factory<T> tFactory) - { - int gr, ch, ss, clip = 0; - int scalefacs[][]=new int[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */ - /* struct III_sideinfo sideinfo; */ - Frame fr = (mp.fr); - int stereo = fr.stereo; - int single = fr.single; - int ms_stereo, i_stereo; - int sfreq = fr.sampling_frequency; - int stereo1, granules; - - if (common.set_pointer(mp, (int) sideinfo.main_data_begin) == MPGLib.MP3_ERR) - return 0; - - if (stereo == 1) { /* stream is mono */ - stereo1 = 1; - single = 0; - } - else if (single >= 0) /* stream is stereo, but force to mono */ - stereo1 = 1; - else - stereo1 = 2; - - if (fr.mode == MPG123.MPG_MD_JOINT_STEREO) { - ms_stereo = fr.mode_ext & 0x2; - i_stereo = fr.mode_ext & 0x1; - } - else - ms_stereo = i_stereo = 0; - - - if (fr.lsf!=0) { - granules = 1; - } - else { - granules = 2; - } - - for (gr = 0; gr < granules; gr++) { - - { - gr_info_s gr_infos = (sideinfo.ch[0].gr[gr]); - int part2bits; - - if (fr.lsf!=0) - part2bits = III_get_scale_factors_2(mp, scalefacs[0], gr_infos, 0); - else { - part2bits = III_get_scale_factors_1(mp, scalefacs[0], gr_infos); - } - - if (mp.pinfo != null) { - int i; - mp.pinfo.sfbits[gr][0] = part2bits; - for (i = 0; i < 39; i++) - mp.pinfo.sfb_s[gr][0][i] = scalefacs[0][i]; - } - - /* fprintf(stderr, "calling III dequantize sample 1 gr_infos.part2_3_length %d\n", gr_infos.part2_3_length); */ - if (III_dequantize_sample(mp, hybridIn[0], scalefacs[0], gr_infos, sfreq, part2bits)!=0) - return clip; - } - if (stereo == 2) { - gr_info_s gr_infos = (sideinfo.ch[1].gr[gr]); - int part2bits; - if (fr.lsf!=0) - part2bits = III_get_scale_factors_2(mp, scalefacs[1], gr_infos, i_stereo); - else { - part2bits = III_get_scale_factors_1(mp, scalefacs[1], gr_infos); - } - if (mp.pinfo != null) { - int i; - mp.pinfo.sfbits[gr][1] = part2bits; - for (i = 0; i < 39; i++) - mp.pinfo.sfb_s[gr][1][i] = scalefacs[1][i]; - } - - /* fprintf(stderr, "calling III dequantize sample 2 gr_infos.part2_3_length %d\n", gr_infos.part2_3_length); */ - if (III_dequantize_sample(mp, hybridIn[1], scalefacs[1], gr_infos, sfreq, part2bits)!=0) - return clip; - - if (ms_stereo!=0) { - int i; - for (i = 0; i < MPG123.SBLIMIT * MPG123.SSLIMIT; i++) { - float tmp0, tmp1; - tmp0 = ((float []) hybridIn[0])[i]; - tmp1 = ((float []) hybridIn[1])[i]; - ((float []) hybridIn[1])[i] = tmp0 - tmp1; - ((float []) hybridIn[0])[i] = tmp0 + tmp1; - } - } - - if (i_stereo!=0) - III_i_stereo(hybridIn, scalefacs[1], gr_infos, sfreq, ms_stereo, fr.lsf); - - if (ms_stereo!=0 || i_stereo!=0 || (single == 3)) { - if (gr_infos.maxb > sideinfo.ch[0].gr[gr].maxb) - sideinfo.ch[0].gr[gr].maxb = gr_infos.maxb; - else - gr_infos.maxb = sideinfo.ch[0].gr[gr].maxb; - } - - switch (single) { - case 3: - { - int i; - float in0[] = (float []) hybridIn[0], in1[] = (float []) hybridIn[1]; - int in0Pos = 0, in1Pos = 0; - for (i = 0; i < (int) (MPG123.SSLIMIT * gr_infos.maxb); i++, in0Pos++) - in0[in0Pos] = (in0[in0Pos] + in1[in1Pos++]); /* *0.5 done by pow-scale */ - } - break; - case 1: - { - int i; - float in0[] = (float []) hybridIn[0], in1[] = (float []) hybridIn[1]; - int in0Pos = 0, in1Pos = 0; - for (i = 0; i < (int) (MPG123.SSLIMIT * gr_infos.maxb); i++) - in0[in0Pos++] = in1[in1Pos++]; - } - break; - } - } - - if (mp.pinfo != null) { - int i, sb; - float ifqstep; - - mp.pinfo.bitrate = Common.tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index]; - mp.pinfo.sampfreq = Common.freqs[sfreq]; - mp.pinfo.emph = fr.emphasis; - mp.pinfo.crc = fr.error_protection?1:0; - mp.pinfo.padding = fr.padding; - mp.pinfo.stereo = fr.stereo; - mp.pinfo.js = (fr.mode == MPG123.MPG_MD_JOINT_STEREO)?1:0; - mp.pinfo.ms_stereo = ms_stereo; - mp.pinfo.i_stereo = i_stereo; - mp.pinfo.maindata = sideinfo.main_data_begin; - - for (ch = 0; ch < stereo1; ch++) { - gr_info_s gr_infos = (sideinfo.ch[ch].gr[gr]); - mp.pinfo.big_values[gr][ch] = gr_infos.big_values; - mp.pinfo.scalefac_scale[gr][ch] = gr_infos.scalefac_scale; - mp.pinfo.mixed[gr][ch] = gr_infos.mixed_block_flag; - mp.pinfo.mpg123blocktype[gr][ch] = gr_infos.block_type; - mp.pinfo.mainbits[gr][ch] = gr_infos.part2_3_length; - mp.pinfo.preflag[gr][ch] = gr_infos.preflag; - if (gr == 1) - mp.pinfo.scfsi[ch] = gr_infos.scfsi; - } - - - for (ch = 0; ch < stereo1; ch++) { - gr_info_s gr_infos = (sideinfo.ch[ch].gr[gr]); - ifqstep = (mp.pinfo.scalefac_scale[gr][ch] == 0) ? .5f : 1.0f; - if (2 == gr_infos.block_type) { - for (i = 0; i < 3; i++) { - for (sb = 0; sb < 12; sb++) { - int j = 3 * sb + i; - /* - is_p = scalefac[sfb*3+lwin-gr_infos.mixed_block_flag]; - */ - /* scalefac was copied into pinfo.sfb_s[] above */ - mp.pinfo.sfb_s[gr][ch][j] = - -ifqstep * mp.pinfo.sfb_s[gr][ch][j - gr_infos.mixed_block_flag]; - mp.pinfo.sfb_s[gr][ch][j] -= 2 * (mp.pinfo.sub_gain[gr][ch][i]); - } - mp.pinfo.sfb_s[gr][ch][3 * sb + i] = - -2 * (mp.pinfo.sub_gain[gr][ch][i]); - } - } - else { - for (sb = 0; sb < 21; sb++) { - /* scalefac was copied into pinfo.sfb[] above */ - mp.pinfo.sfb[gr][ch][sb] = mp.pinfo.sfb_s[gr][ch][sb]; - if (gr_infos.preflag!=0) - mp.pinfo.sfb[gr][ch][sb] += pretab1[sb]; - mp.pinfo.sfb[gr][ch][sb] *= -ifqstep; - } - mp.pinfo.sfb[gr][ch][21] = 0; - } - } - - - - for (ch = 0; ch < stereo1; ch++) { - int j = 0; - for (sb = 0; sb < MPG123.SBLIMIT; sb++) - for (ss = 0; ss < MPG123.SSLIMIT; ss++, j++) - mp.pinfo.mpg123xr[gr][ch][j] = hybridIn[ch][sb*MPG123.SSLIMIT+ss]; - } - } - - - for (ch = 0; ch < stereo1; ch++) { - gr_info_s gr_infos = (sideinfo.ch[ch].gr[gr]); - III_antialias(hybridIn[ch], gr_infos); - III_hybrid(mp, hybridIn[ch], hybridOut[ch], ch, gr_infos); - } - - for (ss = 0; ss < MPG123.SSLIMIT; ss++) { - if (single >= 0) { - clip += synth.synth_1to1_mono_ptr(mp, hybridOut[0], ss*MPG123.SBLIMIT, pcm_sample, pcm_point, tFactory); - } - else { - ProcessedBytes p1 = new ProcessedBytes(); - p1.pb = pcm_point.pb; - clip += synth.synth_1to1_ptr(mp, hybridOut[0], ss*MPG123.SBLIMIT, 0, pcm_sample, p1, tFactory); - clip += synth.synth_1to1_ptr(mp, hybridOut[1], ss*MPG123.SBLIMIT, 1, pcm_sample, pcm_point, tFactory); - } - } - } - - return clip; - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPG123.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPG123.java deleted file mode 100644 index bc8a24844..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPG123.java +++ /dev/null @@ -1,63 +0,0 @@ -package mpg; - -public class MPG123 { - public static final double M_SQRT2 = 1.41421356237309504880; - public static final double M_PI = 3.14159265358979323846; - - public static final int SBLIMIT =32; - public static final int SSLIMIT =18; - - public static final int MPG_MD_STEREO =0; - public static final int MPG_MD_JOINT_STEREO =1; - public static final int MPG_MD_DUAL_CHANNEL =2; - public static final int MPG_MD_MONO =3; - - public static final int MAXFRAMESIZE =2880; - - /* AF: ADDED FOR LAYER1/LAYER2 */ - public static final int SCALE_BLOCK =12; - - - static class gr_info_s { - int scfsi; - int part2_3_length; - int big_values; - int scalefac_compress; - int block_type; - int mixed_block_flag; - int table_select[]=new int[3]; - int subblock_gain[]=new int[3]; - int maxband[]=new int[3]; - int maxbandl; - int maxb; - int region1start; - int region2start; - int preflag; - int scalefac_scale; - int count1table_select; - float full_gain[][]=new float[3][]; - int full_gainPos[]=new int[3]; - float []pow2gain; - int pow2gainPos; - }; - - static class grT { - public grT() { - gr[0] = new gr_info_s(); - gr[1] = new gr_info_s(); - } - gr_info_s gr[]=new gr_info_s[2]; - } - static class III_sideinfo { - public III_sideinfo() { - ch[0]= new grT(); - ch[1]= new grT(); - } - int main_data_begin; - int private_bits; - grT ch[]=new grT[2]; - }; - - - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPGLib.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPGLib.java deleted file mode 100644 index 76b172e9d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/MPGLib.java +++ /dev/null @@ -1,373 +0,0 @@ -/* - * LAME MP3 encoding engine - * - * Copyright (c) 1999-2000 Mark Taylor - * Copyright (c) 2003 Olcios - * Copyright (c) 2008 Robert Hegemann - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -package mpg; - -import mp3.Enc; -import mp3.MP3Data; -import mp3.PlottingData; -import mpg.MPG123; -import mpg.Decode.Factory; - -public class MPGLib { - - Interface interf; - Common common; - - public void setModules(Interface i, Common c) { - interf = i; - common = c; - } - - public static class buf { - byte[] pnt; - int size; - int pos; - buf next; - buf prev; - }; - - public static class framebuf { - buf buf; - long pos; - Frame next; - Frame prev; - }; - - - public static class mpstr_tag { - buf head, tail; /* buffer linked list pointers, tail points to oldest buffer */ - boolean vbr_header; /* 1 if valid Xing vbr header detected */ - int num_frames; /* set if vbr header present */ - int enc_delay; /* set if vbr header present */ - int enc_padding; /* set if vbr header present */ - /* header_parsed, side_parsed and data_parsed must be all set 1 - before the full frame has been parsed */ - boolean header_parsed; /* 1 = header of current frame has been parsed */ - boolean side_parsed; /* 1 = header of sideinfo of current frame has been parsed */ - boolean data_parsed; - boolean free_format; /* 1 = free format frame */ - boolean old_free_format; /* 1 = last frame was free format */ - int bsize; - int framesize; - int ssize; /* number of bytes used for side information, including 2 bytes for CRC-16 if present */ - int dsize; - int fsizeold; /* size of previous frame, -1 for first */ - int fsizeold_nopadding; - Frame fr = new Frame(); /* holds the parameters decoded from the header */ - byte bsspace[][]=new byte[2][MPG123.MAXFRAMESIZE + 1024]; /* bit stream space used ???? */ /* MAXFRAMESIZE */ - float hybrid_block[][][]=new float[2][2][MPG123.SBLIMIT * MPG123.SSLIMIT]; - int hybrid_blc[]=new int[2]; - long header; - int bsnum; - float synth_buffs[][][]= new float[2][2][0x110]; - int synth_bo; - int sync_bitstream; /* 1 = bitstream is yet to be synchronized */ - - int bitindex; - byte[] wordpointer; - int wordpointerPos; - PlottingData pinfo; - } - - public final static int MP3_ERR =-1; - public final static int MP3_OK =0; - final static int MP3_NEED_MORE =1; - - /* copy mono samples */ - @SuppressWarnings("unchecked") - protected <DST_TYPE, SRC_TYPE> void COPY_MONO(DST_TYPE[] pcm_l, - int pcm_lPos, int processed_samples, SRC_TYPE[] p) { - int p_samples = 0; - for (int i = 0; i < processed_samples; i++) - pcm_l[pcm_lPos++] = (DST_TYPE) (p[p_samples++]); - } - - /* copy stereo samples */ - @SuppressWarnings("unchecked") - protected <DST_TYPE, SRC_TYPE> void COPY_STEREO(DST_TYPE[] pcm_l, - int pcm_lPos, DST_TYPE[] pcm_r, int pcm_rPos, - int processed_samples, SRC_TYPE[] p) { - int p_samples = 0; - for (int i = 0; i < processed_samples; i++) { - pcm_l[pcm_lPos++] = (DST_TYPE) (p[p_samples++]); - pcm_r[pcm_rPos++] = (DST_TYPE) (p[p_samples++]); - } - } - - static class ProcessedBytes { - int pb; - } - - interface IDecoder { - <T>int decode(mpstr_tag mp, byte []in, int bufferPos, int isize, T []out, int osize, ProcessedBytes done, Factory<T> tFactory); - } - - private static final int smpls[][] = { - /* Layer I II III */ - {0, 384, 1152, 1152}, /* MPEG-1 */ - {0, 384, 1152, 576} /* MPEG-2(.5) */ - }; - - /* - * For lame_decode: return code - * -1 error - * 0 ok, but need more data before outputing any samples - * n number of samples output. either 576 or 1152 depending on MP3 file. - */ - - private <S,T>int decode1_headersB_clipchoice(mpstr_tag pmp, byte[] buffer, - int bufferPos, int len, S pcm_l[], int pcm_lPos, S pcm_r[], int pcm_rPos, MP3Data mp3data, - Enc enc, T[] p, int psize, - IDecoder decodeMP3_ptr, Factory<T> tFactory) { - - int processed_samples; /* processed samples per channel */ - int ret; - - mp3data.header_parsed = false; - - ProcessedBytes pb = new ProcessedBytes(); - ret = decodeMP3_ptr.decode(pmp, buffer, bufferPos, len, p, psize, pb, tFactory); - processed_samples = pb.pb; - /* three cases: - * 1. headers parsed, but data not complete - * pmp.header_parsed==1 - * pmp.framesize=0 - * pmp.fsizeold=size of last frame, or 0 if this is first frame - * - * 2. headers, data parsed, but ancillary data not complete - * pmp.header_parsed==1 - * pmp.framesize=size of frame - * pmp.fsizeold=size of last frame, or 0 if this is first frame - * - * 3. frame fully decoded: - * pmp.header_parsed==0 - * pmp.framesize=0 - * pmp.fsizeold=size of frame (which is now the last frame) - * - */ - if (pmp.header_parsed || pmp.fsizeold > 0 || pmp.framesize > 0) { - mp3data.header_parsed = true; - mp3data.stereo = pmp.fr.stereo; - mp3data.samplerate = Common.freqs[pmp.fr.sampling_frequency]; - mp3data.mode = pmp.fr.mode; - mp3data.mode_ext = pmp.fr.mode_ext; - mp3data.framesize = smpls[pmp.fr.lsf][pmp.fr.lay]; - - /* free format, we need the entire frame before we can determine - * the bitrate. If we haven't gotten the entire frame, bitrate=0 */ - if (pmp.fsizeold > 0) /* works for free format and fixed, no overrun, temporal results are < 400.e6 */ - mp3data.bitrate = (int) (8 * (4 + pmp.fsizeold) * mp3data.samplerate / - (1.e3 * mp3data.framesize) + 0.5); - else if (pmp.framesize > 0) - mp3data.bitrate = (int) (8 * (4 + pmp.framesize) * mp3data.samplerate / - (1.e3 * mp3data.framesize) + 0.5); - else - mp3data.bitrate = Common.tabsel_123[pmp.fr.lsf][pmp.fr.lay - 1][pmp.fr.bitrate_index]; - - - - if (pmp.num_frames > 0) { - /* Xing VBR header found and num_frames was set */ - mp3data.totalframes = pmp.num_frames; - mp3data.nsamp = mp3data.framesize * pmp.num_frames; - enc.enc_delay = pmp.enc_delay; - enc.enc_padding = pmp.enc_padding; - } - } - - switch (ret) { - case MP3_OK: - switch (pmp.fr.stereo) { - case 1: - COPY_MONO(pcm_l, pcm_lPos, processed_samples, p); - break; - case 2: - processed_samples = (processed_samples) >> 1; - COPY_STEREO(pcm_l, pcm_lPos, pcm_r, pcm_rPos,processed_samples, p); - break; - default: - processed_samples = -1; - assert(false); - break; - } - break; - - case MP3_NEED_MORE: - processed_samples = 0; - break; - - case MP3_ERR: - processed_samples = -1; - break; - - default: - processed_samples = -1; - assert(false); - break; - } - - /*fprintf(stderr,"ok, more, err: %i %i %i\n", MP3_OK, MP3_NEED_MORE, MP3_ERR ); */ - /*fprintf(stderr,"ret = %i out=%i\n", ret, processed_samples ); */ - return processed_samples; - } - - private static final int OUTSIZE_CLIPPED = 4096; - - public mpstr_tag hip_decode_init() - { - return interf.InitMP3(); - } - - - public int hip_decode_exit(mpstr_tag hip) - { - if (hip!=null) { - interf.ExitMP3(hip); - hip = null; - } - return 0; - } - - /* we forbid input with more than 1152 samples per channel for output in the unclipped mode */ - private final static int OUTSIZE_UNCLIPPED = 1152*2; - - /* - * same as hip_decode1 (look in lame.h), but returns unclipped raw - * floating-point samples. It is declared here, not in lame.h, because it - * returns LAME's internal type sample_t. No more than 1152 samples per - * channel are allowed. - */ - public int hip_decode1_unclipped(mpstr_tag hip, byte[] buffer, int bufferPos, - int len, final float pcm_l[], final float pcm_r[]) { - - MP3Data mp3data = new MP3Data(); - Enc enc = new Enc(); - - if (hip != null) { - IDecoder dec = new IDecoder() { - - @Override - public <X>int decode(mpstr_tag mp, byte[] in, int bufferPos, int isize, - X[] out, int osize, ProcessedBytes done, Factory<X> tFactory) { - return interf.decodeMP3_unclipped(mp, in, bufferPos, isize, out, osize, done, tFactory); - } - }; - Float[] out = new Float[OUTSIZE_UNCLIPPED]; - Factory<Float> tFactory = new Factory<Float>() { - - @Override - public Float create(float x) { - return Float.valueOf(x); - } - }; - // XXX should we avoid the primitive type version? - Float[] pcmL = new Float[pcm_l.length]; - for (int i = 0; i < pcmL.length; i++) { - pcmL[i] = Float.valueOf(pcm_l[i]); - } - Float[] pcmR = new Float[pcm_r.length]; - for (int i = 0; i < pcmR.length; i++) { - pcmR[i] = Float.valueOf(pcm_r[i]); - } - int decode1_headersB_clipchoice = decode1_headersB_clipchoice(hip, buffer, bufferPos, len, - pcmL, 0, pcmR, 0, mp3data, enc, out, OUTSIZE_UNCLIPPED, dec, tFactory ); - for (int i = 0; i < pcmL.length; i++) { - pcm_l[i] = pcmL[i]; - } - for (int i = 0; i < pcmR.length; i++) { - pcm_r[i] = pcmR[i]; - } - return decode1_headersB_clipchoice; - } - return 0; - } - - /* - * For lame_decode: return code - * -1 error - * 0 ok, but need more data before outputing any samples - * n number of samples output. Will be at most one frame of - * MPEG data. - */ - public int - hip_decode1_headers(mpstr_tag hip, byte[]buffer, - int len, short pcm_l[], short pcm_r[], MP3Data mp3data) - { - Enc enc = new Enc(); - return hip_decode1_headersB(hip, buffer, len, pcm_l, pcm_r, mp3data, enc); - } - - public int - hip_decode1_headersB(mpstr_tag hip, byte[] buffer, - int len, - final short pcm_l[], final short pcm_r[], MP3Data mp3data, - Enc enc) - { - if (hip!=null) { - IDecoder dec = new IDecoder() { - - @Override - public <X>int decode(mpstr_tag mp, byte[] in, int bufferPos, int isize, - X[] out, int osize, ProcessedBytes done, Factory<X> tFactory) { - return interf.decodeMP3(mp, in, bufferPos, isize, out, osize, done, tFactory); - } - }; - Short[] out = new Short[OUTSIZE_CLIPPED]; - Factory<Short> tFactory = new Factory<Short>() { - - @Override - public Short create(float x) { - return Short.valueOf((short)x); - } - }; - // XXX should we avoid the primitive type version? - Short[] pcmL = new Short[pcm_l.length]; - for (int i = 0; i < pcmL.length; i++) { - pcmL[i] = Short.valueOf(pcm_l[i]); - } - Short[] pcmR = new Short[pcm_r.length]; - for (int i = 0; i < pcmR.length; i++) { - pcmR[i] = Short.valueOf(pcm_r[i]); - } - int decode1_headersB_clipchoice = decode1_headersB_clipchoice(hip, buffer, 0, len, pcmL, 0, pcmR, 0, mp3data, - enc, out, OUTSIZE_CLIPPED, - dec, tFactory ); - for (int i = 0; i < pcmL.length; i++) { - pcm_l[i] = pcmL[i]; - } - for (int i = 0; i < pcmR.length; i++) { - pcm_r[i] = pcmR[i]; - } - return decode1_headersB_clipchoice; - } - return -1; - } - - void hip_set_pinfo(mpstr_tag hip, PlottingData pinfo) - { - if (hip!=null) { - hip.pinfo = pinfo; - } - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/TabInit.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/TabInit.java deleted file mode 100644 index 65565484d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/mpg/TabInit.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * tabinit.c - * - * Copyright (C) 1999-2010 The L.A.M.E. project - * - * Initially written by Michael Hipp, see also AUTHORS and README. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* $Id: TabInit.java,v 1.3 2011/06/08 00:39:06 kenchis Exp $ */ - -package mpg; - -public class TabInit { - - public float decwin[]=new float[512 + 32]; - private static float cos64[]=new float[16], cos32[]=new float[8], cos16[]=new float[4], cos8[]=new float[2], cos4[]=new float[1]; - public float[] pnts[] = { cos64, cos32, cos16, cos8, cos4 }; - - private static final double dewin[] = { - 0.000000000,-0.000015259,-0.000015259,-0.000015259, - -0.000015259,-0.000015259,-0.000015259,-0.000030518, - -0.000030518,-0.000030518,-0.000030518,-0.000045776, - -0.000045776,-0.000061035,-0.000061035,-0.000076294, - -0.000076294,-0.000091553,-0.000106812,-0.000106812, - -0.000122070,-0.000137329,-0.000152588,-0.000167847, - -0.000198364,-0.000213623,-0.000244141,-0.000259399, - -0.000289917,-0.000320435,-0.000366211,-0.000396729, - -0.000442505,-0.000473022,-0.000534058,-0.000579834, - -0.000625610,-0.000686646,-0.000747681,-0.000808716, - -0.000885010,-0.000961304,-0.001037598,-0.001113892, - -0.001205444,-0.001296997,-0.001388550,-0.001480103, - -0.001586914,-0.001693726,-0.001785278,-0.001907349, - -0.002014160,-0.002120972,-0.002243042,-0.002349854, - -0.002456665,-0.002578735,-0.002685547,-0.002792358, - -0.002899170,-0.002990723,-0.003082275,-0.003173828, - -0.003250122,-0.003326416,-0.003387451,-0.003433228, - -0.003463745,-0.003479004,-0.003479004,-0.003463745, - -0.003417969,-0.003372192,-0.003280640,-0.003173828, - -0.003051758,-0.002883911,-0.002700806,-0.002487183, - -0.002227783,-0.001937866,-0.001617432,-0.001266479, - -0.000869751,-0.000442505, 0.000030518, 0.000549316, - 0.001098633, 0.001693726, 0.002334595, 0.003005981, - 0.003723145, 0.004486084, 0.005294800, 0.006118774, - 0.007003784, 0.007919312, 0.008865356, 0.009841919, - 0.010848999, 0.011886597, 0.012939453, 0.014022827, - 0.015121460, 0.016235352, 0.017349243, 0.018463135, - 0.019577026, 0.020690918, 0.021789551, 0.022857666, - 0.023910522, 0.024932861, 0.025909424, 0.026840210, - 0.027725220, 0.028533936, 0.029281616, 0.029937744, - 0.030532837, 0.031005859, 0.031387329, 0.031661987, - 0.031814575, 0.031845093, 0.031738281, 0.031478882, - 0.031082153, 0.030517578, 0.029785156, 0.028884888, - 0.027801514, 0.026535034, 0.025085449, 0.023422241, - 0.021575928, 0.019531250, 0.017257690, 0.014801025, - 0.012115479, 0.009231567, 0.006134033, 0.002822876, - -0.000686646,-0.004394531,-0.008316040,-0.012420654, - -0.016708374,-0.021179199,-0.025817871,-0.030609131, - -0.035552979,-0.040634155,-0.045837402,-0.051132202, - -0.056533813,-0.061996460,-0.067520142,-0.073059082, - -0.078628540,-0.084182739,-0.089706421,-0.095169067, - -0.100540161,-0.105819702,-0.110946655,-0.115921021, - -0.120697021,-0.125259399,-0.129562378,-0.133590698, - -0.137298584,-0.140670776,-0.143676758,-0.146255493, - -0.148422241,-0.150115967,-0.151306152,-0.151962280, - -0.152069092,-0.151596069,-0.150497437,-0.148773193, - -0.146362305,-0.143264771,-0.139450073,-0.134887695, - -0.129577637,-0.123474121,-0.116577148,-0.108856201, - -0.100311279,-0.090927124,-0.080688477,-0.069595337, - -0.057617187,-0.044784546,-0.031082153,-0.016510010, - -0.001068115, 0.015228271, 0.032379150, 0.050354004, - 0.069168091, 0.088775635, 0.109161377, 0.130310059, - 0.152206421, 0.174789429, 0.198059082, 0.221984863, - 0.246505737, 0.271591187, 0.297210693, 0.323318481, - 0.349868774, 0.376800537, 0.404083252, 0.431655884, - 0.459472656, 0.487472534, 0.515609741, 0.543823242, - 0.572036743, 0.600219727, 0.628295898, 0.656219482, - 0.683914185, 0.711318970, 0.738372803, 0.765029907, - 0.791213989, 0.816864014, 0.841949463, 0.866363525, - 0.890090942, 0.913055420, 0.935195923, 0.956481934, - 0.976852417, 0.996246338, 1.014617920, 1.031936646, - 1.048156738, 1.063217163, 1.077117920, 1.089782715, - 1.101211548, 1.111373901, 1.120223999, 1.127746582, - 1.133926392, 1.138763428, 1.142211914, 1.144287109, - 1.144989014 - }; - /* *INDENT-ON* */ - - void - make_decode_tables(long scaleval) - { - int i, j, k, kr, divv; - int table; float[] costab; - - - for (i = 0; i < 5; i++) { - kr = 0x10 >> i; - divv = 0x40 >> i; - costab = pnts[i]; - for (k = 0; k < kr; k++) - costab[k] = (float) (1.0 / (2.0 * Math.cos(MPG123.M_PI * ((double) k * 2.0 + 1.0) / (double) divv))); - } - - table = 0; - scaleval = -scaleval; - for (i = 0, j = 0; i < 256; i++, j++, table += 32) { - if (table < 512 + 16) - decwin[table+16] = decwin[table+0] = (float) (dewin[j] * scaleval); - if (i % 32 == 31) - table -= 1023; - if (i % 64 == 63) - scaleval = -scaleval; - } - - for ( /* i=256 */ ; i < 512; i++, j--, table += 32) { - if (table < 512 + 16) - decwin[table+16] = decwin[table+0] = (float) (dewin[j] * scaleval); - if (i % 32 == 31) - table -= 1023; - if (i % 64 == 63) - scaleval = -scaleval; - } - } - -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/InputTableModel.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/InputTableModel.java deleted file mode 100644 index 10267458e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/InputTableModel.java +++ /dev/null @@ -1,60 +0,0 @@ -package ui; - -import java.util.ArrayList; - -import javax.swing.JProgressBar; -import javax.swing.table.DefaultTableModel; - -public class InputTableModel extends DefaultTableModel { - - private static final long serialVersionUID = 1L; - private String[] COLUMN_NAMES = { "No", "Type", "File", "Progress" }; - private Class<?>[] COLUMN_CLASSES = { Integer.class, String.class, - String.class, JProgressBar.class }; - private ArrayList<JProgressBar> progresses = new ArrayList<JProgressBar>(); - - @Override - public int getColumnCount() { - return 4; - } - - @Override - public String getColumnName(int column) { - return COLUMN_NAMES[column]; - } - - @Override - public Object getValueAt(int row, int column) { - if (column == 0) { - return row + 1; - } - if (column==3) { - if (row >= progresses.size()) { - progresses.add(new JProgressBar()); - } - JProgressBar bar = progresses.get(row); - bar.setMinimum(0); - bar.setMaximum(100); - return bar; - } - return super.getValueAt(row, column); - } - - @Override - public Class<?> getColumnClass(int column) { - return COLUMN_CLASSES[column]; - } - - @Override - public void fireTableRowsDeleted(int firstRow, int lastRow) { - for (int row = firstRow; row <= lastRow; row++) { - progresses.remove(row); - } - super.fireTableRowsDeleted(firstRow, lastRow); - } - - @Override - public boolean isCellEditable(int row, int column) { - return false; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/LameUI.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/LameUI.java deleted file mode 100644 index 2f255b664..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/LameUI.java +++ /dev/null @@ -1,418 +0,0 @@ -package ui; - -import java.awt.Component; -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Locale; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JProgressBar; -import javax.swing.JRadioButton; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.filechooser.FileFilter; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableCellRenderer; - -import mp3.Main; - -import org.swixml.SwingEngine; - -public class LameUI extends JFrame { - private static final long serialVersionUID = 1L; - - public static class JComponentCellRenderer implements TableCellRenderer { - - public Component getTableCellRendererComponent(JTable table, - Object value, boolean isSelected, boolean hasFocus, int row, - int column) { - return (JComponent) value; - } - - } - - public static void main(String[] args) { - new LameUI(); - } - - protected Picture picture; - protected JButton doRemove, doEncodeDecode; - protected JTable files; - protected JComboBox presets, cbr, abr, vbr, algorithm; - protected JRadioButton setCBR, setABR, setVBR; - protected JRadioButton setStereo, setJointStereo, setForcedJointStereo, - setDualChannels, setMono, setAuto; - protected JRadioButton outputIsInput, customOutputDir; - protected JTextField outputDir; - protected JCheckBox overwrite; - - protected int inUse; - - protected File lastDir; - protected FileFilter musicFilter = new FileFilter() { - - @Override - public String getDescription() { - return "MUSIC (WAV, MP3)"; - } - - @Override - public boolean accept(File f) { - return f.isDirectory() - || (f.getName().toLowerCase().endsWith(".wav") || f - .getName().toLowerCase().endsWith(".mp3")); - } - }; - - public Action add = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent e) { - JFileChooser fileDialog = new JFileChooser(lastDir); - fileDialog.setMultiSelectionEnabled(true); - fileDialog.setFileFilter(musicFilter); - final Frame containerFrame = JOptionPane - .getFrameForComponent(LameUI.this); - int rc = fileDialog.showOpenDialog(containerFrame); - if (rc == JFileChooser.APPROVE_OPTION - && fileDialog.getSelectedFile() != null) { - lastDir = fileDialog.getSelectedFile().getParentFile(); - File[] selectedFiles = fileDialog.getSelectedFiles(); - DefaultTableModel model = (DefaultTableModel) files.getModel(); - for (int i = 0; i < selectedFiles.length; i++) { - File file = selectedFiles[i]; - String ext = file.getName().substring( - file.getName().lastIndexOf('.') + 1); - model.addRow(new Object[] { 0, ext, file.getAbsolutePath() }); - } - } - } - }; - - public Action remove = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent e) { - DefaultTableModel model = (DefaultTableModel) files.getModel(); - while (files.getSelectedRows().length > 0) { - model.removeRow(files.getSelectedRows()[0]); - } - } - }; - - public Action setPresets = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent e) { - setPresetsOrCustom(true); - } - }; - - public Action setCustom = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent e) { - setPresetsOrCustom(false); - } - }; - - public Action encodeDecode = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent e) { - DefaultTableModel model = (DefaultTableModel) files.getModel(); - for (int row = 0; row < model.getRowCount(); row++) { - final String filename = String - .valueOf(model.getValueAt(row, 2)); - final JProgressBar bar = (JProgressBar) model - .getValueAt(row, 3); - if (bar.getValue()==100) { - continue; - } - try { - final ArrayList<String> cmd = getCommand(filename); - for (int i = 0; i < cmd.size(); i++) { - System.out.print(cmd.get(i) + " "); - } - System.out.println(); - final Main main = new Main(); - main.getSupport().addPropertyChangeListener(new PropertyChangeListener() { - - public void propertyChange(final PropertyChangeEvent evt) { - if ("progress".equals(evt.getPropertyName())) { - bar.setValue(Integer.valueOf(evt.getNewValue().toString())); - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - repaint(); - } - }); - } - } - }); - new Thread(new Runnable() { - - public void run() { - synchronized (LameUI.this) { - inUse++; - doRemove.setEnabled(false); - doEncodeDecode.setEnabled(false); - } - try { - System.out.println(cmd); - main.run(cmd.toArray(new String[cmd.size()])); - } catch (IOException e) { - e.printStackTrace(); - } finally { - synchronized (LameUI.this) { - inUse--; - if (inUse == 0) { - doRemove.setEnabled(true); - doEncodeDecode.setEnabled(true); - } - } - bar.setValue(100); - } - } - }).start(); - } catch (IOException e1) { - System.err.println(e1.getMessage()); - } - } - } - - }; - - public Action chooseOutputDir = new AbstractAction() { - - private static final long serialVersionUID = 1L; - - public void actionPerformed(ActionEvent e) { - JFileChooser fileDialog = new JFileChooser(lastDir); - fileDialog.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - final Frame containerFrame = JOptionPane - .getFrameForComponent(LameUI.this); - int rc = fileDialog.showOpenDialog(containerFrame); - if (rc == JFileChooser.APPROVE_OPTION - && fileDialog.getSelectedFile() != null) { - lastDir = fileDialog.getSelectedFile(); - File file = fileDialog.getSelectedFile(); - outputDir.setText(file.getAbsolutePath()); - - customOutputDir.setSelected(true); - } - } - }; - - public LameUI() { - try { - // use system L&F - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - - SwingEngine swix = new SwingEngine(this); - swix.getTaglib().registerTag("picture", Picture.class); - swix.insert(new URL("file:../conf/LameUI.xml"), this); - - presets.addItem("Medium (~160 kbps)"); - presets.addItem("Standard (~192 kbps)"); - presets.addItem("Extreme (~224 kbps)"); - presets.addItem("Insane (320 kbps)"); - presets.setSelectedItem("Standard (~192 kbps)"); - - cbr.addItem(320); - cbr.addItem(256); - cbr.addItem(224); - cbr.addItem(192); - cbr.addItem(160); - cbr.addItem(128); - cbr.addItem(112); - cbr.addItem(96); - cbr.addItem(80); - cbr.addItem(64); - cbr.addItem(56); - cbr.addItem(48); - cbr.addItem(40); - cbr.addItem(32); - cbr.setSelectedItem(192); - - vbr.addItem("0 - highest"); - vbr.addItem("1"); - vbr.addItem("2 - recommended"); - vbr.addItem("3"); - vbr.addItem("4 - default"); - vbr.addItem("5"); - vbr.addItem("6"); - vbr.addItem("7"); - vbr.addItem("8"); - vbr.addItem("9"); - vbr.setSelectedItem("2 - recommended"); - - for (int i = 310; i >= 8; i--) { - abr.addItem(i); - } - abr.setSelectedItem(192); - - algorithm.addItem("0 - highest quality, very slow"); - algorithm.addItem("1"); - algorithm.addItem("2 - recommended"); - algorithm.addItem("3"); - algorithm.addItem("4"); - algorithm.addItem("5 - LAME default"); - algorithm.addItem("6"); - algorithm.addItem("7 - Fast, ok quality"); - algorithm.addItem("8"); - algorithm.addItem("9 - Poor quality, but fast"); - algorithm.addItem("Auto"); - - files.getColumnModel().getColumn(0).setMaxWidth(50); - files.getColumnModel().getColumn(1).setMaxWidth(100); - files.getColumnModel().getColumn(3).setMaxWidth(100); - files.setDefaultRenderer(JComponent.class, new JComponentCellRenderer()); - - final URL resource =new URL("file:../images/picture.png"); - picture.setComposerImage(new ImageIcon(resource).getImage()); - - pack(); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setVisible(true); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - protected void setPresetsOrCustom(boolean isPresets) { - presets.setEnabled(isPresets); - setCBR.setEnabled(!isPresets); - setABR.setEnabled(!isPresets); - setVBR.setEnabled(!isPresets); - cbr.setEnabled(!isPresets); - abr.setEnabled(!isPresets); - vbr.setEnabled(!isPresets); - } - - protected ArrayList<String> getCommand(String filename) throws IOException { - ArrayList<String> cmd = new ArrayList<String>(); - if (new File(filename).getName().toLowerCase(Locale.US) - .endsWith(".mp3")) { - cmd.add("--decode"); - } - if (presets.isEnabled()) { - // preset - String pr = String.valueOf(presets.getSelectedItem()); - cmd.add("--preset"); - cmd.add(pr.substring(0, pr.indexOf(' ')).toLowerCase(Locale.US)); - } else { - // custom - if (setVBR.isSelected()) { - // vbr - String v = String.valueOf(vbr.getSelectedItem()); - if (v.indexOf(' ') != -1) { - v = v.substring(0, v.indexOf(' ')); - } - cmd.add("-v"); - cmd.add("-V"); - cmd.add(v); - } else if (setABR.isSelected()) { - // abr - String a = String.valueOf(abr.getSelectedItem()); - cmd.add("--abr"); - cmd.add(a); - } else { - // cbr - String a = String.valueOf(cbr.getSelectedItem()); - cmd.add("--cbr"); - cmd.add("-b"); - cmd.add(a); - } - } - String eaq = String.valueOf(algorithm.getSelectedItem()); - if (!"Auto".equals(eaq)) { - if (eaq.indexOf(' ') != -1) { - eaq = eaq.substring(0, eaq.indexOf(' ')); - } - cmd.add("-q"); - cmd.add(eaq); - } - - if (setStereo.isSelected()) { - cmd.add("-m"); - cmd.add("s"); - } else if (setJointStereo.isSelected()) { - cmd.add("-m"); - cmd.add("j"); - } else if (setForcedJointStereo.isSelected()) { - cmd.add("-m"); - cmd.add("f"); - } else if (setDualChannels.isSelected()) { - cmd.add("-m"); - cmd.add("d"); - } else if (setMono.isSelected()) { - cmd.add("-m"); - cmd.add("m"); - } - - cmd.add(filename); - if (!outputIsInput.isSelected()) { - String outDir = outputDir.getText(); - if (outDir.length() == 0) { - outDir = System.getProperty("user.dir"); - } - String outName = new File(filename).getName(); - if (outName.toLowerCase(Locale.US).endsWith(".mp3")) { - outName = outName.substring(0, outName.lastIndexOf('.')) - + ".wav"; - } else { - // outName.toLowerCase(Locale.US).endsWith(".wav") - outName = outName.substring(0, outName.lastIndexOf('.')) - + ".mp3"; - } - cmd.add(new File(outDir, outName).getAbsolutePath()); - if (!overwrite.isSelected() && new File(outDir, outName).exists()) { - throw new IOException("Output file " - + new File(outDir, outName) + " already exists!"); - } - } else { - // Custom output dir - String outName = new File(filename).getName(); - if (outName.toLowerCase(Locale.US).endsWith(".mp3")) { - outName = outName.substring(0, outName.lastIndexOf('.')) - + ".wav"; - } else { - // outName.toLowerCase(Locale.US).endsWith(".wav") - outName = outName.substring(0, outName.lastIndexOf('.')) - + ".mp3"; - } - String outDir = new File(filename).getParent(); - cmd.add(new File(outDir, outName).getAbsolutePath()); - if (!overwrite.isSelected() && new File(outDir, outName).exists()) { - throw new IOException("Output file " - + new File(outDir, outName) + " already exists!"); - } - } - return cmd; - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/Picture.java b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/Picture.java deleted file mode 100644 index a9f70c6ff..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/java/ui/Picture.java +++ /dev/null @@ -1,63 +0,0 @@ -package ui; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.RenderingHints; - -import javax.swing.JComponent; - -public final class Picture extends JComponent { - - private static final long serialVersionUID = 1L; - - private Image composerImage; - - /** - * @param collection - */ - public Picture() { - } - - { - setOpaque(true); - setPreferredSize(new Dimension(200, 200)); - } - - public final void setComposerImage(Image image) { - composerImage = image; - } - - @Override - public void paint(Graphics g) { - g.setColor(getBackground()); - g.fillRect(0, 0, getWidth(), getHeight()); - if (composerImage != null) { - int picWidth = composerImage.getWidth(null); - int picHeight = composerImage.getHeight(null); - - int availableWidth = getWidth(); - int availableHeight = getHeight(); - - /* figure out which dimension limits scaling first */ - float scaleW = (float) availableWidth / picWidth; - float scaleH = (float) availableHeight / picHeight; - - float safeScale = scaleW > scaleH ? scaleH : scaleW; - picWidth *= safeScale; - picHeight *= safeScale; - - ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_INTERPOLATION, - RenderingHints.VALUE_INTERPOLATION_BICUBIC); - g.drawImage(composerImage, (availableWidth - picWidth) / 2, - (availableHeight - picHeight) / 2, picWidth, picHeight, - null); - } - } - - @Override - public void update(Graphics g) { - paint(g); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/LameUI.xml b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/LameUI.xml deleted file mode 100644 index 7a55daeae..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/LameUI.xml +++ /dev/null @@ -1,150 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<panel layout="BorderLayout"> - <vbox constraints="BorderLayout.CENTER"> - <panel layout="BorderLayout"> - <hbox constraints="BorderLayout.NORTH"> - <button text="Add..." action="add" /> - <button text="Remove" action="remove" id="doRemove" /> - <button text="Encode/Decode" action="encodeDecode" id="doEncodeDecode" /> - </hbox> - <tabbedpane titles="Input / Output,LAME Settings" - constraints="BorderLayout.CENTER"> - <vbox border="TitledBorder(Input files:)"> - <scrollpane> - <table initclass="ui.InputTableModel" CellSelectionEnabled="false" - ColumnSelectionAllowed="false" RowSelectionAllowed="true" id="files"></table> - </scrollpane> - <panel border="TitledBorder(Output directory:)" layout="GridLayout(3,1)"> - <buttongroup> - <radiobutton label="Output directory = Input directory" - Selected="true" id="outputIsInput"></radiobutton> - <radiobutton label="Use below:" id="customOutputDir"></radiobutton> - </buttongroup> - <panel> - <textfield columns="30" Editable="false" id="outputDir"></textfield> - <button text="Browse..." action="chooseOutputDir"></button> - </panel> - </panel> - <panel layout="GridLayout(3,1)"> - <checkbox text="Overwrite existing files" id="overwrite"></checkbox> - </panel> - </vbox> - <vbox> - <panel layout="GridLayout(4,3)"> - <buttongroup> - <radiobutton text="Presets" selected="true" action="setPresets"> - </radiobutton> - <label text="Preset:"> - </label> - <combobox id="presets"> - </combobox> - - <radiobutton text="Custom" action="setCustom"> - </radiobutton> - </buttongroup> - <buttongroup> - <radiobutton text="VBR - variable bitrate:" Selected="true" - Enabled="false" id="setVBR"> - </radiobutton> - <combobox id="vbr" Enabled="false"> - </combobox> - <label></label> - <radiobutton text="ABR - average bitrate:" Enabled="false" - id="setABR"> - </radiobutton> - <combobox MaximumRowCount="1" Enabled="false" id="abr"> - </combobox> - <label></label> - <radiobutton text="CBR - constant bitrate:" Enabled="false" - id="setCBR"> - </radiobutton> - <combobox Enabled="false" id="cbr"> - </combobox> - </buttongroup> - </panel> - <panel border="TitledBorder(Channel Mode)"> - <buttongroup> - <radiobutton text="Stereo" Selected="true" id="setStereo"></radiobutton> - <radiobutton text="Joint stereo" id="setJointStereo"></radiobutton> - <radiobutton text="Forced joint stereo" id="setForcedJointStereo"></radiobutton> - <radiobutton text="Dual channels" id="setDualChannels"></radiobutton> - <radiobutton text="Mono" id="setMono"></radiobutton> - <radiobutton text="Auto" Selected="true" id="setAuto"></radiobutton> - </buttongroup> - </panel> - <panel border="TitledBorder(Encoding algorithm quality)"> - <combobox id="algorithm"> - </combobox> - </panel> - </vbox> - </tabbedpane> - </panel> - </vbox> - <hbox constraints="BorderLayout.WEST"> - <panel border="TitledBorder(Tag Settings)"> - <vbox> - <panel layout="BorderLayout(10,10)"> - <label text="Title:" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Interpret:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Album:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Year:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Track:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Genre:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Comment:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Album Interpret:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="Komponist:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <panel layout="BorderLayout(10,10)"> - <label text="CD Number:"/> - </panel> - <panel layout="BorderLayout(10,10)"> - <combobox Editable="true" /> - </panel> - <picture id="picture" /> - </vbox> - </panel> - </hbox> -</panel> \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/picture.png b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/picture.png deleted file mode 100644 index ba98f66abb90f84cb537cad47193a32c6986283b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30667 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⁡mBDEuk+9I*Ew)XL@L%= z#Y8GniZqc@M1=`>5n*A=ELPZMjyVY<Xx%xBnHD}Kh0kqR=;z&H|62mU(<PXy@KF~4 zQ+yKUm%R`S+PKesx<Z1+{~8wg83Euw9{)Zc|9=2$&-*mZO@U?r0000<MNUMnLSTZq CS|#oP diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.bat b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.bat deleted file mode 100644 index 20678e612..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.bat +++ /dev/null @@ -1 +0,0 @@ -java -jar ../lib/jump3r-1.0.3.jar \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.sh b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.sh deleted file mode 100644 index d418cbf5d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/src/main/resources/run.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -java -jar ../lib/jump3r-1.0.3.jar \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Left.wav b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Left.wav deleted file mode 100644 index 67f9d3518fee4f09535df73a83f9220459e3f754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720044 zcmZ_0Wpo@l6E@mR!ybFgi5+HUW=4l$!_3UgOdDq2Fm0I0VFp7IGmnR%89sU6d+z=5 zook(Gd%D$9ODa`8^;ESJI(O)BT4taDt^2nhH+4>&8G;}flob!aAM;@dfy~gDk#k0_ z0CoQF9}WEc-)H~-&XlzK{}lxM{lA}*a}ZS0R>{x*&LI#A3iAJ!k{YU3QWQ-BMFbxi ze1ra<8ZfwD(gckMpOV6ZZ<<!pa!DH{_m<ovg1cdefM`eu=^+Lp|LX&VFmR3pXKC;o z1$7k-1vN~dFyOna1vD=x0nn-p%KzFg>4OEOq$lOSvm!YD@A*rP%76W78VMO83uuW1 zZR4OP<iBT8K#h_S%HZyjQ9w}1)0d2@WLyyFHxvp1&q#v57;u*adg8zp1e`HJRwx{@ zfmTbdz@R5i3xek;DM9d@e(<D0&>9TtV&JMzE7r2K-&%%d2Q?7z9RDjN{bT?2K>t^d z`>%(R_5WWT?7w+~!K_%IFwkE(IGX;OAp-PFftJ0XWxM9o+@M`a^JrhRTiRXFlM!kO z4THu*eV~evS9`C$(2~H|BB2UUJQM}RLS>*hC=#@4g$!Wb+*&SpzCut#2YQHxN`qSE zK`kSgFC0804{DV3fPynNC<3$)38Yd3J*R2u;OGV;WWiPQf6s?P0{C78Mw_Dj0ndbi zd5i?b3dW&;c`2D4Su0tI5}885S>1o5A;C8hT=RgB_@9(eV2sp%Ys7-P+~A7mKPf1g z*^;?aKus4Iz3abYvE~53eV}ay^ko4fBfvar;JX0kRRF78vL1SHzN9}Ktb9qECG|_z zphP+#hy^VaXqj57_5+kZS{|sw1DQg>RRd_VWcC$sreviAaK2<67%&3rzZP&HB`z&r z%LX4mXf+hfWdxX&5;-rK#}c_#!PxAeT}}&!YC-j&DqvMH(61ZZSt2<ly_K|zg1PX5 zSu9zZEKt7ylzi|zLrVtpS^!4w1D}!|-~@H@L3<{!Zq=ZMPzR_d)EDXnb%a_#O`xWr zw1x&iQ=pmPGX&}ewFPx5Krx_pS*Qlo3i=D02d#rPKue*C;LaLgEcu{^bkM#TstfK| z2i<_aKuOR$=r*(unhy;EEq4TWt%sgK0#q9w1}}!!!z<v)a4)zKTpFff4zfcz&>!eC z^c4CB+5}C8x_}-vAT2Mn^V%}4vGzwDuVyOkl>M?t8X*bdL-DkDN&F#Nr7qG?sgaZ= zP8Rcpp~5eI5kG|A%9FxHVX%ludnAM0Po6H10mp&zO!>6T$rBVoIixnwUTQ6&OOOp- z1>51S$PFYKU5gf?&9SxEON_<J;GOZ=_<5Ye`w>rx8suJ*Cp%M%sSVV8sy7u&C6n98 zfn;;C6FHqcOFGF0)J$q4xYm-&CdZJ;L^t9s{uge>lduceW^6V#2&;wVqifJm^bit? zEP*q?%)ZfjXkXPnYKk&m@yhdMR+=yAq(|Zkv7LyDuY}D)N5RD}=OKPASBm?_o?#EM zcUX??!foU3bFa8(+%@hXx15{Bt>s>F75PJan6OhYi5tbB*h{)B+2n1qPFbR4DqYl< zYI`kFYYjbu+Q9GN&d7BHNBg3u&;Z&7+k_=!HSvx3cN`<)h}uLWq81TDkOV^LiFl$R z(U#~yG$Cw66220zh=0LWV$CoVOF<u^$I*Fc6V!*CM*1K!d=PF3=R!xJ;Xqo_w9DEy zZI;$qW3*@LGPSv?Dvy+n$_!<uvKW-9${?k!Qc+>$2l7gJoIFk5EMJh{$bPvTSm*Xi z1qB0h;*u3PP8p`$Q_88U)CcM(^}YH*{h_9-c`C0~)Fx?XfDRM1n$R5R9FVvy2!^Y` zUEvY%68Ih*ip)l?BKMHH$V=oSatWD&bU?-;{~}(5LxM<YbP9SHosU}4tH@*|7Fi0f zfp%zC4c1cCuIgoFsq$W_t+rGp<+*Z2X{KD3KJo*DBYaCdJKb~Kb3BB<n0+N?$Xn#K z;yrFeV3p^q<D{J_mYr>U!`XvEgiNUp6;(G#Is9_&ywM_4ME)ow70>hODD25+J7 z(LAsMi!nX1mP%rLz{t6DHa)5zrdz;Rm`%(IU48u+{YHIT!*=6u(<!spT-MUvLRkKo zJcdv`u6xe>W;*J|>gyXTnipB#S?XF4^GxF!eFvs2l}Ick?h@6>L!?5sr$Q(%Az@z- z3cjUXRXOE>qAFw6(dsFsfxJk(%}Z>LAn%{y|KR^8uq0?<r?Usy(d_zQWZ;l*jo0US z<;n5%^2Ynx`Nsw-1Q!G^2T^uBdy2iwer0uBcWxM0nJZ-T*alo8H-QfkehQbx=~9st zB{!63%gJ&tB}tjB)&zQMGbBO%;j6F?td1Y~8|{si$AkE8qJYRJ4iZtsKD;YF3eUx# z5kE+ZuFj}TH(eRs4W=4%mF`bBp-0j8=@6y{!_lj0l-@zbQ2WW!WEN3K*oiYlC@}<I zgbhP+WIr@WTLe_-Q{|{~K)D7=Z)K8PS+WcHd=x){D`G#e2-lQr%%R+CFxv5~jlCWm z7aR~=96S-c6nqghv1?f;TN#Y)B{za+`MzLx{TAwp3&i7Mia1<qEw@+V)qhp1Hb&d3 zjngpgk(#Xb1oj{Sx(t<u|A7riC8Q3r3aN$4=-*fxM&Rx7UHDnNAD)8k#ZF?6vFq3g zaDF2`hERz(QYDgzlVA>-;$tucrLjsF4|Z4($m}kpJ5m7Ohedb}kmotbLpU2)+yUAQ zb%R1EAz+UzReCB$1y>p>LzL!<PfnCy%a7$ra+)+l>L<;U4oNqp-%>}pSYEEYQJhL$ z^|D%C8>BVY3>u-uYt^(;S|hNZT0wUqKU4~y4i~~hk;BL}uzL!SB4izM9lj2I(dubG z)hlYgdP}pxN0D6g12zO`%5PX3G#hH9I;GWOJ<%-Llp0VfT9+I^zoU0iX5ukYNh9RO zVs9}<4yYl>PwWTroxDk|CJtcxkkarpXf#v=`QQQQ1MCVe;MZ{-ULC84c0w+|J75zM zKr+x3*bQtR_6>c441p=AruJFAp*~h6b%gd#v;Aka#z7;24V|I&QZwb@Ql!{Su=6d2 z=HhWll0{{ux<(ZhMgAnc6w8SgakV&9nl2w!Zm3IuHCUs0)Q(`^w^XVq$CP8LUuz7P zM&=`pkwx%GsH_I5%@j%*r&IxYr#<u++yt!31E4wnz>#ousFv18eWvVFQh}7W(n>=P zXd!$NUJ1v+XMr~STdN7?*rv7BmS{JD{VhQvZ?u(KLyZGE?S-17Hr5_%y`Vc#A~YTP zs*zf}+EzItkCgWUeVCz~QU?O$)&*$RYS1Tbil);Js(N*qQckI?{H-)ri4xlny@LBA zYmrGvBgBBX;1u{5kiUfpj4nsB(RSFsSVf?}FX0dH&p1gW5J!kyq5|2Tj3##x_wWx` zIQ9&Ei$-I|vFi9bu%elm9sPtnhjXB2&^PV4wo_ZGHPK$G4b%%@hHlHfWJvxhJ&<lo zccmww90GQDr}#+l@PF}<d}V$uUs=czCW>pt7UC13j&O-@$QN-xIFW0?&*gXW=lE1U zTIect5yFKJ{3^aFPx1t~(p#7&E|Yo#onceV%5%A${6;z^Ii+3lWM!^;M=J%-N0x!T z5sRgw{m?r|T_haYgPcPdd>AndSYj*nnQTn1Ay6WK4<Q)xH93ZQLlskRsacdt9wbMT z?Z{GOE^&@nNh~0if#XtQE-{LzMts7D;Az+>Ohj*@d(orlBQzHk(R6eVuyMbUxd@3I zgA?FNa9OxHJOSPbAA%>sK7egjfPEjX?p5jmi}hXpDt`i&te^Z|vP$j6MM5Iqn9t{O zxa#}^ev!~gbc*GqOX6JN9CtAo@H>6^J|@tdEiW{clhtWp?>*99C|x9$pT#xdM)Q}& zL&`r;0@?(x0&H_<TtH7F_u#p(1J<F3v982J@&*+`XHhMv!Q=|Ufj`D^;$LD9IgTo% zMCusjA}Nv}40wHP18PFQAg_@^q$0WieTrtGFVTVML1aB#8M>hkQ^w0KNt71L?UY#c zvszE9u3c0gDl6p%QiM20XeOK#7Klrw@v<t%D);3e*iZ&>oX}qQA}Hd1xr2IE8x2t8 z91T-@$+yLwLT%x-&{sO3)PqhTGqA3BIPODhA|0XY>H{FNwba>QC6kdZSX2B6kjoH! z8CDE*T|=}1IvC9OFEkz-j;+ELVC^s&y^C%}7o!W&jp${t9wAs0tP8*(5Vjuuh@`;x zp*`A8HBC9BWGlB+P8$X9MQWo8;(%*G;i@9F5Gw(lzd*Pqc91iaIsn0!g3f3U)Qid^ zxwLGT%F8e1tIA#VAFVsI8Q|44t-ba}J*;M^`?RZ&2M$Mr=rGXV4s;Px3kJT8Iusy; z>*@?`JTwMwfZRgfAmfnja8Ky1+E_`KJmMPhfLI#H>?e7T5~FrjqttUsgtAVi<TKJp zslC)%>Htbdsk_ui>LIm~nn>-W!2tc8meQmMAo1PgQu4o2h}2b_2lkDDPvnZZd3-k^ z0oc^VayR9P@<JJ{JOr!IRC*{L1&(r-R9e}jrfUN986FPs*d^p3C_j+CC<3g^Y+O&w zCJqqmi6KNYqCK&W(1;V{P%4UkMwe&GF|X*lKuZ(UDRM5kl6*;)rxsGjsT0(4st)xG zpxl?lG@>Iwfjz*n98rXC$IIb2u^yO;CZS)@AK;h<bj%O1XF8+#$VOoGZo-w}ZID~* zt9?`_s<qW}YC|<a?V;+_CCWK@zcfhH3z;0uEoM8jec7e#Lzdt=a1%l4%~j%lvOU>- z!H0oNe?|Xe-y7c`|AGL`{@}I<#o|lJB)^s@AeFrYj;|_sgr<^Hey%QnzQSh^7g&oa zhz;T4+DHmwN9*Ggh&JRc@($UDyZ|)9bi5mW8XrqcA(v1?X$Ng)?$KT<i+n*m#XZ<~ ztOYh73u4>xia<ZGgpb%oq~hPPljsa&B76mE2i1foLBF8{_%!?w-UHWz4?rI^N$sG% zP-ZKgf$gmcFs)HZkvGZpWry@!N|aP-mP{)L6<M*Vzm-19QMnkbIxdxx&Pto*f0Xy? zCv78C0A)Zsp-RweZM8N*TMN9&*3f;Z4txac^k|^by8%mc1W85^Gz>MPD&hb(nL{jS zZL~i+2kec}XcaUCS&lSB!ocj$1NL$%dJE{WVdz6(p^~5^jn;OntJQaEKj1H(g;dB5 zF!M?6gnC?gCPx5iJ1RYrJW>q6YwhGNa(8*CybkEH2EeBM0ne@|>B<>puwqb><sUMm zOjmr$UbPGG&lf}A0qQ0I9ytPRa0<Xdc6FSZp^Q`*B_LN<E-FLRSnZS67I<~Z8mhUK zH}W%ymJ)%~o|X>C7nQT>B;b+SfUlhltV}<xh8CqoYqh{G><<wB0&SJH3s_BuRtH)H zJp?Er2$23P;O|ZavQ<IdqJ%2%<=gU4U?~qNmDNXT3+*uQ94~7_w0A0@wp4BcKj^DG zQR$;D((XVh@IMHJBIq@wCUO^`oH6h**a~ot5$%bNM7yC;KufMd+9OSoX~+}AfOZ8w z!fxOxYyx^ok6uFRA^*Uo;JeTc;OB<IC*c-gRYm{}^#C1%zC$bkn>+`0x+}B`iibbI z(+~-ngq{WWcSApbHgCe6fyWC2zc&Hi1YdxU!!to^mw{cs416W4CaZom3+R@iU<O+% z+vF^%Kah1ztS+sScxjZpU!Eerlb(okgvxwrZVkJPjpq9DLE(nfO6dzcq+x1LB}p19 zjudcV7_g*_>{7mJ)8HMzzcrx;5Di`gq_!*Y0rw-D(0N!JJRNUDGzFGp7A|4;vDd)! zy@!t`B(OtHlAFm`avZS(e~sC&UFcAtpP!?putiu3RtKMl@4%<wLEzUmMjIeq;avdd z__bJQD^wY@-WF)YvdCh1H*`)b02-j7+DkpJR?&_CKH?_8n!VM2%3`1otI9dD71)B) z&=6o#Uqjn9PU$84#QI`iv76+V^VEA#9FmFTfVs26|7xSvQA)N<C|{H)Z674S8nPX| zf=)$?fd~2#`111r>M|e;kXPWI8%T3xFPsMU>`@?7*}!-7s-3iZS`}z6;3Z<A3EEV( zp^_%87bgjq`Ne!Pe?@pFW=l8aXa!b=%55Z<aD?B)+1XrnGndFGh`CZ@pwH*4J=M2h zm-hyG=!C>c59DXcXZ4a+9~uEw2J0B39ajf}Ix7IK8wYS(PiQeT0q{0wv?|&Qb*VZ* z-JuHVL9Gv9A3nk3fKB!xA|fC%VnSP>TTl*Nj#b7T_(Nh1*@${iRiRq|s&f;?lY@bt z8bs6tT6i1bB?giw$m`@PG76yRC-^7q75W0nfNQ~t&<W@o^btyh-T<B^3|giot2Nbw zz^DELyzQ&<F1fAzLaHSl6Jy02!e2r)p^DH)I4sD*F!8K-MVu=tLV~c8KgzveDRz0V zb#Q#p7ktk?=kD_Rgr4FX(Jy`#XN#;bT~PT~{4c(_@JBc+Zj|Q8gOxhKGryp9hJHf5 z;g@g~WCAh^tW7kM44;5c0jd&=79ESL#CqxxJ&ftW9HM7ZVPrDSV~4Rf*i3v5v5(wJ zm8Uz=L8=MWn5;z9#;0Qi=q_|DIsom1wghtg2x$edm=hq=!&<0zQthwS1tV+@EX+u? zn+mDh6)Ql`jRB&0C;gOY!2LXvTLLfMrQpCL_b4BfQ_2QqwX$8gq!cL~)LUwtwgs?u zi-G4e7nb4a$Q9%wc<xx_K0Fkz0Jnu7z;ltIXg{n9Kr7pD25*YBMH7(o@ND=7+zM#h z^JqP6C<bG#(ILnV*a*7-&r%5QL(FJn!1)|U@?aah0ICBl$XTcr{2l1@0MI>m0MoY? zXuSPeJ)qSt!*!4Wh#yAa8(M$0i}F>5m2V284F<%1WuzmL2;YMSYEI>g+(TXgX8NL9 z4q61y19B6JCL<$}pI~4AhV}s6I0~>!(ZExfp@je)c~AYRGC-f!)^P1Iu*C<JpgchS zDJ=rXBNU*Or{YYJ5cdn6g_=TlVIPo#Ibu4%FS7WT*bR`Oci4NuF2U2mm+TULt+-XL zt;TDewA)~oZSpn1Q|%HW#VXPQ`K6Mno&$QkK9Kb!Z7*Pd#sVF^UAqSM+zsu7wh27X zAgznmO`8mO=Vp)|jzHR>Q?a>tOX5E8{@)Rc35K|cZ^B>Te-XpUhg1UN)lD%RGfp#I zFf}waG$!eX=oluRPNaD106m-OtwZ%a^%451x-sDF2XZ&D8|;H}*i7^k@K%ojKIgRR z0_>UzSmX=xRGE|)0N>9ELIHZdJU5)Z6|@DX1@8N8{)@iDzJTw7e}7<guogRyt;dcF z#s#+eJf0oy%dQEopRQu}Vs8h3Wbgyq0{AG!f=+xaL<;r!_S|yTz?KI(qBGw_Tqb{2 zMd&{8R!0FeVZ+X%?E%A79X)~e!Aj!+{0T9QRLNx&K_92PFcNcI7pEVu|4Xmw=IFjK zQOqn_pdL_{sn--lx20DBuH!fThrU5~r;k!6$*}~CA4SI_>)<e$0T$#cTmW=!E4T}U zX{P{!-!65QHcQoIQNE-=YLZe{sV$?DUuY>9g{eYYag?-8{#$9LPFL#zFHQkA-Y40m zzH()ymwH6Yg8c9W;OXB-njuGkMLz=_1kCJ8pv#TueY7Sv0_%y<*eSFkdK9UG`~sTx zIQ$%@kip1VBp1O@FF>7LfaiG=J`aBeJO3uq0dRychF~`UYH5yifk#0nw2D9q+iAbF zf1nL;0^sF7B254*)n1EHeu&TcHrzor2ZT;83J0W_$`5r7KtsFKy2=ho6_WV={APZb za7wHOWUV3aHyXj$;E&+52<`^gfm?&!cp2!NV{ij_FOa}UZIjwp-L5v(x<Y@$zmY%a z2&^Nv4egFxhU{uL#UKxn21t5&gc7e&@Oz{RCIRcW3G0OJgCA?SdKT=F8&V5-pz=|j z0J-7Hs1sPfTj)z<6%1rt>#V+0wkkUTJDCQw$OmPm60Q6TeD)>)KdqO)$q1O?OEM;h zO04jff5?$s65Ej*!-t5GaupSY1_KT(2Du23lOJ#|$ADGvs}Hnfs4B7xwPU4;crux+ zNa?AAWIkafTH|}L3V=1N2RNficnc5!+f2R#xVAU>FM$&y00T1yi^e$AgWAz==vIId zM<55_d|-L1gQ!7QXbE6uH-MelN~6^sGAB+GYVqT^(p&=YEne~0h1p^rKxEfMkMNnF z&so_ofn<LtP=5M<25PX+xM4z~_(n<qTskf%NVCL40x6{MF+#o&FYTAZ)j8TGp!4<t z#5xgRe+G^KO#g3yfARqG(4)_gzYsm51D1IRdJ?Nh{7aIwkM7G<W;W5MscU2oF_GvG z_`9~Gf%;ADq%BNKhGFK>yQwYYD&lYaC)N+MVi=G=81NLez#3M9^R)YFy0T2Utc+Br zYP+HBa10WH`~`<VlhucEA8DG{7(@v!NhalQwNT4|dcif|mCzKevMS4E<onVmsWVuk z*UCZ_)dm8bxj>t#P1lxd{{S>v0r;{5p-#Y_<B$&^<~Go7C=Vc;5nzNr;PSw?s)2q) z{{nc4!!iNCe+zwue1Z*tA^Q$Zg?l0mQ5V`3tknT@GtwCTsqIs5D!r7s3aP$Q#{i7~ zS;dtoaUk2*_tMqRvAOt!V}W~{-^}CkMwQlvDBp!<!Hb^i&Yi_g9ntQ){`$f;H6OW* zA0<BHw^0gSqdt~td4n9Oc7c{4&9UD2DZC@T7~6}oNIJm&C$V9~K&l~gQ8!P&T>nP5 zo?++{04F%`P$Go<L51s%7|NIjhGbbMh5oSC3^`$%pl9gPL>X)}V5G0(^{HZ}j$xH? zk&)GxW)>1xks(^Xya#ZJ4dqG7GL-^IW}k9eYAifquLmah!~9qM?!a(%HOF)FxV+#P z|3uGbXP@Hg_5}O8;^D62UNMl(r3yPmOq|d6WlaIA@3yC|=cp&&`_*q_C-AGqN^)&r zm-i{PfbEWye*?RHO}?)X+9<GlhXWq+2r>d7x*13rbPCpzm`I&u4(koZXU0RuQwCM% zpr4Xo@yXaDv;YlaF9?w;r+cU0XeevgqLZm#_*0}JG+I3gyqQE*)hfeoI1X6%KhQ(% zf|>(XrXS!>>nIs=E4i~2F6Q!1ZYbB1+sk$5I|-x3#nJ>2N{&_T0=^(gJR!{D=Wy@Y z?d(f-B*5Qmgl{4#d*#*2XC)8BTXGb=I#%@ow(1s?37gP5SaZA%5ko>$5miLXj2?s) z?;6S*>lyP6eGPl{&vag<Ba=gap;2ZOlfz8ZJ=ML`jny4t7SIN26A_2AXf!|(TafQa zSM)bJ4*QD1cpkO_%SFqgJ&>8e4}GNt)v^FpZv);{nwTRL@kYQQRRaw7HZH(50xVP> z;JQ1q&4Yad@BCl=>jNpl9b7*lOSH&^@<Js`X|C>9i&UFd1~8Qo!27zWb%SDI82O4U z1d%Zp@PHghKg10uf_+^P*#tb$hUj+Gk9Nf7V*Rl+U>9Zpj`|$@2rh%XL)HK-WI;DV z;AsMP9T#$Iq;LGS?pNRRxp`Y$&$-1~N6d=vhtG+ecTdrPoL!lLtS$vp-I@Fl<ODO* zOjrko=uAzS4)`4SJV5Ll5fQ&kXX<l}{Y@>6h`v7^Pu3wK$$UD@_%g&2-aP7O^rPs= zs5;@xt$R%s^%A|A{=;lDRI$_vD;qgIW?QLJr88r1MtulNH6_wRu!_)fWjR>U9qKXY z2;d3)=uBjb_EfsUVS&EhU+yJtkK5@f=L`3@^mp+!^UQE=vHw-LvtVvvvc0A&#alYq zfxF9fX6yPj*L?f_{DHYca<Aq80>SMLL5I*)AvL46L-C6rxRk&bUoBs#zd<m9?<P%G zYr&(?BJ4ikxSe<r-ic^JUZF-Zxc)CgTjP1-ZX;o&4R3WDnFDk)dKbNtxuDyv_v`QJ z3w3jtfz%EB7IIbd$r<7uVWHp_l0;Fet+Z6LRS&?vEtFe;7kSF(a&x#=Tv?9cd~60l zCLZ<+JC=PBtQ1TMcmiXB2KEu#ncK<j;s$^?$at1v!`XLiTYj<FM5zYlBR2dh@s?aj zy`o-He^UdgX4F_Jm%2qCVtVNw=~!K)zOKHtzL~zf9@D4kuItw7y6BwDIOZeWiY}mj zP%71*{!EWxOu7%cCHjCKH|)|M*CjA1)IidXAH`On7m@l%1mJGFgZRi7xHdckx}-tc zLKO$`3`#ixyxf8EAbFO2Tuzb=U~m3ZR;!U9&ay}wpj}bTN>_0mThGTjci2-42NV?) zYwn^zvXHLShgL#a>IbQiGX^?(hkF)!+XZ^_v5F3vLwus&>DuYr>#EWBiQCvRG!|Wt zZpA+0Nq{$QL5?EsVuz3vfXI76*I^6hBPP-3n61nnI-aUWWTO{hMf;>;>StwwdRo)L z{g4?zYR(~x)b3oWvtEuXh5Fj(<DpOEf6PjYDBR^M6xRV({)oJUMcna)Z*t1!jLp{^ zYS0E<raN0`+p6%ZVJ$3Abm8PyY(4gsC}cjHqCzj(>V&@zI}y^__>R5+xTn?RI9-(G zLHM88QDyAqmY0t&_bE<^zHXB(i;Y|LTl6!HM=TA)c1P5Vo*(lqnvVzxy=vG+T+?KM zU|;wPfc$3rF9y;A)dSakdp)ePW-(b5SGd2hs(q7Vw7a6Obl`5_xBslSuWO+_w4h>M zle{(sx%PeTO@V*;R#K{TLM-CS2MnIS9V_h(?Kg`byF9)VT$p@QYlv(B3=@T7NL#og z+zaV}*@=sExIW47*!a>&8PoMIK-{jHE<;zz;4oe_`z?b*zF2yizZ(`a{}3OMZrW6N zo#+*giE(mJN!04VZvlpzti6?A2$$GQf2No7M0-)+1V0tr$3EfO^Huqs+)lO)V9o8m zmOjZF>09GN{oVZ4{pWnCUePnov)1#scb|U(n+SH`eCRt8hfM=`p+33=*^Deld*Ii| z!3<-VVQOM&6>>0SaL5)*KeJ-IZ}?lkST}=NOTVJZQ3uGf<OgCe;7E^wm}C#~GMP@M zfa4l+E163!pbYdFfX3fZFjbBmLr6GH>?hWeQ>Zk+mbNA5;)l`N$Rr@q)j;GV67s0u z0Q36?Fc$Nbnrdf&LW+<ocux|cW0{l8K}Mw?Q%S^Z3`NR;c;!0niMB&^iuVFP9j9{- zq!p%&OzxQ4GyQ$ub5{m8OJmV9*h_e&youfFO?2IMHS>nCoID6O8IOluj~XAdH!3ge zl&Lq3VKpJIGFjQ8=0JPVy+G4c!cIY_<U2wtUq-C0bb*iI>*y<buhC%s+tl4~gMNi~ zLl$b&mBxS>(92Dg0ooUM0=gfWqQ-FlI49+(sV}~*`?USzyU*!AV*Yf<y;S_&Q_oNN z>v&1`TW1s3M$f@OJ<$b4Q1^{btb=V8ZS$;COpA5bsimZwOrwkSi_IUb<!pJjV__ph zB*P;*iO9tx$O+73)0D6W(XZnREA*-|wrY44p+c}sR;dBe_ad5vKe8d=FT*!SoQs$q zzABVA4Pqu^1?p(g#Jvo3@-Ow3@%{9c_ug_3bvCuX&Ckmjmc1gobS_koV;|}M?q9?` z5*mxQ_};-co*Is^g=u;Ba<RPA`K^lvImWm@c=LR1e9@kA&c=4M(3jt@pjFWV$8Jy4 zV3>GbU5WI^hmbC6JVWRU4T6aX`DSeyR@=7P7Glc?HCW%6`xtHdsmx5;Kv$-p)2EqH zy4AWQrYG$pexci-7YZY<mnzC1luFPxq&r69H?WClfB1*`m)rs%pknrF@KeALDC=i@ zNuDL{9A`zx0sGRTyu!@Fzl)IKEXPmRQBRDoo<GMwG{6UZ!8TkH|46jUwY4Siee@w- zll)FTAZr1ia3y{bcm^D*qUEru*cU7cFOMT2!u%3@4j7eh*mvw5_5-VcyTCmksiVwH zJz;EU@|o(IMbkjjJmY%9V|_iK$FJ!&=t6Z3n96h$Y88o*zlmsaJ-MGG$#`M_{s$|I z-zN^y4*e;xe-2n?n-3denBC-5z(*w!kEks=!H{blYpi8xryEEm;1OsX{9HXF7fO5O z4a&a&)0Gw4dC9y5$qU~%c<y|7<I$1Cmfw%&%nuC4_L_6T!a@rT+i|NL>bE;m?VTKb zJ*zk?GR+VO+Y@y&+8ntd<QCl(c8b&46aJHanEN69(Y7KN(A~%`ZJs<*3Q@j6A%v`V zhgOJL6`xlwwS3>QOl-r@=S(8JSXk~WaK<|BJEpq-`0e~{d57W<dj}6Y|INkz)c9%o zn(_JJ*ON&FX|eeioNN4(xFsNu1`)f7bEM<SCkVy8^gUyxkk;097Synu=%MBF3j_Cj zpZsgN!OB={j4s@=F0_5vLF;I9wthU5N-x#5F$F`b#IR-SR)uT7tXEXOdA+H%HdY;8 zp=bQ5n7a`#!sc6tTAG_a=x5XE*jlZHcrDn&x7KsqGsNc&JmKbonA#%6DYuh;^Awxl zAMd^Ei31vMwm&L(gdNUBa94w(FW2?0XnXFf4EyilsRL7Pr9}J+{WCuOeP&vA|J=@b zq51lP6@>x&JJ(PDVxh9O2#cW4=^e&=Q>w{o`U$k&L)~cI5Zwe_ADst8fmrG^Ie{pH z-$lnE2jO)f!hIj*@Y7T)-B?3u(?W9_%T!AfOTc{3{I_|ldAGTTxv_~cWYBuzJ-k?1 zD;QbQKh-nT<#HGt>x!Ee*Dan@oKk$!@!Pq`J<_|#e>)h$Zw5)1owW8K^5;V@fQa-W zz#`Yj>tZXAhR`<Uv)GX@&#nlp^Y`$-0(R?K@CtjCyUcGC)`>>BnVJk8L}w7~>DRjH zhOdSX`ngOP*$Ta;g)0TpFnNyp0_e2_x~hJHVT!&J{Sr&lCQ7mVI*`RtOGuPScs_oS zE^XLs;>^1(CoKak-_2Fc%S{$jd(%|&$`C_Xr|@AB=fjIbcbL!WhLTHwFH|4PBZ5qM z6CLt3WV_|I@g7r_cmuCekILVrWa+WIS-l1#gjvvL`B&hgeQidKpEEv&zZ>x(?#Gvm z;m-TwTYRJbiQzMS2w5if@Yi<Hj!w=8-W~iNXe7187_dZzR4_fDY4oNX%ijr(3Ce7L zF-7f-jsuuvI?(~!1vk;U0Dk-}@`Ze8xMeMf*cF46IvUeC;+n-vEAT8a$^YK<t2n&a z<f!B-^4#<<2~G=6^cT7>7cVQIb91xSW}!Jk-nSyondto<5ZTszAwNLy36i){UZQ3~ zD^NfFjGRdAB&*@8;3(xH9~<oEfA4?Do|nGE!>EbI3f6F2vv4R}Z>ts7I_#QlL1d@c zeesXWTPw#^y;U`>%Iiwk%X9HjrA9?%+Rj>2&0CBI^beS))DfZ~HVvMuewN%ql(0a+ zr8yugWG7M`OU0I9dh{}stJIc0^KV!>ILrUt%efyoV~U#<*3YYz-6!MUKU01^O9>>0 zrZ`iY{&M_Q(?(=+*;n(H6}Bw?;%wx(=i495;CsqDwV6l?c8@3p7_)wKI6ai=K;lFy zmII>pB{6_q$N><8c?$AM9s&K8LiV6L>aG|%n2&^X4z-0vhHVSIY&{V&!{RhqjN$rt zrXf|4cnUo1y6QrS5{%r=;Gh8RpXJSRr??Kd2zQ2C^bGLf0TbJwKO~-%$AV0eDR3In z0Qh)I@D*4)WVKdFIU&6grvdh1xD*YrY&pP~=tbZsvWtSxf|a>$LWZ<YZ4Kw5Z;0wl zrXkYO(|Re?8aCbf!8n^-rG^B}j>owVGh1bK&R^mh&i_Dm>K)dD;myNGTN@Y>h@McS zY!_n1Y<WAJPbBI#n$j)9L!OzB8xAtbR9osWrPA&72aS>D3Fi5x2*VV558fIbhu*<2 z(Z$9?p&cT#qxZ#>idh`R+YVUH=xE{;)Kyx+I(_#%2i#-b4L#?)Lw!2$G3V#PnK^sX zr~H2M>)4-tnIZXe9k@S(@2K!vE>sF?0j$|5X^Zqm?x?jwD^u_EHgiYIV^eqCek@Ws z!LIQ&_1^UDVLj3~7$xQdt(c|rGsi*1bpc&h_uP<djtISKW5el)n&H*LHd_YihY_2g zxzYq~W?-jpl{e8NxCwWzbAjWg{YjxGe}7(sJSP8Z0c<bhh;_B|IDJYmi`PjF<iYX| zNhe0~71%9-rGDDq++Q}ZA(+MP<_2?n*i!5Tc0NB$Dy7XvX=<r{qItX388$ZjMR?b6 z-u5cIIPz!A*V0?dsO1VP*efPiJXfJZxhHX3V`fE|!w!eQ7PEP!$ziN%+-k5H=IBT0 zVwe_m9XbHUuv5RqFv}q54$@A7z%D`QvdV7?e)qXN$?p2@!LHAaz4okvPq}NdMyIFz zR#Pvggr=NGsq(AvcS736bU7n0t4i+i{6<BOioZG+yL)+``1iBDg-OzBS+C^DJLIwQ zVY#oeRc!_}M>=6PVm-N$iUquIX(moLP(RAxGgyrVV@D%n8emScXdz>)&X89YgPAov z*R7^2lHakP$Ow2WbV~c8IswB$DzD|v@;HeC()g6k32MQ|>@qHy^Kg-T4gM!rhTF*Y z03P9c_5k;iPX~JU2FSI&2bjUt(kj^lq7mupc;%qfM652Pb3NIAg7vtcBBw?mC^ifC z5T~fIOci|-<0kX1kg=iPLI;Oj)g6Y9unippvMc;Lm8AdmCCB2erL{7oMwu$4RV`Pw zZTUtqyk#9#4?ZDxlIAH_km>Yw(`4&ND`kGdF!(8GnYvls3a!Ha&?&|<7Bb|z88z-< z){&n;oM0Gvg?V7g4LcIOwDj}%f->Xc$3>sFd?KF9ulzfU|IWRe(J!s|50}<Ivq#RV zyhZu`{96T&3U3wNw>NQ&b#?b<1pekfN{!Ur+DWa6x?bwee+%+~DZvNq7~zKEMPTZR z?!EqBCIe5=dW${T*g&HHLJ$=zL4SxCLqdq&mKW|0PqGaQix1sky<=S#x+tuoE!t)b zJ0CK@_?&#L)#a!7IM*TPM`w(?x%Z>LHv5ws#2?~b2M75xJo&DCC+V`dA9#4*k6;l$ z2}B={$X!9s=(XS=-$l3R3_5B#?iMS>QO;+sfu8BWBbwr?;eQZl$z2fhR1EXbsCiJ> zgh+4ns~A`G*U0MOKSHNlD_Ngf3qlv!dPNXXV$|KJ-jQ{}--k{OS#Q2>s%JiF>0o^m zO4=UUw%7)REwOI4a3;}s$5`JKW`1WbG}kpRHD1vrlkL$2H9<HXIO93xOe{u=6?<gy zce_?}voNHfY2KQg{@DdthU{J06LaR}&dIBozazgme|kYw;pf8bMWgIBi?fO^I5M2q z-KcM2;4mA_8--jUDE5^d${7%ou7+O0Ug3)Xlf8xPK+U8p>*^XhnQB@dgd|%Jg|-f} zht0H2wXF_&YHeaEFu3WTID>3bW2GSXIXEzQij5E|$VapqXjS49xruCz4~4(T2lzU{ z$G-923EmIB^1-9r8sUOiL$ZT>t8_Nc-`l(1{lXRMp6z+(%MA__zRBsD1ScX(kWFv} zXp352nJ7P(7pjZl7`!)CpV`2iqzS4CaUbLwjly#ACe%Gf)-_|o@Fe9&aIf=2UW?4G z8Le{bxW0-LsR1^jOwX#bs~@P`I)13l&HRE63X$vq_PA(=#*+cv7Q+y|Kt*7`)K?-b z{3A@0yTEtJPR5zm3AT>m$83Snt05E2yfMs#S~i8=i|7+`v(&}X2TDzkdL8mF6{6|` zSM9B`;Xmfo0ja*<rc5<Aqv)2?=YH+^*Q2^s*C<z}E6LL=aGhVLyoYyy%&Lp16%xd0 z!DpV|&S>X8R|DS)Zl&Tz4iR6;Q$!+K2TB1xc!tnVLbMfF5mUo5!j>5MHELtz0h=0f z(1aPb=?3fC>R%fuQ#(@y<6>PDSsy+n?g%*C@y;fWiq4;Iw|_0aNgkx_fSlSA<&|(N zSmISJbC34y@f`@h;D-W~G+2g3j4kgS;8<MPA-_z%r=WUqC-+7FE$%VM$*L^B67BpB zkjuVHn4+9Rwo)C9w6&e>Vfd`@wPB+|VAExNjJ}d#gsET1v9PldkE51F7eqCSylC5L zy=`_IpBn3!e}&*SXM{a!d-RK__Yr2BFC^16)ex%>(|hz@!*FAcVWB>h`Ik72j8vP8 z3jw0mJV)I+_Yc>6*A?eRhqZWQ(Xj$G?{MzU9B1~uY$^M8PEu~A{CNeN3Y!(3E#iyn z+Uo(y|5X%WPqSMcd!3WrZ@p^*rML;gQ7K7zs5zkZAf6eGPR0^I2E|Zf1Nn&B10o#j zb)yW|O@@&1p+mw8qO{n8(yQX8lunFxgtpg3LjFK>@%o(88J4Wm1+~2Eq)qr5V}r1I z5jnOL%M)e*I!V63hWShT2Kc35g3w7`3bG?u-tQmlx?d#cJMy0weRe$x3>3eq-9a3% zgi~oFtY8hn<H1#YTjda9B>OV`4HeD1EGNtfhLhAo)Szt@f3h8ev)PWqL-_>M3ad%< z#!tY#WP<bhZg^^XR|Tsodg7LGzHLd&r_%RIV=?W+a6?_Zyf#&`iTB02%33&yn5VNE z`xxixoz!-0D^#egQl4t1u}k!7)0@!K5sRWMQOCpS(3j?~#%ad;rr9BD!nTJ04nJ!f z8k%7~rW=W=(k*`_$D+LG%(s7xe+tr4v%(6tIGTGWg8cI#fot9^E~WUny$pCwC)5)X zNZ=9q2;kG7s;8wmZierT3vn)RMtJrFriteu1F@6d!o<;SiTY>}R1C6w?xDA+BgRsp zLn4ZRw7iMT54&NWrE5>V!OCONcqwu|y+C(Ne^B36ca3U@4~HKp&&3-c*P}kSimL`P zK{^ZFgaf>j9T*tlJ>%N%7++kYxPfD#Ynay*(6P<9%Up9VF*w&B>0Rf>0bBgZQ{dYi ztj9MJ<0VC`B@)6%&c?0dRtda39d1cHU^*EWn=4t)n_rp|OutPFEpDsRRwrt7EL(b5 z{HXYWagR%-#e9gm6mj16JG7DYspYhpFuyV_Ha#^a8Vm-zey-t^v5nbniMH0a7Ffoc z67(3o0Vfey`vx#r9q}f=nZ4tm=6T{sDO{1)B}bn<Cu>nwShgd3Nlv#MCCi)fSGp_h zM|!6$GOu^hR_7>hqrl`~=ioZPPe*tfICJb$QS0Klu77+ZxqY%1+K!xnhiXk_FF%g$ z9sI&xlZp_C>1^&0KC)C&+2<8Qs=TRky~?A?#)>b>*h(FY=xg@kL!~XAxcuz2#;G$> z$7Y1v@3U*s1Lpkbl=u;4(n`fdJU0y|H)|Xp5u6)X9PG-O#kEqQFqxIT*BpHc%sF#1 zb2CO{4=&i@c<nWFx5ct@OL?J`Bh26r^5?|H>PXZ_JunOnnQIe)H?rMwP<I0Bru1Wf zxC`uciWqxyN0B=v@UJjliG(^L5OxXQME0hi=ti5Y);nRF!aWf~Bbf*)Y=@cB1@Okm z8jS*(i6=AyDZ=)X@$>?ED1D*i<t%(CItkf;xY5zXW_qw;g~b$hFuYde_{jPZRcv3Z zr!5iYdZr;p*w9Bel72~aM6=baLU>?_E25}lZg%F6j9OWpa(fr<a;*2f^Ir)r4VLjQ zb=!;g6%8m_UHr^lHMm<`uZDvB{ok@p*cIsFneHrd#JjKhPY9}(j8|pa=qu@$GH#N_ z=OFnYlk6M%l-gr_YK;o7AJI1ab!czPW<!5w3iXgoBKJ}bda7<P;NrV5FUf9rB~*jn zslVhg(tI&etSjyjzl&|ePCOml;9U(oP_sR)Fi`l^9^#7e*@J)hy<)O>SQy6ffr|c$ zzHi<rz&iB{*5}>8LmV%E7gzEjtR)cbzu_m?6k)%53>`s@)+46trd(r+;g*3lPO=;f zZ5`1yrhnX`vT*tAay`n<iQ5$u6Om`lG|x1JnR1MCj1EH^Lzq66IZE!pU6_%0My2a( zh1?H!M&F4|j(HVXD$HQ|Nlt+(iHSkf-_l#`e(&--P0mThfx@}@J9FFRw8$Ql^*J*& z^G%jMN6LAg`zSAvKf7?YU2$A?SMYTYqz7-Zf7qA7ps$|$P4Voa356#MgGJ39&)fz6 zTvpFF;G6K<`6+@!?5`|?aq5O?plxilz0{RBA+B}Y-BK@ODn_@CdJwrN@>j%(uwBO2 z*c;)N>uN5R);=}#cbS~M?gZs0(=Yr-+`96~<wliu+kO~c<3lyQv{Z-}bELo2M$mF? zk@P!&I+y2t&A9(3?$4O?XF2Ki2EOn7MIe(4p_|$iwLZwAT&6CCy|_`g+2jprA7-=t z9oo<QjD7%b7bg0)JGvK+$rtli6wP%m^nK-K$!|3j`G|V)1(bssVHjlo2wo^{5LqoM zJ+f^?=dg$7_snVx(!Pq7`BL0N&MAyjR>K4EdQ^};$P8p&({t%N^hKt-eyy>V#Tt6v zHY~yuF+IW-UL%aMCYzrbF+-y64RerI$xtF1vw(dOC1ZT5-{#47w6G5;d{pqNuyV1^ z^~B@x4Go+LtoGyHXCU@sDcqRfBR{pEUhzNf(t!)yb-^zz;5P)nc~84qIjg%mdabNW zvLQ#vRXWnpLa)%>NCi8Mo<UpT<EWeZ$(9{q)glf=+_hP(dySProH-slh6>mT@&U8d z(9h&B1&zJ*tEgevW@xg~LaHS;2k-n<lk0$di$tYRf_bmc<mzbuQ;?d!svy?h+ok%R zvJU>5&{#Og)eOG!wepts_VtYpd}ap=mq7O3Z6!*XDcO05-Q?fkyXyC_`y~(5pP+Ot zjLS@RV@Ja?-C|v=;g(qn>kzZP%=wD9sx+*+rgB1sT4iR$E{{M$*O}`ZAL>^C6o}Gi zNRS<j_5^SA9Y%|Z6*|%~GyG-j{4(py-6@+8cPlE|nopO9s&m`ju|>agT4WwdKb3ww zL!XtBZOt1~pf8$Rw6E}e{>a={SsODNrgumuGRNh-ENJWK>AC3d$p$$izm1I!jQ1XO zT`NY5E)*;*q>F2~x_CPW9s)0-C&<#c9t`F5VjGpl_UJxX<*0gbN6Stt-?seoGJ8tJ zMK!j)3&}HeG|n(~1ADNc{w`Swxhl;MymqD+^|Wty)eY`e>X5t4OTv3c=^}rJ{xV)C zM?gcwkL>f{T6P`ZU3v=ME;%nvV86H<6^+bM)2XyN>D{vX7uwuwf{#T~tphR{t}2PL zAiq%ka1wrnE^laT-W3vIJz*ZL`;7UN_FO-&;DC$w7n@x>yxGBA@wPS={e|a{4Vf$Y zbH*Z5p1E?!1#5cf&ahUteA_yk!|F9&q>drqm07?`ea0mSqI?~$N8F^%`soIj;i%!M z-l2P;Tc-bGxM0e*bPXMA+YvrHys8Zgt!jB?Xu#;meb_}L4XUqIQ>&;2>N2gY_E@<u z^%A<XSAC)G4Zx#X?da(0>#67)=wITG_nF)W?T7N(W+kP^WyEDi7nq!-{6_#!yjZ=V zpwbR*SU~5C^qPE4g6+jdP!`^nd8Hp_=&7fe9AXxF2VjnDcs|iq-^S87)DRXDy3%sS zP?;`+Z$pycRHO&~gL<ehG>x*j%~{6Nx?^N5^sUN@&G=kaWoPjR#Ofg9p{$t9miNDQ zdmQ`h^@>gxMLXWRkNFeXU;Im9qtKh*%Z3IA2j&JE2GiIbf<<`_{fiR#Jgh6isaEM2 zHzW8XAO?T(KjpsgN_+%0pPoYRq?4E}hFz8!wpY<(<BwNZTV+kP<JG9DzbcL?TdvfO zh$+@yrq{Y^)CMdPmXv8yy3k8t#D+>GG*-7Z)LN>bJX1BH`mSo5Ds7JE!b9{+G{GM% z@@2jK^WfL&-$&D<at;*qFCOVC>$&G1;(SrGEAMGm%?vFqBh8gQG3#ya(ZWBDOP-bf z`@z8+!QbU}vz-I$J=GjN3s2`Ud6V;B73LQso{51(ZnH2IytVpEZm7B7MtB#7w7d?l z9?Qj*E8Dtkbo}#}p|-ZB>VVVDM9f%YvL16l*Gd;j8}WVGR3R#G%6r0>z%p_Vw1`PF zU$mC7UN!Y+Mq?Y*BOpVi9y^))BSb20Z9mjcJud9=KXSSX+vhdOS(Q^Kf1f?gT_d<c zs3CU&@1A~?&&dgjtUiRt<2~us`mM&%rY*+fx-=pOx-Cu!&haL@{&qffTHJBo_x^9} z58;4p)CRyW(G|o{x{}^zngV>0p^+D(XT%JQZV(Y+ou{vdFH%Pd+u6!&9%qmwwH)dt z{Ipw_ua7gt8+sX14L)O{xr4Qft!?Cj=*=-}VwOj5i%hd^vpz9tx)iEEF%46Z_wYrK z$$VPfrPPuqiB0+R;3Iz}Umx!x?<L>nz+iS5SCcy*#Qj^{U5iiWAIlz|`A_DWoN9$_ zoIAby0}a{9Ag6Jyf3WweyRutxSM%KqP7qgUB-WlRq)6IItpgEoBU&2SiKJl`x{dKj z$o<e>p~aSw#`TOybi{%n_aq#5k<)d*jCCxjmS^U_j7@YmNgrAb`Yn$YAM;PSQ`}U3 zsL%tv-INii<Xh}XcfWDB@SOH$_-nDZxsP0bcAwwuneEtLRH<-GVO#qtC+$mT&q;+E zhR($#^g3K!T_*119t2VF4rU^!m%Qo~<QRSe<cnFE>bly7OXlTaHKGmi3o3Z45H-rw zyi@&a<-f`;C{-NMI&`^tq~QazpPEKg!Qzmc;J+5Ufqcjd;<o-}=)Krr`99UE*K*Z@ zYe*Feq9Nld4e|BOpPe=#<y!KeUneuW7L0c;_Jy!+wi!TjN`9A&<djQ4>U^K`V@%5I z^y7Jv&IkTM{B<!(dM)I$n(wXamc4m_F|T><rQF5&F+~rH^)3rwPA~iR`<n(~K2$CT zFC*ghGeUkuaIraYv*KTsZX5F<JQxyTtjL5>6{sf6TEk!F(v~q`51uDRLaoGt;PJo@ zcAL}=jwO@yD=fXNvn-GG^9c)dNBqSW1v&*!a<aHqeE@GlHzFO?+1yHZm%^x=VVQ$7 z`{noxU%9KZ<s}N_x^s$4YAV#?DsuCL1mzIC5Z_5zbellTrwi2_O;z&w?*Z0(&$Hg! zA@GT_N(S{e^a}W|II;*jt969tA~G&9D=p(9@?srvrQ$c1niAP8B$G~o(?LvXI{!mB zFYkhiv1DqgZliv%{)R3>m&laS{i7dZ$_cq)YZ28cc5~^maV<($kNFw?JY>8foN9=! z2U#%+$hxyAc93axSiHgg1Sn&V^S-00^SP_MH#T79+6!gH`NC{&cwm92hvQ4()%?o& zO$+W8HE@a^EHEf|I<VN6=&tGPTbyAZ=|DYggCWvv$bk)_{$>W~&NC!kkNks=z~AAS z#AvD_lcJ*ye;NMKSJthhZ2;Z(0dGHcBHPf}x^c$A=KGdOA$H3HlUo;0Vn~Q`fPWRp z_4e>wb02kwdRlsG`cDTV`D&s`j#UHNdI-@5OEuUQo@Vx^x#KfK(;ucE&&G>#JXHlB z)SmnTqWV$fT{u$i$ldcF_73;%^z&S2#Ru2K&7_%nM}4HH=u!>+EnCChM1GB38NZ_3 z><WPj*UNt@6IFU<v>JXH>^RcwFs?ApHTE|$#wUjMhUWT#x<uU<LxN>!*v*JW(LH0& zl!_~5h~6HiH;%;L$-e^zSD&IP1&s?lh4+i^xjdeq-bbFFj@$V}W*~LQPtP~;+lZgu z)Ha#53${8XUm-h`|C?JB%=c~gymfVP-Y<S_Pbj|c$aZdXJ#Za!y>Lx;U-7*3m0{0_ z3$)spooZmnFw>z!Y%{}0htINo4UM<94|!|31K7mHrhHR^`LZe2;G!mD+o9RYB=BZi zABBYy@ZNN+ew*RAfz^$texo}yO8y{}2k#dA3-EG+NQ!-h7JL`BzW<VYw_}!lPtn(+ zWcy8!3Hh(@#Q)*wtfQMq-!?p%%w&>G+^t^R-5rX%6?b=cSzvLO#oZTJd>41OLW|WX z)wqpiCKLJI?{|9mW6vpvr6iO0eV+TiE;=jJnM)1N4vz<2T_Ko2FNvIpO@U5;Z2lMc z06al}#QR0+g&(s1kR0r@j`FQz%OG07!x-3kzekpUJ$M(<D)AlZLD@vba@Aj&2ij@c zx|##3lZqO$F_Iin3c45>iA)9GdkOs_%EOL<%+ffi8_$;~s1Ac&V8oy`4KYnM9WniD z8fjW=Y-D(*b84!p2Fku;Glj3?!l)ngBD=B^LPMDs)C%Ief3J6}r<Lb}=Z)9ozZ_^o z^d*;&Pl%nt%)ki$MPCPBN8c^q7XQA$${-cY3l0cg4kQIu`N90gCk(tKRx`uHx1yt= znea*BJJ8#b2>S^~AyE_)kCnca{i9f>WE3OigYl{0NqrWxh`UJ=K{mcfnV`wh9t6+n zmzs^rYtka*dTcGbo9N;l<y>h$Y9Hsk?Ku|wFBFW<5_S@2%l=k%29vS<;>ppyfmfxm z9}7Q~yz#ynk~Jv*mMbrOQZhha+4i?BY)F(V;Ck$Vz%)1EKwZ`S^Fn_@&#}AsC0Pl6 zNP123Qqmo~dx|t;O{)|8q@Sodp?dRb=PSKTK5iuq?X@pd!@ybk4<!M%0Lyg6`c%U$ zU4eS9LMF4~f8Ye(RJK%JTlJsznc;`AmO-iME1QDmL^m)s1FWmBeQY^jcDMX(g|nh= zd0}x`VM*?Y@9`XMPD#$A@9Xm~7w>S4^natChH^qv>BYg*-UN5CbDy)eE7yJ0CnH3( zg;CQ@$*sX<fwO@_#5Sf6I2G)WR#)FOJh8O3Nvu^&7j=Wx-xV|DD*0JCtemZCs=liJ zs(t{rCXXdg5gQbXC_&0q2A<xlWp;JGzPT|$e^=Q@yc&AMg{bL7AUKn(#4Kbda4b7M zR7f2Oe)mS4LVIcXu8Kb$i``ZH^~vU;2jCnvALP$30|b&RyoD9Ax7iJ0Z=@&Kf1ieH z3fIFcp#IS;E|&>YGpNn<H1<fOgJ2`-5_iFG%JlMupx5wH>X-WQwenHQhU(oKyQWC} zURg^%Qo0&@iJXIP3M}w8;db;M_7ZG0f8nR_uymBPuJoETO?Fq&QWMmNP46w$tWwK4 zW2Wwes+N4Abf);DXbw67bQ&$f^Pp{#4-(ObqXYSEY(Lr&^!Nnc5uVGQ`QE9%;r^=N zCwMr(`e|Rto8gUkYIxsxKln1hsaa2*pjR?inI(*l8Ahw9cf>2=5!H&dMaIWp2!?~U zK!tE5+z#3ks{pwtMZ61y!DA7J$RSos|B;Ts4*_Py1m$bxW92X9Le*w<w&tr=tg~wh zmG7iI5Le_m)!wtRjQjPipzg1pB{Lku15Y@yaISQZvWd1_|JdNrHkTcR_K;oeoeJh= z|9E%(HTmw)*Zn1Rhz^2jiVmjs38QQ^4L(^V;n?sX@|e%+UE&`?%cDb(?UKQ=RdPx` zRFSCMs5-03)UPy&Y;Tj&(mtg>O&gVLu{8t}qRE;Os>RCws^6N1hRWt7Yr0Kmn`==U zH)$C8U}*pwB&v^wktw2a60hur@`q}GYNnzG4r8wcem<M7@Sk!mu6SA6q~z1@3%{P^ z=ltCN-S*A)^;XW4ukxQ$3cr^2bF~RT^v_U3wjuM5=;lA-DRpUFEnM^6=e#2W--$L< zYpNw_C7uL76X2!=(i@G@O86+%cHIQyY||LyCEb4Y0A*Fh6ZvQPG{tG9Kz&Xv2j>WZ z{DWi?YK5BfBiTjla{fA`#m>twYI~R#TH2aV>i(4PMJLBf*=lqmd7b!!+(YG3R;rA+ z6dV>f>{|dbNZHQru5IpW-lz`=)+2j@+);aO4BsI-C3Xw&6Nbj7$HoF;jRa&gqo7TF zF7`O4h?RpzZ|g9}c3>~Ft-=!`he1+fq_C5yndB+{M1C3E(GqkHJ!@!WJn+BG*j?o% z*#k+1s1_0vaL`CW4*V~&QIsrRE?F)umhO<2NOl79habPMXs#*MOU**-NNb|yiSe0k zwEBrWNqSB+MA!rx5!LZ`xG~&gZhW{Qj{}O#9q`}T3_>*~b_dr5mjuTKPXxyh9ms#k zq2xN^ui)cAg+Jiqyo0=JyvKe01J#K~q?^hCiJCqjw_eE33xjSu)Cc(&w2!ukN)gbg zg#yvDpilWW{4mldK1Q$xbYU(Ck0S3-Qq)k4OYg~kD<5gf!KN+Om~A>_8e+&*AI4`O zKO-`_iMM6NoZ^o~-HRh-mz+C%=g6*H=lCt;KXEcXNtPwMgh#MZg6V8`UrHI7=gnF5 z+4p7I&qpOCK7@aR)>I7A9?<=(o{Vo0wgR*Hom3XpBGjI*4>dt|OUh&lrCBvo^<Gt| z2IB`~eT&nUn+PY5O@5XnOdMgIVES9XOWReGsOg|xp|50GZ%MLUxAn25TlMCE{*$_j z{F!(WdKYv$8R1}b4E9V?h<}h#cw0#TSr%W!%_P5gb<WM@RZE{1L&g1mcPu(wI57Xl z&zj!{ef^kI>D$qtxrJz%$<@@)6B)FYnL!^RTL+W<9&d#=+m{%~3=Scr<RCJWoK8xq zTeP2j7cCL4lb%y8)E_g6E%(gjMp*w;4JL@PBX}+R0&bEwP&QU~0H=xzN?g_t6T*)p z2iWt>*3bZu9@sAKs~n>%Gb}QsXjjOuiSptscNsk8*Aoe3Ds_=+2a<F*f-yhgz3;y7 z9P7xpbN2m?fO906{v9Dlg>HoJN4G=A;c3DGxQn1`d_%NdB$Ic98}J<>pQ1J5*`Sf8 z0Mv~pAg8t&%$L^0Fle`+itrt>RkQ?T=FD=Hs-D)ahfJf)4s)h?h!Nn0R2JD^;!UVo zxLgp2o(UQYe<AZlSFzcEHStzFU))IiNZdy%k-ty{b+~!1ZDQiQ#G^KgxsC3W;*pqv z*{CU86HKWxsMAz)W-&WEyqnMC8}nDVUZGi3Ab2KlD{wO?BfC=7>2vgc+CxdGdgL_X zb`T5B3Zw>l2XX?lgPvdq!cJ78KGD}hFF9@GTx`CeHj*Klk6pxaL{(8t=mSmH4>34? z2;}H@g7$h#L8)LFXgK~2+T@LpK_aiXBQB74Ry0%=D3_`9>ZNLvI#t;k|Aa1$?_i}t z+EJ;vVSXA&E=2Oa{a)i7MaiKeDX&ep4ov!xC^0GU<nUO>xSucHzk7b?>48^EvX_^( zWwv1zy6v{V5}KJBDu%*~LKFNF_XF2i-v-79O~BV`y~a(Z`i3r=u?kc+OtwRLOZVMk zO*vk9M0G=rk5wKe-!ig_cH&jYf5HM(j-S#DwBAe0tX^1abFHD(KBSB@sg;S?BtgH} z%jo&|U11H$5yeGKJ>5Y~TZKS;4XVr4Ard{K?A^-n(%GejWsNEZRopFGRNSkuelGbf z^=pl<lfQfNsuq8@ulM#3z9qQeI{#u13-Xs+ohRL!eeZ%|x+L_73xgi4hIvW;Mbsd_ z(tn0ap|;}P%Fp^XmM*qa)>Ed2y1$hjK|X+#{wv$2e5cu~rwn}z`?PUIvG}#%Nw_gR zh?q%Kqs`&JAvg9#(OWm&xY{^HcV00JlR|#(C|!r#L2Mx}(2>v#t_CL#^(Hs_hB{}I zUH)w-Qv9x3dfM*v93nE<#?hUi@B9*Uq(6WT-Rsy{z`^Pqe+W2muRyO-8(#&Q@FOGb z_=({+fE!i>Xd^bRdN{}rj*S*5z$C*ZKc=x65o;h}YtsItXhNQ4rD2-7l1zb}g;&SH z(kg0*e}|sJe;_63T@j8&M88DoSWU5BS}5D1;&n&Oj}nTK&!xUjC6g@)hm3NyN3tKj z#p6tSVo%^&z)Vb{I)zfh36Z{$Vc{3dc_Q6!@kTx8eEWlS=$Gtf{%qtpU%-x`EksBE zO;1->rem|+<~ZUU>8{}&<6l8!FuB~7$jjI&s2{u#*(vgaKYcZ}M6?RbxT*_33El!G zT>*3)G!Fk0C<Tb11}sI6qaQ?T#cS||%F5cM`k96jLw}>v$m!mxrr~~cFQnuL)8G6t zSES-g>B-`Uzh@TvOOHEl_@A@S;M%gkwS7$s%(V^Y<k5J7zxppatK}>2)1%LqzJK#` zx$~d!V#(jy1}2M9quz_<MLLmJJyO?9_xL~!c7i|-S}NbPlXVWwIF%91jakJ^ZJD_^ zxumkTM!2S_rnzcnirL&+y%x_E_m<3*ZB#pq_Yw=zZPj*GcU7IAUXjq!a6(}ePZL%L zjk#>$YiyeA5jYbs)GgQil6S%WiKnuQgUvmg9H|vY$_|!3EjeBMyy#QG+n<xZ`abu~ zD$ClP9r^yaU`lB{SH8avd6|3_-0ai2TRHAmNbOc<7tdw?pTu;kKS&i8Q!OYP)sn{9 z?UC8AN^(+}p>Jz$XI*3MV)<#@prce$#Xeb)?2MwfI$gKeaL?Gn_?OP5{7>=??h!GD z#MD!AIrEfX4^NUbQg+g|)W6fcP|ugWM5&mB+e%#tt`6h|aH1Ny7G(4H1)un5c+a@r z+xM2=D?3vD-R^ch_jMs9Y<G|oD1wZDr}Q)SG;%ZCo6~bx_$c2#`XE*v+AdfQ`p+7$ z#oifh5?R0x;IjZh#TXkJKL#~|CnK3yiS&Wus%EL-viZC9fvunIyyc70sU4y`F6|`x z7bNH}#74(P#AgYDLKbz1NKu}s4yF^&kc`ILC@O2-7?xQlCOK0asSQ#ylQJz?+HBb{ zkrUb;>A}?uB`{HXFmncwNUkz>86P7Et!BE>$H+*~7Muj8i(M&**%&&;erJDx>}>^+ z8gO|tJTVvMI_*q%EpeN@D||QoJ%X3XI}E|Sjx>zF5`05Atc^4X*kw0Bll>c-iZ}%S z#>d3!18&ub_-jCXS}#~ET#t6ek|bwvuVR*FtbUwvq3O2CWLjj{4`#F1B)HHRIZs;x z4cs>>m=fmqjAD7&eS5iE7xacg@x|CL*>z=e)gOxQlIemibbUuWe`a>*eY3ZX-fzxc z`OD#f`3<5rii_%HDptA)Ud;J}^}HwC4ZK%_(^w;fVgL=Jys0{@t_p4!TXbiPb!;P2 zJe6{*zO0s4wKv#$6xezjpK9u>5EZSSrT=BVk=Q2fMdis=PggmZ?oC=`3F`pfOV(S` z0?al}NNdZVDT~04+OD~$nj;%4sue#T+7~$G3Y0G|L4Q~MwW**uFY@!@_x4|-Urv9{ z{roH&|6V`u?yu&h<LuvE3Em%Gz4s4y*r{-Sailv%uGQ`d-VXkQfhNHP!O~z6m~$FJ zufxycuhBNLX`0=}1n@doX8UBBYZ4e9YJ=bmJV1R)GegJfZyJ^vX6gUbE>u;Mp;(#V zSaf&z1G|YG6y6xyg-GxTsvK=y{TN+KwF9q&>SHfLFNg+yvA2$Aq$eMIrFax>#AS1~ zbj-5j_Br-bj+QQ?XQ;1ous1a=R6Tqo5{|VHyn^!pAM9#;R?G!@z)L}cFg-dL&<zdI z>5(7&A^tzWhnNHM?~~)_1t*2|QIBY$BulnXWz=mpUbW0kSdr8uIU%XC?W|Fxd4Qir z%c0KTIbIY6L@Ch5#*qSW&a8<!KsUZRp!ijnhGg$lv-MppyAv;`h||(icPDN&)llb1 z#tGH2vs{E8O*SLO5N!c32Vw4pl-ww8D!YjpP7NhK1e|`--y&E{)(U;(a>6yjqgfTR zmV6UX`;NGmJLQgF_GITC_Z8pg;34o+-o_<Gy2lR37eY8(hD;JK!k2-YMjOR`nMKkN z84+(2Y0huv`$Q&yCbk%!imnx3l{)ZavMzF!!m6C5%2g+6wYs~y`uaZln!2^BEJ-=k zJJi4@t7u<zBd=+$KMyUMQ+C<)B6ylh66_HTmGlEQ!)4MD;<xZYZnkf1>3_MtFPA@H z?;RgAzYY1_*Sj&?RTNYtfK%;4`5Dov_;T)FDkr!wD4;Cd$#^>vfwxoD(u(!t3_hd8 zvd(rV(VF}$xmn7)l**}pr$mz`C0w>FHl-SG8YD*6xXOITx;b%e%KNlY>5o&>lR8?w zy4TA7ID!2}>j6gES`3kXleJLxRJBun!{>>7aV6J<`0lP&kzd@ssNt`Bg|31|`KNzg z|K`vB{P|s0x6ezm>wUN6-~YX^;)r{d|3t71<X5Zte|cMa$9g;ZZu>_BUlD(jGszpo z+hCjEgWx;z?@-IAQ}|r!QRV70&GW1sZTZ$kmVZoUBW~EPpQ&H2KcT;^AFJ=EtE3St zZTNc8Ou>@KS@tV4JJdS7BeqX?NnA(XRF$g!r6go($rGdp#PhY;s&qDy8wmMQy(`_# zU2~lcoJ*WdT)o|^Jfpn-cn^7pdWGJ6Pe(BA%L%y2RiR4!l2}W@IH3X^BU*y>7M~SY z5g!*-Luv^0u@wFqJ1o>Aw1ZXf!(wj*=a6|K6Cf3OMVGKg61kjE*>yWjTdl(qwkCM2 z2TT!dwt|r8M5_Sp%M0ix8NxxxU^EXMirx}-7ntI0VuRwd;6@lFd#mvnpIN^rV2O)t zlgwT9n^Yfg7TbVUL)5}8f^PANk=9&2W)_(W8a@yF>w|ZxaqKAm8{iT>4%Y<dh$BSn zz)#<8-wl7~po{20ndmgS19gqK61eP3@;34my3L-N-c|nYWEb{mv<rL<)r#Yi>v&K$ zP<~OCiZ_!C#5SY5geF1T*ipU^&`dJJqa)qoU*Y4TPSPdvE~+mYzpjy?yP=!@fwrT@ zr2eA(M~+E9B8OvB*bp(*x7L+l-%&QN)K=E5V!X4=b3b6ALtH3!NZ1=2Cy9v%qoDIe zwRS%E75bKymHsj3Q|oW}MF#JQaH6P4o~Y)Oqws9xd-P-|kyHb^=6dE}^a+Z|8Fiu# z(;e1aR0R~R6s?psG|vokZGWU<RlPO()cRV3sPZB8U_xtiqM@a3hqjtdW#CMD+tkGB zNnC=)THlzaousTTTOb*XSph4?g-w-a%bF>4iY~H<_)lbfJQ0ACTL&0-Ye)0)+>(30 z+x&9pJ^0=~d;2HogXi7k_lrKJed+c6K*6ZeET`JPkLX3cr3$Eew1<8SvQO1Qe=$$! z*VG|0l{gSM<B#~o#A`Y~`~zx+4VLfG9575aSGW4Co2@EK9n)0<sn6F(^&&%1|5JZJ z@70~uPEb4LM#*wv*VulrHJZj&<sO8aMNdPmkz$cpoQK^Kl^_RT6q*u+_;2hk#zRs8 z%y-&NIG;IK`z1SRf9-%=jokU}AMVZW<L)d^Xa8<O%4BfuBhBI+;Q;ah+`~R%$FWt| zBrF-*A-abiLaf3%0#&?DG@DNbUkCU$5hGxrPJrqP?}^H!x0Q&#qvempyU7{JtrO;& zBAQcjRy+f(E6jvHz*Uhqs0MTZUyI6+cJSc%xyWt6Op)@67za0y6e*2{YSv?kc=Euc zPqsXhOlMPGkXo^0NV0GYEP&?<;_=y0QFuDjn@kT%110{oflt95<P18SsT~^2d;txE zX~EioKK??V80_Zu1_zN@)Dv3DT%#XRy~%w+yZ@~(+c!EekZd11%~yv`A~(e!@M-cz z@_I6%bQrb)IV?CI^YdBU1@=FX+b-ds$6muiF)M$h-EOklCL~&uE+!P2GjzrByVxJ_ z^4K|E89vYb;#A?c+(mXegOe`bXV(>bCvbYyyN3IZF%_}DL~&fK7%gj!N#dDQFURwO zXF1<K4gPfFi}`2i?}qLh^xc>e?JB+{1}|FVEmS@B4KyA1#MGcaTOZ4p^u*iY8fka& zd{HAnbsd83#+Rt2rlyIb(>heiuJ)^X-|B0t)~>8g-<!HC<v?<?q@D>uOIK4DeX?e# za<iO}EtbDkY*3BXIJEtA-!*%cv+?OzO~fy_2}tGZ0AVN#G%V-DPV?77r-)-7ykc$9 z*4&j}_kOm2oc=-j;p~UxPYpjW$Ugox|NDX55rqp&PCKOjT<SUZGI|aYf`667_*MRQ zD1rJXkl?H3o#(q7^wFKe??J+8inyQbmg0?av+9X@q}B?y0XB0l>pR;GThubqv`ar% z^Il=Z-;2{E2k^~``>F!9PE%9eQL#xp8OjM=3T$!rbqumkaLWA4L&u=j;+pbCplSCR z0N{^>*988yuPeUzi}_Vpyt(3yTNjv5JR{l%=lRU;DUKI*sjI5L60<*A6@eu;@wd21 z(iySEC-arUL-`Fcg>b64MBYI2TKigEA`6HX3w)8D+$TV4+8OH44};#JE%Ak_7J9L{ zs<l1XB5yRD)2vZArJKcv!8_uN_?6_fl#)J>q+w5l{h;~L<$&7Rlz$ZcBv>WNk!C1- zs;H)iZl?~`4bl>t4Vn$=hsu@mE_i!M1MCMf3Z4l~i64kDk!|6@Y;(Zss}>r-{6jg3 z-oa`9GoCum%!=OS)hcQ`9=aZYn{`jRf*ruG0)&B|k=~JHKAl^_>>#6o?taqOCy+sQ z554E7Krm{Me888=>f)EhIcO8%M`(6zX=FQJ#@CIC<Glr~5llQ?_EvRE*T~e+Ix)eR z__qx;FV$|AIgoYHA)%UNA29D5N@g+-xb2Zg(esf>+$-vv|B}0s^OR$ZYo{-dGDi-; zH$;=M!^oXjPo}EpV{x5a;a7Q1;M?u|Ii*uP_vnOJ2C^9Yjja%^Mc%^y0H(~p0yUV9 z>BKvvm1G-bzX3&~SlkUWiCzMJRe#Vsm}baGn4Pwus-otzT1mA!RZpuNOSzQT(ALN@ z+Vs>g9^^olYR;?F%I=E&iaW~6>SdZ8+8Vk%Evnh9D3W|cv{1K5Hur<=$5n)%M0h|4 z*%?{D9i(i&I~D7TX6EL7{qd#Y=WSW5vRqjOpND6+{@Un!^`GnW0)@{@?mKM$=Jc2F zs`zrazVN(YTZ{^y3w@#{60ShQ;4yMSs5PGvy8^Wrt`{|su95qdchw`b`8u!ufWc(E zV60)PW*TCQ>6hs?Xl5v<;6m|ZKoc#HB*_*l#A=~-k4CGwgx=(j6NN5mS;?<Og;$Fg zyGO7k$a=*AU1wtx!)#Ru{m2SD=8}O0FY;a%%q~7>XS`R5*HlaDZEzQ8rRBH=dbS0A zGPPqD(5W(=dXVO*vRpD!D2u%fPv#DS<g^;PC;A{S1t<3Lnq-AuQZBq0`@&5IJ*jS? zHv9~zgJ_Jbu_oUz0c0;Tj4rK7Rav%D{0%f-Yok4}dD3<AWMwnO1?h0~aXdFH4$Yt* zkx_a*zf!1|Ez{mN-LtN=m021Yr)c)e7f1$*RszD~Q8a=z0we<zUk_f>U6BfCPIM)B zH5V{X>0Bz6x&r2we-Uu-m2Zw`i>s0ocG&DGc8hbc*F!XCRguQAD42zhiROpXLO+R~ z{x9BlzFWbgbQV`BwiUiCdIA&$HKdQR-AHpmIGVw~;@)$i@QFx=*z@=d!F`bZcqhH7 z7^dO$+2+Lwcayp&owWAQACr@4gZKmP3f+v{N4z8FF=x5dNG?cmR%5;7WPf9KZAVl4 zZAWvDG`O6h_><5wK&ib0?c)2=8vjaXpe(2O*zZlnv&%w`!@e!lZLUkS6(F4+gOUMf zuo9p~zY*R<$BL~uEjujlCI3Tq7O#pg!M(C$%Kq9@##GzX<XGCo%0sIds$i8TrFTeu znbb1jjm2nsrXy6#<hAiMX+Tn4S|D928=-8h6&lZ(k6U8qFGfVSO%cR;3X1sIY${0c zkK=fLRqQR`VxH$q=w`mT<(UQ9IgSq#-&}n4?`y^ToGkgbtlWKteSh~TLCO*<6i&Bi zZ}1Xxf@k7Jz{%<%Y!5kjo{<w9yt&Rd_V!?-Rub42+8XPH?!y%zi)%FYGu|<*GvLOz z#!S;Y(-5=UoMl#;X6g!+)A0#dt}sF1j(>r+0s?iJRHvw^>Z@8I*I>d}7ix^VRatgX zwIZT~aQ#c?L8#QEx~3VZF2g;rl>N(lt9*EI$KTJ2JC`?h%?4-36Vw#)OyHfjq35b+ zw;!f2MtYzP<=-?J`VqR`s$9t+cnfa`710%;wULu>ilj`Dt1;;oX&x$)r7O`Yf^kt- zcuRPB#0u3!zGLsDaaltJtmr8_E9r`L02F3}c$&1eT%xM3(Q2n^^s1V&Qjr(x%Ku`f zQW?}D#v2|h@QBNlS9A{yI}IOor`5CNjU}xB@oBZ_iMScQS$<o&6|fa*sej5-B?3eh zzaDNFa#C?}2sM%J!pvkI)3vFu!H`esdE`9cc<Bf`RUV5!mpH|o=6dim_{!l^p=7Fd z;H5|8{@cCFS3x`uZI1Y$O$aF}!=_`HXfPnh?-Z<nX2s{l&I4wD4?s7*&Zh&WUP|0A zxQF(Z)=_@dzA`Sc%(70hEHzfwwo;6g<RD?Fe@qz70jxSH;PPFK+9IF1YN2t|*kHC7 za=9xum#0*;a}0Jj0<G*kmXGuT?uvGRWcDTelBq@1@!fF;T|?a)JO_M5K?~D0JR(X0 z61EYrvf6_!)Ta0+!9`>mRxIftyRVR{Z)g^1&ua<oD_x?Y)L74=O{kQ7EwycWS$aXb zHeHpvJ~3k60(KvV6~}Q@G6AcE(IE4^RJu~ONcmH9SZ^}UF=EDhdXJ{2g2HYK1ktfz z!@rU{4?4?YXbRw<kB92>L&*BhNreNx1YiAp?0=B<=<Tzn@6P2sD|A+rdV3H%sWEg1 z`U~}e`U+AbGCn(66c0fMA#*H)t04AxuG@c?buJTBB)j?tu7oskRCEm7gW|^h)(Z)m zqy@=aQnsZuO>Ukz(YDyq%Q#cBKsH)*2oivuVk*%wc$yr|Hi`{IW=O9nJ7_Mb;?gjD zH+-F(>Z|20buI8E(Vrt@h4Zj%@qMf+0>wP^QEwG{LFw+&F6HTtOYY8oBA7+w2i1Wh z-)et9A}#bHdJA>S6ZJyNOKS&9k-o0djFrclu}7&P)H!BlxPH7QvQeA>NFF}116?3w z0om(3G*)m{D8zb8XUTN(W3mZ&Yl%d31nvS|j~|6rz`v1AST$)qSv`4WkX)H2osM-7 zE{zp)y_g<UZK?+&=i9+2q@6UMjTM#;)&rJ7#+{le@~V=fqBm%5(L8LuB!(06t%^PJ z+4xg&08JIHhqlG`0<L|nXzR$(aA7Eo?oLeg7kdV{E4yoYa=gF&{Rx<!7ecw_TsU-$ zK1?(P32?@-(0<*1(W&xI38pc}!UJMbki~QZGT$(S5-tGbB%`pUurHwLMg_H@J5iLs z$<7Xa0#!IuY_0ID<cYGbe!TgiHEJDcSpxPwD^z;<C5cru1ulvC_}g4Es|x+W>}A@8 z8i8ipa;_1_g!a?5iJm^6>nXUWtaA)-E%jCe8-@-?)Pik*BD+BFD%yd2M7aVTd|GdR zZ=r8fFhosetMbnyeSsO{CZNar;+^3g=pD&o#c(ZVqOFS))k&KZ)>zVwopo(AHnmUn zTK!e)G&Hjq5}qgimzZyxXbyrWQIhPCSS>n$$Pp45hZRU^MT+*b;g0#R)omSa(Hj#r zu&fC>H->Yk==#(KsygT|KMR|p@hBjIvekkM?8OD)?C$ULUddi{c-#B)jocb#BHtQ% zRCq*W5r3KOO^+mQ2VMu<!9ubZGZ5tHf3O)$C*m(J?U+@rDQi%!cXs#RV;;vQi3nLG zjZeSW)Y}rX7A0gRm!-~0U!Q(5^-|&wQ#*AJu{QpJF$EU5C1A>@bg%QzpesiZVOxnD zaANkU!g8VXGCEGMA$lm>k;~@J^Sh!)0JE@Cv?l*28>5^7((}go+n!;+Y=7?n{aR03 zKOC$@90L7>V$K?GhyKK8YWkZt+xjF*6V{rJt9M9F2qNL0%qy^uETWWb=g20gLRgFr z0kp~W$SmO<cst-1)<A@!N@9a_Bi>uqN!AVTC)p(WL&!lB;%|X(<YXKZd<J`oiNH>= z1o;6Uhlpr0|CQYsniV?D_T%rz@1RR%&oryRF7~&@ZoX<<sdK3I%Q1YlBvo=>a!)!J zeA;G9-%6H>3qktmknkd4<gSC40-{zPR6qVXa*nIX%p?tjjJQXvAtfLIkVtJK=MhAp zhd;-A-&4uc#6x&+pU}U}U+Ui+coG~)ex^v;6nf5D`HJXkXe!8p2(W{IW&}hK!kz*u zS}%NtX+&KlGw9ds>u8~Hsx(J+z#s$(G9;m=#j6jfn#=l$JEDNx2=$D8h&%(-@s;5Z z9K!8pwcMw0>*$hrK44RKi4Twb$2zF4!8*SB9-YVU?GyY#gI;C41w0%UK<y%3*dtW; zV201_PIC|QfCdH;q3f_4xwBz3@-^y>w}lb3tym}<19nL@&8=+P6CT^V=F|GmU{0JP zHUJ`1E%XHT0%ue`438{b6BZ>ruzoYO)~BoA$|^uMb(ZL&c#EvA`ak_Z^Db+KZJ%|I zxuxN~`kCw|R$2H@d>bI2^@xlF+{Gi{96csFjIRixWXRL7;#$$kylFogfB*44?`Nfg z!@n<=uX0WEl?GzLdBjvgNvsS$4Ri{013RpY;QQc;;BS8~?*JEwjaSUIuW@4DL%}zU zF+xGjQHf-QOs#sOU1qdd`z2mZew)%R<-f!gmRfqV@{YJKJR&kFbf0_|<br9`&d?3M z4zvSVDV~Ry%4W!_OM`$6vrKR&-ZM4`*l%XWvf|gF1Av&nJKBgJ#u8NXV4nA`yRW;G zr`-G0e>pgv+(CT=$)JAJR{A!3A^JdAPg+IwpH2_@#!;<bF;+ZC;0z}+2g!kC0d*_1 zoi{><5T*EnWH!i%brJPL8p4yH6Ts*pg9id0;2Z3axI(-}Tp7zlGT;`FDt-Zw{@29| zpj+@^Bw0j>UW;a<I$;$kBWebDjzp0De=687x`NkL_0V3|UDQ3+4$vG^`4m^>wdIrL zM#W==K>1Md4fJ{@f=_@$FtCHf_$VIdp^n17=t5B&aNf=k1S6H%$K>%q9ngrc9{4YK zl3YVyXZAB%`cL97zuV(>eRl?(z1_FHTLV={8J)l^1s(L)fX%vr+Dl!gvqLAs2cw;! zZtxmFvyTZ63t2!9n<jV%{7uUReT7Bnb8!wXQo<UW?yIg2xN{N8ELo<6MAL;+1iv8# zU{S7x=EggKv&eA18#gAj7(BB}xgXIQutM}&yk6qPRLH^@6IvQ%-Gd!<>~|e`o~y)N z_D!@9S`AK;XChNsGc_h~**n_vujiJpA<>z+&xt`Zzg=uF;81@S3>B86?<8X7PhD5b zpNUtJ)ya!(Jq>>=Fl;uokxv6u-OrJA@Keb!bv0AXgcnJ<Nmmlyo15xys_x1jNyOrx zSfZpU-dcW6F<DunysUbozN2ZQ?V!D_S)*R4TqgS}=8+x(Wo#7Rm;*U#Kr}GXb;-&B zji-yfPRYtbRo;f519Ddt>?^k07y5+M;?M+E8A_)n1r~cuPN}`P;vdHgcY@y@yhhfh zGRVromcH@sOy@DjCueQ%9O5H8I6egZOBz#j*G$$O(@!*XF%B`cFmE?EG1oHHF$6%H z{gt=`ZXX@NUZpM*dx_rE+R!KdIdlpgDpBDdq-`WJY!0$n@FpgTl7Ne%6>JfXMwf^_ z0-sG1;)DW`2>XmaOfDo;fV*^+$RQRJw}M%LHi12XE`a6HKm03x3Kinjl{3^M)Lz9o z=~nb6R2Uf)PT~e|-thY9T&NIkjqC<ioUTF>d=84omPD6F1_6Tj&FG3)k9Z}J_AUhm z7+|6R1kVuEAJ}Pf&?@59(q6JQ@*#3SgT(7g?x6Ptf>=A=!wn2yiadg{QC7NGNo%I) zpBlay-s=-}nVPSvM}RjxR+*yGsvoKUQ6Et)Q4GbGVhx3g_&I(PplDU%&T&t;_FQFl zBqOBe1>5?4-iO|!zTtsFB9C6qx;PhihdssQlefX$q0BwcUE6cSyV3tH_=_y1GO1I< zqrgmm*f-ZN40^~E7LP*kT#;L%m%WkImi;5WCq5#&1sHWBfgS3C=r2jROr+|r>8Uko zOF>uvwtO4@Q8HEB4jU@^0th;3Xn}BpfQrQc)fDHm!mYusy&|?qkR{xTW{5VT#qj0W zOYR;x<3IKky9k%kdpvNMTFoBd!;vWwkQfMQ>E%S*z@NS*-j$wPp8ei_;QzD=HGp}^ zp682V9pHb_36cYHrDnRpZO*o$wsw}~hIwkWtVFa5J_LL_zSsqUQgi`-quyg|1Y~h9 zlLCo&!g$L`AR#=eVO8m>3Z+;1uQFRPPu>==0MFx<Wm5SV#WUq0)pS){u~{}jvKcLa zXntPkFnKco5*VI7ZrF9zQOVx7yg?~iT&1YAa7^Lz!d6A6irbdWtS~wbIP1C{o>jh! z{_6oMXagy)Gvr9XgWF6#C-;)o$x7q_k|s&;>j>2v{7t<4&UhIR2rgFK(H=3?NI+A@ zr5#VZlhQHKV-D-)DPK!G$S8p%zAV};GLXLsTt#m=JDbY30iR-rd1>qq=q-E!B)@31 zBT5PD!lOYJd`N6+EDzXwS^%HOji@P7$l;+7SsZBO+vefjyF6=sw}UU~rs1uzMsOa| zTGU#kM8(4U5b%otUhwKz8?f1Kiu4rq6X!{KO3z9rh)Gc!6b3iojnM_XBCO^{0WVH} zHi=`nXW?@GENGe^2Gsk;V2bfeG!<(DavCYX@r45`-Enb><Tdbl=%ryvP3d;&MX60n z0c!N$qTZslqWXaGGf?_j)>)aPuA}*^S)%Qrd!XB(^Ju$i`)eku`pORh{%Z^28fbR3 zRrqk|A+4j7M5%wIFXmnAo9JH@2!dDYFThke$}FKH<VfN)xJ7L7w(x3v$H3nE6%ix} z>JcEtZvZ_cEtN^$A*K+gi0foFox`?@yo)yxW{9qc>q?&juEJZ1N4#2$f_|b_&V#<d zVtsETY?^QM>F;VQRM+Giq(3kRIvFX2YY1A$<<Se_B`g+t#M}$*;SwW@;_HQHu}jkZ zcopdrkw?%fQiB;3D03foE_7<#Vej9;9rPEraahPbr;i5LcyBmcR4gr}ixW%WGMT-z zYohnxKwav1hzYNbJ%L|fUfDYJY`qF(w2mgOO2ln%jjJ?Svao2g;Cyr*;GK_x2a2~U zcNp6x=_>iFysvV)(zaA4@v~)%p|19}dbVb|ZiS(Z>8|;{<%OlUd9dNMrloR(?1<#6 zXcbZma9d&cI&?WUBog6zhR%}$f3fp;*@2?!`A>cj-)ent{<CHN<X@AE8<lOZD6r?- zHTHECzbX*NRObU1=IQ2b=9}e<g2dtqZ_vBdm*n^P2L+pwQhFaFW}k5^zcw~qkcJjX zS}M2dhM5l~%uG3&Zme9dQvcNci66{f-9zPesaE8K<pLS>GCmA?C>Shk26(MY;Y&~j z@MBy6nW1Wc;2w;ifNOaTJ|<i)Oo4Ob1ENOW!0AGD=|^OcH~=W74TAIh)w~Z~=NwDy zAMCiRr>_Bp^Q3^nGGwb2(-j=P9uvWzBN8q-RKe)j9pSDqJA4|ugzr^!QC(JTQr?lB z5lfMk@mBnnkQj8&n=;M0-jVOIY$y}3;3xmjZX!VPQ3tk35|y5obyU<-7AZ!^YvC`% zy+mGNNZ^773etr0(aG2v@qY0Qj6t6Z?SjFADe!aT8RnBVRQ#!)rt4(*Y#3?C)F069 zR1KA-iyNR1g$N*G-vEl)QgBwB!Bvp6eT!Wy9fKTyI|q2A0hnqR>cCYFHvwep*6a}G z05yU9L6j4tNtC)xji7JQL+MFi7c-RD6RZfV4A=uZiPm%rKp(mq?Fa?o`)E~hj^vKi zf)4=H({HlF3WM6Fn`9hm>2E8sIjxJ#kMwG_7gu5}!TaA9e;Zv8iHF;AT|$%TbSgq> zX-()g_fJ$Hyd|zLU#uLiY$u;Dkt3s{BbXL}FYY-`nRBkIua^#tpfZ^%3{CD2y!Qy4 zyUMdbFZyUPUfQ?3j-$J~y^jcNAQv+2!@&50ERbfZG7a@?bn?cus%dAFj+v`yRMO?} zsYoqu3E;gxi`_v!;^VY;E&0j5^peVGm4}tKrM*o4lrY??wD`?yES;@|R>;=ddfB|n zI6}W(`%ryAX_vi~bP;ucKSwKZmnn7ds&A>cp?8xv#dqCT<{RWI@jP?2bet>iQ98c3 z?(aa+mEUzsBxM)NKU6HXueQIa*jV1aY<p<{5P5hz?#}S>fq#f@WHR}aC<UYoJynx- zfQBO!y$B^DJ+Uc(<9l4SK|9ERo0nLJBuq=Z4U&{o5_royLk)E`{3Ciua0_@(ZbY5& z5kguNlGK$olTVdRl3W10PJ6f_)DP?{A!d9?9PSlu4>f>u;aYG@s8X~Ar=|x7r}~C@ z+PQ1EBktCqvuyQ+JyYEyT&G;~JTLtxs3+keg0WZ_zo6)&{3<s{4<Hv}A314gBZIO{ z_{VVpnkY?DbX6@?36x`H9VG@p1JDR&#+${af}VGyC?9PRzX)}NEr?d65ECHh6Oz4@ z<BIokw`?U|DrqY|Ao_`f;F^N3@q~CV)*mD;GU0>BLs2(z9w6_Y0%zz<_%f6aTstqJ zrf`2mgC$AJWjNSPjZk+1Y^p-J373iUkvu_{cuKS(KY-gFN@3Cfx9lg`kD_RpeZ+kT z*8t9;S>ayX#gK@>=#$h+>Kvt}{{uZ=FSDH4L6g)ysvGznV<;W7i8b)ih%$C6b|>~E zx|grVy$RVvzqoPHBZ3y9hIpZJg!Z7mu5p2BlDV;EwFR?`Hjg*;Hn19>VxROo>VbAd zC|1cBsbfT!;EllaU~O_ZeKXW9oE%*S#f9&H@3NcZp?I|@25aMu`B~sIGbw2Ej|1EM zVgBKPk3lK;9G^>+2Qa{y8Sg&g{ATx5%(0uCecWffCH`(86aSl|W0Mg`+DS=hX`{j# zvE4|JB^<Q$G+5Q8cp^4IXb`l9EP@-t`Pe@Eit?1UD&Ty{ZFdqxNrvQY$yrGs5|XV8 zOf3vgb+5E{HKpnrnm@H6-6j1%J)vEsz9H`~UL%+tmQiheW~ZgRtmJ*koU&gP^_(r; zwY?{OQPAkg@!;<MPN8G6-EP0)tm_%$+vC6PFZZnm_qgfK8x_sUib~Q;vGTeOohLbP zmu${-0>u4s%n`aHT}Xcj)#QugbI=>oe-xwDnAW5HL)TM()G*AHVi{=NWPNOrnfn|1 zXf*OvtfQcNq=2mkc+QR4hJ0>(68c)oD8{KP)MHgyvVX94@ayQ6a28Mv*Jk^35`G~t z(fRnaa6zamy^#n2zUXGpd$1|b@OZq<1G9-dkeWV8rUSY)L@lHXL;LtWfTB_;t*^ML z%up7}c8iU|H__kRTaf%nU`=67^e(gnIfQMKY?h|uC-4G%3%*fm7Z-~jBQJmztrqZL zh2y)R{Q`qff;PqKNQOvfO5aGF;&)g>Q6};j&JnB<OceA4tl$NL%YvuC(xVebk@Z+W zG7!(iXGr@>I*MVe8`>LmKpz8FR1M&x76~Nq9AOPKB6=a7E8UGR#vPKO*i+;KuyM(t zC9&$!osm|Nm3+G}%@&1drWW%b?WRd)HoJoRlgnrI?7Ywi<}Z3bIRnrI*Z4pCivq8R zM0$GY5O<r;ik8MN2rj@U;5UN9(2Dr^SW4^;@Kvph)dKX8jYx?IkxT{8^S5{l`5EO3 z4XZnASZ&;E{02CP%Qfp1izRxnmqh@DAc-;4bE)rSe=?0+N)Drj(;VG_*~BCO*Wp7> z%0K5T1D5?1;2M|{y%M>=cMKn4GeX78{7`3hK6@{;6`ZJ!QCrCu!J+;ao`tU4j(hg6 z_R-G6p7z1lj4WCoapEns4b3YPMkFVuUQd0T5>LElIi_Evx{aT}1|tE%LST(_$HUM@ z;S)?GU!gf*6x!w{ZBGfMY)!tAP}g$Na7BAsy;;>xbx_q-U7)T7ngM&&?NoQ<??K}U zjT^W|<R9KlNB=TcajW7+CF{zL*+uTUzC!_Duqv@Qm>L-G+wMtopLR8NFZNvXj`mIR z6?h9gr`*e2*TAW(#CgND)ji*{#e2v%-(Ndm3@#(4QCAs1n1NS`&WL{%j6zfxB{9nf zsitb17#^AmEp2QdA8uV{K5yu&{Zly+?~mOUK8L2pfMEtWnexLLVEMQohvC)8Yf%gF zdT}mxK_o-J!8T}URL}3`KC*waN?;y(0ea&Qe}n@me<~bY>R;yV?y-4(d3yPh0_}(o z)TPkQaLwq*cn?8sA&*QIb;3?y`vK({6E#Nka4V=%JRZ9nuMBp*$!Lz~BDNbi6Yq$A zgYVmfEd=Ll1WZ!i3myOtf|VN_n#_!5mV{{Td9*wHM6@4pDq@POinTJCq$ye?SQt-_ zd7_VE)1XO!aQX|`iuM)BfqRYtUgh!VbEF-TBRm5fhW!9DKMJPLMesynDPqJPOA2J; zRXerw^yl<_bidVkU`H`l+#US`j>p$V>F`lD!t`Y_n4wH2u+ml!C9?T!O_1)p&FR3| z?JK9`N<+<=Lb3obzMFg0p6cGXZ+vhYHH{q;xgQt6MZmssJYF@jhCM-7qvlW>nO@;( z@s{WhX=CMOwNdj6Om(`+cgl)o3dLivPlB|kwbivt)vFbW(kloYPYCBSi|O@rPi9zX z6MK`p2#jRa`E1b7tP2P;+rriO*L+GuA9(?2kQafetb#8O``N9`IO-<>5g&rBh?d}e zQIEb(f2aG>-^kg)OTJ7`UH2IGU60&9k06=Rk!kQv@eRcn?FQo>v(7Toe8<>9-&NB` z`9StS3O-lG<-qRK2Ur-5$Rg1u=|<&l9b*2|=1Q!ZJScfXk~86*b*p)cQEEulztY)t zll5}LYQs1~9eoQ;WqET^uh@1b=C9>$=78<(>^mL%Tmo<(&jY-0kddZVlW9apfczih zmOAIy-4&DVs~l&Xy<D|i!<}OsUi&D=HmB4**)!hz+xrbn?)Q1Xhn(l7XQs~;aFS?9 z9)_YaXreF)li)8DxoUx~n;r!T)YpcehP{Tj`kA^*pnKXz@e}_~0*hY*xAy-VR;wea z!iRz;P&hU|wilR#lb{n|rZp0f)JDXw#k8@9(MRC?&<lJH7Xl~T+o&b-g7Y&s$?Ada zo{rA96&K5ERwOx^xqJHE<N|hT<V3tF+z0uB?h>5<w#H9r2D%CK{9ePY;jX}W2i!Mc z9`jptL-Z3pfqVuYiKEDU)Gm4oav@JdD-fN4j&Ll@9HwF*|9LVzApQpFErpa-HC?oF z%~FL{k`4cg3}8{FI@6QA#plFfWCxZm-GM*F8Q^hwj(tW;h0WkF)CQR9bD>`X7kn4E zFSZ~p(OV*uq=zi7JffXz5Sy%~)rR@nQ_4$t4%P=*FSr0)qkVvrNDJOOU!(VcXK*Y? zhyTfrXP#1jk#~uXL{DNDahupjbS6qc;xif0-qV6OQ9;gPns8rvPqZ5__^RUSXoD~w zBFQbmV_-TirdjS%yaswx@=n%9(OgkqP61EBV|<2Oqe|4i&{sFUG%VAdSLtN4u^Pe? zaaHsvUyUEe-{bAT+}MI26CTKoVDo^n_7Wg)sQ7M?hQKCW44&aTBD?uR;VZx@I+&$H z7enJhcxWCohZa*qh`oVtK9RSUd$Tjc(aFB3qCthoKGHeP`;}<SRfcL}XXUh}(6Gep zwsf)XvD`HI_3tzXmGfk4B_?b>dK_7fFh~Q@Eb+hidu1!#Dbrb7K~h#qgVZW1t&{2| z{9$cjnQXS1`<P#tBj(lS6cevc)DBQ?mFm#Raf*ZJYk|7nyRMne>dwEMvs{0<e|s?B z4_^bn(ZAWZ*_-A$>YDA00%t;h*WZ9CImg$}Kgz$>r}3_KS9W!G>OhnBwkyRmz$^6i z@vR4$vu=K6pldKnq|>)U=fjeiM^Ia|5#;bMX*wBZnk%eh63!+3XL}BE0zY+))br%u zBzr_2AqBR@BS9*9NAwl=gsv627s-o`iVFqPfsyo$@RM+<@Eh>;t%SPAH^u74qS4RM zi{R&)6IsI#=e9C~Nw0sQr;F2HL6)zm=;06oF4+cxXQuEo<8R=>D2$y4&(wY*8d)Mt zgPRDlAr`tU$cEF9PG|syMVnC<vJLp;g2+;|H!vA45eLNm#bZPxgiqo=ehJ%z$);z7 zZiTh+d|{^8i}UiI@)`IBKxIjZvwTmmuYVlb4~;~5$#VI>$}@nIo+Ez<_L%dLM0g<d z8CcT?M&Xz)UJuyfl)?mbDRx`38m}WCt}IX!+F^hbKhyACUrE<XeOI0eXf%D0vx1KC zO&}9~9@t}^aQoRCAu)Jf*Q0w-x5%!fjHHP$ctTz$o#Z<5AEG2UELc0ZHaM9Gk)4=w zwmJU`m}C<`OLrqXke*D;2t4yo4U8qOfnJd@u0-aEv+%gQ8DP5aSIt%L*TA|>`fS5O zV?E<9K=-Vnsx7O)SRp2;A2-EXM8`+Y@=|_McmrTHEe-u-_AzIfrlDnQ_i*z_c{CN+ zsgD9X=su`dd=fAb*XC>?6J3wo6<i$n<)7)d`F+0Qz9R2l&lA@n$F+(x<)=aG`Kn`> zXH&2s^gOl){em}BAJcy`{jzwhNw&41xtVW#sI#gk$X$}(qQl4<;ER2Z;*x+YPqj;z zZR}{dVXb8QU}Y?vIby0|3K<WWKALM=Gi|bj`Uy{L^Q{G@m%1g&ev)<Y7``{<@P2lT zDc@0=QtB$bP+nm7I)}T(p2nWRo)aF%)82c@+r{VdW%{T1)BTry)qGdIncjikPu@Ge zNB$Xs1%Xfg*S@*lEO%{JBGB;|T^&5_{5yyeI*p6+NwKf-(*m#Xr>KWiqY!KAfIVx^ zgrY<|iAXqQ?Ev^sHI!YYA#@d-7njGn0EgfZaAQk{fTdE<AGjB<L2_tYyjuKfOdcB^ zeFE6eiy~Q(G0}#xI>7tQ1IysK*f2mMx&|gezo{cc-@pTJx;w?GaK!CKXJ7YepPX#P zZi`NacZq%iUkQP?k=Dn~2`57K=wx6-X%edtWQv+d&w>uKNZtmoA|8l*g*L{nMTN1d zaX(}cMvz@-3gUq5ktD7*Gm1)~8ZbET6Bs3wg4GbZKXhZ&BH0o2a6FOU37kL)TxO)Y zV5aDyw2?edUQ50nr^P?eYQkbc23!pI@3^>3(h5HY_+XVKmw-9@KdiEZ1K+DsC22?L zF@sKzXgjMo87c0H<i=M-Du<V|+d@Y}M_Go;0w!cD*EBSoUQDhJe)69L41_&C-baI1 z&~o2a-)vtiFxy(}A0PZp?qlY2`y%(^z!V9e7Qpe>{6W@7PXM!*I-!aDbZ8>_Q!-Ef zLwQ%#LY1hTthlWxQ;t_Z*W_z=fGOr2ZFlu_MPob<8;5wI$ABw7h06du$8MqQP*v`B z_%?qDOmv5E39L2LiaAdILHp^mz}<v_wCqeSpS#St!IQjp=ngnxy`-aH^V$x0e|&*5 zUn9>@@ElrIKD@l5Vyx?ezd18M`T@zqQ#C4MbITFy18ZCBL`%f<)qv@~skX^iNW<7{ zQC-m2;KVgSXChD8TXRKs#-K7Knd?~QS~u8U*u2&`mZ-^Z>}Hf0TN{5H=a?{)SKmr= zK;BiH35WR#S{lst^6tm3=T4I|?il5K3FwB)T}|C#a0c1p$?_ZkujZxx4*ur8s@@%* zzMfj1E*=@!KWqqugHwoLkPmG3&-13a*MaQ6+%?I4$@9Tm(~kvfkX30}XfD`BNd@oG za%m^kY5i!+d(a6CC(TQGlkm4C!!TCulueV^MGP`f*at>{VY{WE3gicV`z?_keE%@b zbr0+LU;I+w3O^Ow2yKSz0>8IVv_<qrG);68xZ2(c-2!8LE59UEMvz{W^I6%?;(o<_ zO8JT{?yG^O%x!)gbV@i2Z7ymkf`HLzEb#Ho0(RC#P!@au1^rp+fA}t`3xm<+@ILT< z`Y)a$Xd@J&^U=8=fvSm*5BsR6ev#*ztFotMU>&nDwh}8>di2XoH;n^y-IT*6lZ8)X zpTPuUm0%w_UGiSGQpo{lK@&y3bPaX^=>s2xJn?gYad{faK{X<Q$PBF5!$r@4Gwlps zLzSz8%+qbh62B&1wf$+Ts$C+Ni6LS4Sc~wU&~;#{-T*j9>p~MkVUW+>3|NJ;{GELJ zy{)``yk_4F|B-+MY?P-0m&1zSCSn13mRikxV-t8;bZ=}Ya1#%WJ>#dbL+Ak@WoRRH z^m%qy6cw`AVf>NYr8uKZR{g7jHBEG^VY|7N^^o-@XoNJ=n^lA)Pk1o4Alx$~qTiAa z$&-|e?h?Am8o}v%4KLvvhfi?xx$(ff4sprcPEH%18Xg{Yav9uKU>{_`z2Q&h8Ti7P z<y2o{hd<z6XQ%#;qpJ*$BI(vuZPU}^aUn{AyF2XS?zRwI7IzDayF+kyU)<ecaaf#1 z65^Rm#;vXH`R<b^zkrbGt~&b4uit-m_@4g#%FjF5%L_{!9fIF+Md6EOQPh<<bJB$5 zQpsBq!{R5zJPKcAuA>{v?S}5F4k?GSsRC}RZizWA{C(8S*vwKXaj$`g)uvQVY-Fr8 zdU@2CNI4=Qa%bf1sEyH$W3EIWiS&nFFplN#V<P?py~}R4bZaN@JGoUL6x_^zng2Nd zD^%ReL6<wE_zzoGK*1lizpyv3UoKf!GO(m+Nzan`C9g|n+dDYsJ8nR|5^Wn|{ZRO` z;8?-f!V1=5w)OTs&TF8|-NEk<04hOA#JOxk-9>X`1QTlmmd~DKA=#a9pj2qohL9Zn zQB5K!5k)IEq}tMYse`;19HPg{733dM0ZdN1C_~lT<PGYCbMPt9y!t_JXL_(AdzI_0 zF=@WDy%<c*Q9FuzymK5|tjF`e=CsMq%GT#Ew6=Hj@|FZoDI$78r?b)AU))2k0>^{< zP6fI()e5{WJAq3J173aQ*jUC#ox~~lGtL5S$McNBT%&KI<MMrfOV?;yVd0Z}reJ~f zol_%Lr|am?g`SFf9Mc}~`{{;BTnO3-ewf3gWHO$qAlxwav9u3aY!OU<>9%NWbU2;~ z{%tqNaQuyK!<FUN0LHC`E)4KkQ;m9amyojIY}Blnyx3Q<y<)aUt_+=LjM6@%->GZF zy8g?aH1`m<(R1Dt4m#-7Jo&C+&cE&XwoAo*i?<c8v(>Wu98+BLpiVjFuIe_qYq%G< zr+AFMVwkNq0w1S)>R#~JI|Cc<e5i*7PzLB1$dE3PwM;+lAj3*C6?!d<kLVq_ENWf! zikO7h$1$y=pG6E06-<nf$ppz4>0{u6uc>#J=O0hHcY*JVzkYBqXwNSO7cfCNEbHYl z(hsq(ct6-2yoWajUiou<1RRP#dQN!ed#ZbmffrP<V@Am`>mLQRa;N`Vo_X(Qx6I#v z&CB%^?zaEo%TruzmcbErFy?%`BQY(hZsM1?O)=Lac88=H>kCgf;8D;VbD3StH`ebp z$A&9Wf!MO~n-kI!&m?9feodGbKc|!s(>~H0c06=w=$p{hVO7Hihu;o+8B)*GP&mo7 zBWYrS?~==F-(?$bZCaR^KRma6&Vg)8_S0XLvwzQdk-H#YEr=+x79F*=h5oUsZIx}G zZ3Fa_^GbT!4UPuj1!My+po2w+3eyVj7M?0<UHq;j$+gFOH&9c0Dj!ict2NOvO5iFA z4~_Rjb<u6&?<X%yElABNot^M7W<t2xoGrBHW>Fi+b>*u(Ro2Ok!GCle=soTB-wCV~ zGvq_+O}M{KrX@FzyTMjvMpJeqlTBm__;OEGdnmFrTC5Pr1Xe_Y;sphx@|xuRlYg#g zQOQQv0-sT2mB}Oy{9SK=+v<AU5nRxg0>8@z&bC^9wsx+t8+1gsXkuXJoQ@O03$T!i zVtDo>yNB)0Ou-2X4*cd;?7N^oo8a2+4^>rWxNfAmSLoHy+7`2ZHJd?>OB2OApprL= z?!lMnyP2O^Dp+nB4LS$chMtS=fz$I;)kI#BYy@tifLocZIm`DFw(6ry%Pg-$KZbXV zER0+e*({=SnAgI=op`L7&HTb&Nw_*2l=W|jYsIQ!%V4HI$|t(7ICt6oz=q2z9${-& zve#bOIm6WkVyghS8-w?&_mFQSIFD5ddO)4<Pcbtn2eSPSeJVKUMfnQ?@zOFS9zCE^ zS;BSXM`-^M&g+qBp~Vo^CBhoH9uW2j6wKei<n4#?zHTc&lbuD)ByHs?!F1mro}aEL zm&J7tv>WuklmK`z!;I=5<V7?ZqVAPV(){2@|3cqOZ#VBz@Mx>+e(zf5(z)t8t2$cP zdz2h5PAOWSpOL#TXI9S8+`9RRMeRyPfVa_mbpkt9UnjI|^zpb=iEMKH<m|*BardGJ zh1amOGEC5BvBO~^5XS7|UTcpU8i$Axhhln{8doZ$6p7WBdKWtkSR>nG_s3R_83>L6 zV?)1$)C#F;DP?YCDmGjY9x-zi;=ALlXd6~&$-j{oQgFL)P*Je(dg1%Rf`U_dOLF#R zugv+J*R`;db)2oAqm(<<^TPcFe(S-&ggguSSbE?|D<!6qpT$pMc6hJwW}yf6__a!= zxlF(X=>izG2=+Vog6}R!I=A7u>87Py*r3QpF~y~R2i<}`ao?gh!rYV7O=o|S@_^W! z6_5jmf`5x$rH)brxH}&fhf8MVy6Pks@LE8k{tX_ASF{dI1Q)>!#g)_!5)%vuoy5JK z%Wlc_z}eAmEba+vgx3omf*RosM*~mCKux(E3B@#3oeJPXP}g_HD#r99a8<3q_2mIu zsXt@bq3<9Z(!6B|c9GBO0yR@z2lagrD*R6BCn+m%+;<CfWkv>@D^sz9-2_qks-<S= z+mP<&ar!Jx9Xf*ql<wd}x`^7z{s;Iav+-}ERliZ2$quG^5C&!u<zN!gLHUCm$ETUH zd?{UN!y03zX|kna=$x>xVWYyHgcgUSS?U1Rsg5v2)1T>tXRGz(lj7W9r$AqrE`RhD z`Of)7ZvikG+PH2wy4nZ9F5du(_dV=S9XEidvE29CzcnBRl7fcd<G|s-2hfb@92^8l z){B9lzq$XNue|>n_yBfNkK;H{6m1EfEq6`zEa@Q^LvMv`4eu6lGNMC7o$xcEzbx-e z>kVdI3h!jz;O}Y&xvQ8NxDC_yDBnJCYnT8|BaeJ%{rQ1@V!qS~JgC#u-AY^eg*Z4^ zBhbR%31WT=&m{L_nDm&z)vc|wgX4QidD}FryYPB}EB_s!X)Q%FiVxX`yQlh}NL^87 zcE7L}u#C@Qk0pdAw=ccC^wMNCL5wYk=wUgfOXo&VJlaA&qptKFu8c0#{4A_tRP&hM zV&BG&D^)%2ZJaf3QQY69Qe$JHwUN5;&mm3BX@<2R4*r%Ul!f#aPkOgG2bDw?&nSv5 zEX<G1f0<{?+mgS$fGhk`u(IG;fea}6>A=Vv=`^@LxR$%Wfh*Y%S1-qelAbokR@1i2 zcFtxizGlT%*80vm-PQ*(=RMbauL-)GedHxBpuW?8vI{gsTdZe6C+!2&do7|3vC+T* z9u_?yysYJS!!m6ybec0sWhGk9lJ)>=F&$=7L4O<n15m~NEOF#NEYVfDE&L$imw*Mo zrZJliItbxv1#o7c9yA9I`Koy5!91*?eM50fQ2?~ufbik0?EMtjB#l?rLd|_t)u`#< zP5f0U4IYfI>E@iQVYPR){Qy7GU8tmOp>Z)MsITZXSpe>vEdl3JpcKoTJW#qQ76gX| zR|a>9SL99PB((+nF*XVF^>+;#W08KgFbU4&1Kc0&MO~>|Oef6-Z53T>{XM;)=Y%xP z2T*c7hC}cx^bizj>QWPE3p-siP^fH}Y$^pzp)sLD!%o0vu1rV|b7y0s{)aYQBQiUv zC1{^YWGtsk@4%t0Yw%yt^d1$k`gi*Fdsew7IHr~8Y&Bum6|@!tHfVxlmMhKk(0j#q zz`rceAXpe2BaRS%1%C^k2M_pxe!nlv_q+dSz#!!-5(;Bpb3y*Aa7N$7_}bLbGAE>e zXv46m@D<_B!+#6g9kSRw&UjDXLib49jo$~FteCn<&MOb3++cX1ldss*)6>B-)$`cX z#QV_O$EWu{_ooF;Lx(vkP$MuU;DkK#JaESE_U5{?oaG#!N*;mk<=@ulMFWZ^6n!k3 zX6;%$+ZJxG?%e3czJY;hz(!uJF2h&YFkOU2ifB_xN%W*-lx<V)UKytJ#kif3-7MX8 zwYZ5?6lzFJ=pnGG|JJ93+=^%$(=;wDacy#Z%EXj)r7tB#Bs__YjanNv*fPbqO-F0B znzihAKsGOwoBG?h>XsO-s|r?u+TMd4Q||EGZMm=EtAFmJoP9Y9bKmB7xBe<w=RD)S z<m~~9)U*6^y&GIh?Z{TfYALE#RKfbz$^kaHa`BL2jV;Ueproy%y?dv>ugv2lwn&qq zJs?!jP0=;f|1`WYWm?vSt&eOH(*rt&;@G=UbHcuu>giH7Wf?1OjJA`FWG<;eCaEvw z9)L;{d>g#;eK~=;@-Y%Y*XO43v$Umw)!dZXjACHcTPx7b-@xD2-^D)?e9RB|s(H2U z?v4YtSJr{n<;6OCn#<}f7kngLP;%7Yz<jlgT3)#)UsQrbq1tepwCnVrj49^2=6A+e zP#I5SdZ0GSMd%1J<lj{a4afbd$5a_=BKTaDk=Kcy;A!y;oOCNy4)W7cVU5n9vuHKk zG3pM{t5{u2dQo=vxHbbAJ`;^&4efP}`0LDeypuT89%LB$falUJSSQzmAEoUCd&N(> zgZcx87slG)$I~rDwCF9xrjy2|hD*9QVGf_i^<}Tq5!76CN4+865JQ6d{jt6Uo~^DB z$5PvQ>(QcSMKg=KTF)1+EP3Uq=#KLq^Id{1{Zao$;9xBQ_v#A%e*i~Y!8gpe!}r~{ z!hbk0UNk6WQ3E=XJH(F@2I<=B=NoPsoqz~qLso?R3@IO4BlKNJW#AHdO(n)3hQ9hq zLKpDPR;dawe=08@5Gw>X`5B+&Iqk^?CDu%DGhZ)Xns0$`Klt3N^KJ3%^}Y4=@VosL z0^9r*e4(Czv$I2MmuwnaY;iBE$+{JsE!UMybELuS-sxHEmAv3f?28BWwF+W8wH{MN z*CfOjm6EVKMO*&giY+STl>eGi8235+PeTqn4YgO|<=epUUPvcv8=6YO?nFP28<w;_ zC86wqa*N9TlVVBA24}qeq4!P5@JTqv*X1(l0`QLxkrVwft~Mo4tZdOHV9{01dz*VQ zH$1m*PL-SsIfHY(xz0SPU|n%lr_J*PdX8;@%YohgR^BMrY4|t03ZLbl%VY9O7bpeO zK$E1FwY{yh;|b)?+Wu?eHZ__GWk+iSZL**W_rWddlW~RRMrhyg%MouQmqe|LS`pbZ zd~C=<(=YvS;6i6`h0J(51rQxy)gST)abIAXPxU<aRPr&98Dda<`Vl)qb6@j~a{$wP z2=PKC_!@e8XW&+#O`w-Q6VO84U4tAwO3oJ>VHQ-n<h<jB+Xp(-yxdXAQ8@LPaz?4F z_9qSSeflt0Nqa%)uglQ2*3A@t)1K4l0h4B>I$#f}M|8lpdQUP?IBtb?I1wFG6O?2* zQyM65RECmF{5O-wl>s-o`TSeW3hon=0#m_1a0VVpJ*GFae`$2u7ureMXucyipLs-e z#OF|XJcttMWw7sAtf|I-11$PaVU9ikEKM({DYi66n*TEmFdZ=JjaLmRhEn>o!b^S! zH;_r8GRbA-s&pba+CS8r<Nn7*xh6P|J9gOjmdLjKfGsKl|Eog#WM>`s8DPez`;Nml z^s0BHx0crkjH`dVBVd~MAkaX(2OeVaWFVRV+AQ^%47M7$xGoUd>lYXgn;V7n3=Ipb z5q2#!Bs3)?(lXTi6g(_G7_#&qbhQPmrXgFCiXb!PB=MD>^_BB_J+a<B-Z8#J|6w@O z$Naxw_uIqQ8*bEd-ztAoi0y*|UwrF5m0dUN^=+K>Kw&%BgjcpYihU(jouk~MXDQS^ zis!RO^tANe^q%qU2Fz_d;pv5%?fS+c<)Z9yRZ34Riz}3`kWqGM^7`0HVY~H1+3Dmy z^eN5c`{Xq9S@2oPME{=PDLuCA!1BGzHz?b)bm#a=(U-%XnoYozVfk0w1GXV^7q3?b zNs|M;yscd29Cu5m*m@TCw#F2lENGE`Dfeo&l(jx9{nwqGZ3S_*qt5oeKgA#NZ;B!% z2e)}v+lN@o7F5nFmzS1*wty5)vaTo&7LNyKvRZ)W!p=f>fBy-o2`a;M*2D_Ax>S92 z{d|2VeFyzW!vs@INW1XXQE#GGN4Jg&hPMpqZ!8h6Yih8s>3Dh-RgTKSchNjGRtDik z{{`P%pBc17I!h($3hE8JlE0#r_@CTmnnmkjySd$O_Koze^9H=teT*;GyWL&rtn4^l zf=Wh}Y_XSd8r{vj$NiPX6xks^l&i@nfrofeexaVnjo2vd0R0hTn0dIlt;wptqOHTl z0|v-Pnv+tHR|cWc7$%i;A@vL=pinhIt}9)TLX{Y@0`tr`ZVW$E>*Kd*BDuTF4SFK| znZCj>+#j0y{Cdzs8O!&F)3J@JjP|R|LA~h!aiV+FJz!OI(Hzjs)r`>G)y(EkXjkiU z4H4#jmZ>2(Lv{ehLT^bjU4nZ*5bA~6Y&4TZmjfK;3i5|?TD<As=Go)yZ?}|Owk3lr zSv5yT=StUW_ft<7?-*~4cd;kvzT@_|4|y(mpZj+Eg@6P6+86oGdn<x(Paj`5aA+x3 z2zp6Jb00KF`$oH27_F<JFVJ5Dub@Sy$>s@`+98)hl#u^IqC*~<jV1#3tqp&WEu>B( zj_gp%$eToeU@>6Xs{01`@_g_7*@3-5qc~99D((QUjh?`0JK?i>CxZ&b8~0P!b>|hw zIs4+0CboLTTdf_eSFN3GDd2EZ$3He$4p0a_*p}|`jq$Dp-o_Vim%usc1)0Gt&^|Dh z3tJa`F<w)8L+bq0H^~j-H%BcES*2IGI@Dveo$?fR=P}G7ZIP*QL};l}Nwrf`%k?gw zQtp0A|HK=hC|o{dpy3pM8ft{5D1rQ`n$#6ay6l3SSRFdKvL2&rxV^a80xCx4f>(Ka za^rHPT#|pjNVc7Hn!T(2rGmFW6HoGA^cq|TY{v>S^Sb8V$;rv-ldH+=n_sms%G$vu z*>Aeiz@e6rqSR*iH&D5`sJX%a)G|7YK1bixFwfvH{4z4;MwWFU^Foh=CWe|r4w)lN z^9&bs%e1XDJ=pE^2dt7p<)zdXCb7GM7Lk?u$}g4Q$!X9~>P`=3elSBBijK!lb&C8k zILe;}80(`jN!#uI)1B;o=xPQ?iGQ4FuGMbjEe*K5tN!@`m}f$ds|~~iT%ZuSP_9Ro zP<pP3_KdEXK{YtR8>*e|CqI;1!1SP3QYt=$SL2QN3Vw*!LFXEeSE6OGWA!NoN)z>| zI-8^;JKjxyV7jo~**Nwsvys`xM6jvcb`91#wL^rNpdZ{xdq;DReM)zr#$yTUb1T{g zI4PRh1IVr;@JwzCm2^{e;rd#Jlg6H~c3&L&1n>^a!)Ar7GPTv0(=O+ZGk?*Ksg~48 ze1-H;HjDfGXFZhboITT4P<*@iV{v7h*QU2ub<}Ydf$mKy*H9O6U2%T~cIX`c?}4*{ zxq*{@E6APIhe`XHK!Vs%N|TQ%chq9?2#fS?b_aJ@GlviGVZvVBVf`*clIe!|ljUWI zD|B3#5Oy=v0j`~&jg$37{8r{Hx~TL4zQ+;pC71?y{;)uXzsNVy_t9(d{_w2x&hgFj z-wIR=_6XF1n^4}D={@Rg?FEdC+XB1T`Y!A`>(o1EIr_syU+-M&6kHu#16>)e5|`1v z(RJL(I=48RdL{&qp?!RB^N7f*aU+vDr+iIaliIEH%7jBPYFHOjq>#r{M&p%8MGM$< zvk+>DkNg!oD4|c%l;rNElS*$%nwao!sWs8D5t`5}Q-ppAZ{lh)A@l>v3)(STmB!MK zz$IUAZ)s1qGtxf3ctK%)UjN+jIrp<OvwzDSnQth%Wm^y4WUsyT{3raa{QZ0*JU&NW z@vOpYd0%tR=Pb&tn-`hitzc(iMeAH!W5+I6h<9wjDRm_h6~#T*%;#V6|L}WwN=pmR zg^RiohR&v$mZo8^BFaUzjoKXfJ=_rLGriG=YKO9GsP5>f`av0~Y><0Ny~V}BSAmq^ z5;00HQVdAKBj|CAmFdmAru5jWPL$h<djpd1nAZ%R4oTpJC3)X^e|p}z_qYZ)e*(6k zysNQ$foGSuyziiIw!dSbW001bDIa0ee+#rXwnP8WKo_suFPMa6?GJFMe$2F>$5XQ? zg<4Dp=vd|;{fxSf(@`ICTm4s^NXCGw9w<msPW%&{AqiwYR5&{7EBG8I^Nj>Xuju0p z7xi~xvpR==0X+I%%t^W?odXQeJ~Yf_s2sc-$5AWk9qbd$FD=n!8G4w;nnNt(K_k3b zNRN;LOFPSH^97S)D9}CCKGM)!Ge%F%BU<I1cpxyw*UnSlHOsNuUc+8cl2tOv-q!Kf zAv(%BhdHl1>$;Y@PPnSOD|__b#ejv1^I_j{s0^~br$Ak)*oOlV!Oh}ixxQ+L`PEyh zHK2CJurJu5Tnay4n5<7T_A-yR?6DX_x`w>AT()!%*&Q+|q*qA3rL=jB;SzWctffkk z{ql!kE&mj6O;E-C4$&mqv%vF@H|Xo@Cw@nuS&#<q?!v&I{@VY;MSGjNk2nuFTz0Gd zkYg=i4tBZ;ROTzZue~R{Z9LzduS@1wcNEz29_6JLjJG1^yg(E_p^dlv8*wFui_^!a z#=ncZ9QQCzE%jeaUgWf}&E{G9f&2-kCPh<?n7f*MU7pz(F)t=D{$`>fxpH#Fr2X+L zVwy*UhfX!88h`3r>mTao>bmNN2sQZTYz}^+90=C%#k&tUYS?i}x8lP^*9(&iO$E2| zCghgRVF5>8r=Yb}Z`Zo(_!0w!fr^2zUcc+O{hjr2fj0j_UYYz#1(OSx79Fydv-K+p zlzg){a{67<yu|@gu7{VhjkUudOZL{k)m;;oYiIBRZ`MB64Kzt1b0VfiJ7OF$i=wAQ zGzmFokojRuIx1E&WWOX!73GR@M|p+ZA6Qn2pdFkbvGOD39@&Zq(ubJ$jGyjGMWU4o zC!GMN=M+%g<h|kERQTTL+2F1XT3J58OpddSwI!Bh+sC>_dbb32O5th&Nx^sUcN|Kc zrH+HcijVX1{|bHd6%AkXZFJB0T(%+|ijR<7RS$@hApSuwVh?g6H;HS;KBgDLj4~P2 zJ=Vb-eh6Cxd)STa8fFH~(^KjD%zLf}DC;~md^PSjRx=oNoA_dO9w2O&BZ;V_9a@4e zpt@L36;aRVCrmz@s_Dy*(JmBT>yiw-aXEOAZZ@4U^){_C)&(~HpV~^A9n3$tHmM6) z?xQFMql0|{r~J=-d%SBrUiUtCH+OyaX!le12v0@tUhg7^uv<MQ&tL9xz{gq(o1z`w zX}%oLyc*!|<ZtLd=YI^SlOgg+bq8udZKsDb%a}jGyWu6Xk*%VstEF{c_5T^Cn7dha zS;knNnG?(pO#Mvvj026LK``vq<!WzflGs*MS+YpF3%jdMfZ_WIn1VJXGN{y-fIm-; z*92(Azr}HqD8+z2_$@I$SPnW2)&0!%&>81^=XmJwI{G;ao$Fl|x6wVymF8>?>O><; z_QIQ*Sd!;B@7W#vA2-q~oH0!bT_3S3I<3^o_}2*)5>F-cj@Or38}%%7fU%9XDm$0j zjMq{rtb_l{&;%S%mdA{WyAoe1zDlVM(QP80h89?+nbS>m{^#jvI$;U`9<8}B9at2N z)Q@6v;Jx><`-8KZ;{<5eRk3a?I1Ad_L$dZ~R>`WBJtuEZQH;HvJKJ|JI8bUPjR}tP z1zbn$?qb^dsBml{T!JD~aRl^83ra}IYWr`F)lP%wpntX0i{wx`ZaY6zXr!y6y9Dk4 z9fb2jP?u_Sn$2NiL`bwD#vlDKs%FH9kU~QnZ7ll?R{{U>&r*_fRBS3Tu=4;-_2BQ~ zH}R^(DQDFl2<m0(96pa`5Lsy`9~Q?4mxH%KF5u+c{u};*{-eIm-WBe(z!e&2J8ErO zw5-rqcnnw`%bl&gRfB$c3FxwX1+I6rwyy9|(CgxKwSY5IO4m_{)!H@1oRiH5Z0tOG z27QNyzJ{sIu4LD;i4dpLX&YsyM$uu+2S7QRG%Ro8%Y)a;Ze|`m8}MY`@Dr*xu<TgA zgH|IX3Kg~2xlp<@Su2M~>w)1^TbYLJ^lDDWALS?UV>C6m-RudrCAfdI7Z&O>4L^*2 z({uA7^Kz5UI9G2I%7S0rdA2dLh*}3zm;~idDKl6t=nsq!L<crN#gG(S1^y%He$Ic; zHx0f<`SQFMJ=NToovj?$KDgv?$zXd|2kolqDezkSWdc>8O711Smq(~pvI-;mJ3W^v z%dTQ~vTN9FtilSKSA34()@x1wf-lW2i(>9&iZLMF0BtNkPlNbq?O|<S;C;U54l@*` z0W4co@S<;{=a=iT^NXXLqn5+vU|nhMTHf*g{=w1WIdQ#MMjQ@Em=C@N-UIH2uF~K} za?74(?_pnVzhJ*?KVd&)UvHmf-)V2)nC0x`-t3JE>=mmhNoX70O%twrZtMyU2`3`k zNB<VHKBjt160m@Fhd&M_kZ)=jr|J9ahUvEGrx?$h%Z1Jj?;E)|su)!8pF}<f{M*m4 zl(28G*J~7-0B#D^jW*qGZGaP)`gp6FC^KT?z<wX=E$_bPcw#$U^f|vvZnJD#*7z)v z^*Vb&UcbUDD^qgIt~eezZO+xs6!?T=96o!FJ<VZqZgjqK9tDitQ^#h|L9gIg=eX=V z=^pKS92~4z@J?ogrUN)0Ue<Nfuh3`ckLxXlB$()~0G36YFnxHL@Ks^8L+e;>7>jjZ z`Fm_UC<ERhyVToCta3-b0G;I~S%htpH~1zH7hnQo!PDxI*j3I@TEpJry3$5&C>HvE zz?Ql)V23YzB+%y9c+R^xXIc9&+sNYO#cyp59Xs8t{7b=Ec^>{rZ3EQuNah|hk{t_r zj9FR*upT+azNTE`TEjWrRBf2X#^~u0xE}gSdH|}h3f+NisJYC4(ykY>g+gJWuv*)k zkJ1=8JM)&_P3dqNv8WvsA~#TE#X^Q71GSp&09Dsnx*K&2wT3P!PCcpCM%6(j`z<?5 z^PSfUnL;gHl1>5*r-i~p?QXsn=tCB;Gr6vs!Qe~OUpE`r$HVj+bX|l6;5pWgIZ7?W zA3=3n2fmhX)ga9Mcfu~YWq|ef^|3yix1w(?c*PI!o^=m*?k>?3tA!H_)`RBCqk_3b z_lt+vZ#!-73}5r$W+|xbLLBX7c5n{OVP4Q?XtzS&KZ!5WbkT%rI%{TV+G^4?Z!~`B zw`*(b3oc<bIQ&h6sGtK!r@h)tP}DyKe80K;CeZA>NYy8)QXT(H&o`IRl@2ILx3?X1 zN3Eql#Cn0rUeVdCq_wqN;e-6~`CLJl!ll;zCGVW&Jrlf?uK`RTuKC*gMnQgl>v`zO z@a*(7_OA5J4qOA4z-*KS4k0@YZ_IN;H4$^72F1LH*%&=2a%9+E^LBl0ZHneS*OpJv zX-uJEV)Up4bLo{SrBgDJdnL|_GsIku=n*D{5KEk8E-;=io8}npy3u?l^92heR{kT{ z*T2G7;M?lo;J*h`j=}CRj+ez<3p4UA=cH$+{|f&lWY^BUl>efzskLnJ!{YXU3+N1! z)A6?HB~R=fos9dcr^FlSEAhBspW4q+*YUwI%7wl20_)^WC`fMxCG<<c{2eE}6aD}< zm^%8Q`qSVWd>>}q@s?2*Vs32SZmMAV2zfo$*uwBk_d&ZAwmaYOGPSByF7U}a%JbNL z!yV~)=AnIVe=Bi}9HT~(DrAgW6*9s^@lAmE!o6MG2GGoy?Y!#z2H$g_Bht7IyE?lQ zJV8(+>EW*s{8Mr&6VVLnCvY3?vU9-U{SQs9hSuH@&g#b+-<WQhUx2r<VEn1;t{ufC z(GN*JOgV>$FU2<CBl!tOvLpG`x{5}{bk?jlH#T0@z2UF3z%xQgY5`1u+bCK!PYn<Q zK7p6v$LJWDp^j8m%C+Rn@^{d&x005CqCbh2;9Tkq@J@J8-TDnwu1{NfLj69>a@BO* zuuj)iTU|4c-3<M28^G#}1}6QV%wg&q>IIP?mHdr{g13&JK2M*Zo}oqRDEW#wKX@<D zEui|h_-TJrUoGz=x6_$z|JzpEx~w22Z)=V#Tc5+^M!_!rlx?{)-CHksQFfAiYCCiu ztHCkyj&Y*-j%7v2yO6Yy9MBZ#ue+te%nuY$$EY!Yj=oRt;1aYB;k0hBZVc?+@-%kt zAUwVQG?CgtLSLO#2mAqH3_lX)lpZxl8Wx=F|K&aG8R0(RYzv6#k%g7>oWJy$@4w&r zMt`63BR_Laj-@cH#P6EquPR+r6kw{St0rZibW-do9s%X`Q00L-AB9uR=m?ljtYvF) zjE3W*K<BN7E>CCHOS&xGHQgcje;4T;hNb3lVXdRn;}@5{U3O80LlxsH2Fm@N`YH)_ zQPH+=C1i(rqOp(OD6G&}*sFk)b|@dErefLP4CuLE`q%ph`M>#Ic#n8~!o0)h8t1z0 z{0i<u5%zDkPQ~|%niZbUPtCiTvmkrrub5v|er@}8FndETQ;<<q)^^Tr0Z*J}zCv)L zIU~l))s!T)3potca9{dgra5R4(^?PgEDsA>-FRJzZkxW0p@kt|Z_=+8&hX7NGr8Ve zDa|$hE;zQ-Gu|??#&P;S!WK;{CLE7bm&r?{GQc5nh?JBgriwx^;8!6=AfMB#^Y!)J z@O^@)@y+Y=JaZp+?Q^bo+_ulQzqKECD9-clS>9^?Z-M^ePRT0IQ(GVlb%O@ObS{^> zq$$r2;_vg#wI{Wzwz^PPND*iuLwl9i@g7YwUxk09*~IN-%2Q*>DS5A`1x48f%4|G= zo1n7-$Fgd8mGCFP!WnGbB#hu1QP0#9@&Tz9RDhSIQh-(ib==^tz<d7{KNYwhNEH)g zjoOiXCqB3V8q^VeN2$~>rnM$rcw<18rJ-IxD^&{PLn2K#bS-&?Z48=Si-{2`x^8qX z^O<$AUDyQX7&QmS;mvp-rO^G@y5N>~lkE)MoRd5ORKm320)Lh_!*df<67RbHaUOOc z`{Ck<qWAg6JR!Gr?(@9Tg-wb%$7^>N|7r1_G8{0Sv8==m=dticmuL`-FOA8jZ^rUQ zvtgEQllH7;FFSyKfDQN;YJ<B{XXwi8T`r!#%bx(w*DO8_wht=5Q`=g2D_jr`XgwOt zZK7|XvZ_YzB!&j#1G&C3UgVzZ7-K6boRv2;Th2WEv(?Z0Kigy#W!K4H2a}O&j=t^- z-eUjz-~ezGXrX41b*M4Kj*s{&zJ@2`Ke3D{x-8R;-OPD4{k8jr>AL;8Hc&6yw6wM# z--Fj_XA3*Q+3+l=8^4OV8BZq<NI8)DDD`Q|spLHgsig{{szelqqL9Jn7vKv1S!l&i zV{cLeQF~zh9~Juty9GvrpTI`%2hX3L7|$-Z+tm}iosyjw90wgv2Y8A)&p4lf&eIG) zjdd>^oBuKQR!+B^sX6&McXMmz*DYLajVQU{sO0Y9?c`SjE5xR9J+%uOLUmwXv1d3V zu-Qtun_Pg~ty#t2*QV%3>&F|)7+V+*8`kLk!fSpA7s-^N?xE5M{C%;Haxu3#r)Daj z$meq$n*$LpSDmaJktfM}WUVq**#rtjd*z9eK|BWzcNKjNy?=Y^c|N#zxktEdt`L{U z@zox0*V^yed;AY~3A(EpvZ8)PwLtH?9n+MJ;X*VOp|8HIO%iGgKJ6B5Q*9CdC%;uQ zjcW{Za6muc3HUvJ1}wQ)wkn4;{WTU%X^vvUnInLaY|oB?sQpquz|_i;67s<^(EQxc zNRZh@c&@TUyc&4wpX}e}|K@l3@A>OOR*i=}=YH79BnKx+dUXKes0ccnUd?=DwlI;v zxzjRFnc7?j{<z@MzcD^AjW)e7w9vKY>#$uYE4i%JBU$J+mBw5HKar`LU68MSaSNcs zUdm178gg!S6Z?tj4GfCWYN$+r4L!x1;hyJ;b(MDwaxHKTapgM|#|3+@lBTvJ#n+2R z**28)bJ$#*uQI4rWPu~k6?!G;b)3^w=NIrt_>=rG=s>pcz4_~!Q``i$J=2tK1d2vH zu8E!CBlI6LhkLA<!H?%3YwmDY*-+NRo?<U?pEY+OHXq`<X%gA$l&pry_W=#E6Y%VA z&t%Vcm{*o{RdceAWhI}BJ6Y=$-GXgYM$sGVDVxr*%JtfF))ybp1cwKwgLch9QI&=( zJ3--pBtm!q-hf}=rj(QVKs&%a=n^<m3>GHo`sx$FBkzu(r(q)aXTH@s`JenYZK$rP zA<J|zWOle3DMojT^~Ao6MX^7kr-9n{>af-!mCPfJqW*>Mp>RPvkYB}hWq7KP6e)Un zhS)av2jDKMgO}+g_Z?R<c<I%4xm;i#?LFXq>3s~}H@ywKRXs0VNlwAOzBshVRPZpb za$e88cKP-K!P?CBhkcB5EjZ?^^fwNE5*y3yl`!>@x_~r6?*X$bVS%pB7}+0elIAL( z1Z-uu?!La0L2J0F`wkB02JRqjfgX2^I!*neE+>}(opO`z%A_!l=oWN;su|vf?w~n% zFsSMl)1#TjfZbh(ACt4nWYGLmfN@$AcCkZ%wY$ML(sRN&&)&D>x~-+{Pur`Ksm^(x z82_~3EV(f{Pyfyh;dcm|^ivE@{X3{*=L(&*BQ?9()yywiM>{cvS3{MOgz`xw$_I@u zjy_E{VKSKotjhN0?r|$M4`E*URM*w8-#FGZ%k;oF6m)-<YA0zr!$hbI9z?z<v*c=$ zR;(M$3RnX)>|gE&Rt81{x&-<JUIhLLCP;JS>q?25gzDk4R0@2`4eSH%hvpMM4;<Et z`G0{?yAopib1D_zAUU9FYXbJqNlY_ixc2;V?FwOtZktXKBy9!lQJ&?$aeuIOdJXk2 zx~u+@&q$0kP#hcV6<FYxeZ#>6thHw#Y%!|4wmW}!PK8<LAMX2}DZs`a2O4lGN~Bte zOhDIg7WIHG!~9FXqI%(Hu$#EAjD}hARwWnkaM|iig3vki9{&kA=?dHtsDDNPI{z&T zvtaHHS5H$;^APlGPO@8=IQkB@qIpOmO~?s#iJGn^!d^(LYy*DNk>C@b)1Bvh;%M)f z<v8W^xNrNK2L0l9DM8MYI>T(EFR;A6iVwtOv1YJupa9&d4+NG3_kz#scjW+4kq`d| zT9ILF6qm)V(`fncu#w*boXsqzC;NqM&wb(!X|@68GpOAvjL;?Pr|1Xk>+2)+w{@}r zT5sB=!YsHwLH#hpUc)``8ysw8OnXg*rmLo)@tEO`t`StekLWG<K8aVK%T{31>O@e2 zhTTW+;Im+&cu|}uF>;PHN+M!!F*k6|_nYUdbD;fNapR&D1^)b&1<nFj;RP!$iFWL8 zUUwaGSMrqcWV_8Chv%2K5^&+S_?iO}WS3tHpDSDXOV#3^w4dvxZ6k~j9tsO|7jzlI zFrMY^)1B}qwYgGNDXn%Qn^6yHB$LOQxaw>@n5%rH#!!2KrJM-8Wgq4VbBM)UDBFzQ ziU+~O{h0beMQ9u@MV-Z)Q7pMH)4|=Ia?UySvG%p#YHIZk3IhL6y+_vJme8Nxg}qZd z&@Jl1Tfr5nhxRaERg=zA%sHwC-bQAtf2yMZU0j7;!$$Baf+B2&J2P7IlPSi7NoDnj z+6w(fwPG3qXLTfBi(jw#k4u8Rs*!P1sni<mMEwx~Ppo$2FLjV2$g{+kfw`bi9ude4 z`XsIT6>97_TpsNL$<OUlKXFcQL2!duN#3V?R;z)ETQ9l|a~fjDUbc`u%noI3pfUZ4 z&()?0lZ7}TUOOIeQ)QUt^bz<Z&DqwR!bNJ9aN}6S45r?o>7=(h4)~4><ZE(Y&>$S6 zW~dw0a%zaOUrG}<z_jQy;7W=EQ$P>;&)|?iMSp>Jv!@FvJPvSGb6@eC1f)|-X}*#| z>?92IJ|+=AeB$eBbHH{LAgEQS40<1}2VadYz^?p<EFsY-9rPB4GNahG+yib3*N|O9 zTc||556wV7P%;(C)Zt3;7qq{iAN)tCs+G7a%wvdf5vV#@0Jy&k${;06j+K+7WI*;L z2Vww+Y4>7ZN8c%5Yk$|k3DBI1gh}@YvC9AJ{a%w_0Mqs?+J!4n>%b@c1{M%fYsz=U zCE$}*1oOXbf&Ib9VwRLGKUG$!WyouC4@FZS>1;NR?;#A=r@&r%qj{cXeMm5LUwBC5 z+sG@C#SzQG7lc~P6`;>Mr}b$jbM@H{%v5?Abp*@k7&?MJp(H#BpTo}pPre?P!##kr ze^SYmJ_i5xkA?lkcxNTYEPFfq0sHTcOOB%s0vyF3Hj8apajoL2#Vf$KlrAYLIbk2< znB;u#YUw%V4f7uebQiI_NGVGuV$3+$4^V^r;O0PN>BYPUXVpkN16=|oxjSSq=*r!N zNd1~rC;imk$`iSvaz^!`oAe)CXMUx&j9?KOYbDJqE|j~^PG`-mgQ>x`X2&wqsVtJB zv=OWMTX=T5id^SB`93~aQ<|!@0S-+EU=3D-yLOW^X_tZG?Jd~Ymos-UH8g(F=L^I6 z{p@F|K4R64a;Q8}o~%4kwdfhTjO^sQ`dx`v-oq(#s$K8{`YPL4vz>nks4^rZ!K@H# z_OmQ=hKiv|0q=hUU@Sj^>SVrT4aEB5JV{U|{OfKC`=Dj;wt9=1Vh`z}6e{nKn?np< ztIi_FfV=IW7^X9Oh?}A5t69liVI!eCK1&a#AHdA=7qf)fL!YAxu^CrI*|6XKgKEs! zfCsBW#`+*!71|4#+7?<1?4?gL-RR!H=&OXi;Mg!9-6v~RQBII*2WR?qKD#HvlkSdi z=Yoe}9l$!oc!&5F_$LI~1<Q**ajO&$dY=C(Utn*25-=PM0T~#jtdItYMZqs{i=4qb zVj{RJZBU1jzL2wLQ3lw0#50)P%I;>jvu3V<+pKx5`JqYWH$oq_i5~;iSG2a5wx0F} zKbn6Iejbh4Ve}O|6ZAipsV9|kN*QH?(m)l61*PFL)CzhJT^aOY`@vaXjWpyEJatC? zN9-OP6-a|@n;2Xb>?KYI#MCM|T0Scsl@3Yur31hfI3#9?*TLnwftU*sW{I+2Jx^Yu zWw<Y37|w&1?G>q=SOA>E*ZyjOwSljoG3Nvgf!c(?y?sTEraLlQVFyC^0%5Iwv0;Zn z)aU6Y3K`(b(~70oW9%rd7iVPslo3})f1-auH$e0MQ@@VN2)VVKE1yxC0#0Qd36N1F zO*t%%3JigI`DoA~ZB<<0QFT_HCQp~!$S<X8(ni?iEDZJm<aa8lLb?1a1Ea;`as|*G zIHs~B4i(^f%ndG!uPZzeUJ6}dGSOIbm=UP4Xfm>5KfQ}h;g+zVq)#oyTGUK!BCinN z1e=N-rA6{R<()c=On@9slMGP3`wg`9K1-DP2<1Snxsx7Etwp`mRC%Jf6r9251dD@D zMF(h+4OH4Hzr%TKNVcJB*n_U43gC8JkKV)#=jQVbgj`{&Fk3s1@2NS==Fp+^-*jE} zB-dUeXzFqAnVGN?x+En*e4zY3-!uQdphtS5Oi-(+Zvh=Q5VT@5BvEvW-6ct4mDTD{ zR0Q6x<){|$`>$0!@@nb5m<pJK9|{e=nO9(k96}C(=J;TBn`#B`wyNj^zD@I76<*Rd z&^>`kWoaRxS-_^#Q>ecwj>%+a!X~XDWVeHC81sO71@C<prl?&MO-IvjsS5BvO@bZV z3(}47YI)eA{0`@Zk!QmR_=29`EuiRPQ=2LCqyTXFS_P|ve$xTa)~F{*VuW-?Isu!< zy{a1!9jn!SYAKRSGEojb4BXkCRBQa5j8GRSmlTJ39`v{s`ZM#2aY4PsP*0)1s0nHi zW@-WGcpoSKsk>AMFqj9D+TbdgMlKSWbU;3og$F?NXoU@EhI&S>0QqaC*j%bEpObF^ zpShM|Qy!|TNqxYE=&%nRLXFS?vR!SZ^ne-MDY*jR$(t&@lz){gDvvJVtuRMe#|au6 z)N-4l{_RP#R5t2?=AbBi2Ain?)CX!2U57aV6Y@=<k@5?)ve!cY){1EZSgfaj*iz6? z^ouMcgUD=PwrNmpR0{1S_thK9zj9sqUulT+R_rC#hI@Bf{3Rku1;^eI;4p6uriv>? zQJgB3fLGZ<_!=meliz~M1CpYoy;3Xro=kyC*K*~T;#2-sI>G&~tkeY`w?>c~XDS1f zR3%JFQ(h}Iz{xvDHIQi10p40V@V!sr=Fl%Kqwmvu=~lFzIzug?hEpA>22hKHgDG!k zDvR1emtsaRJD9IbMc845aM!u<8k;7P59M#e(|F3BX0qrB^lx-qdKP_<zC>TAuhB1P zD{ZIm(Ua*2`Y^nOEx0a@#<g*KToyEMo1=q-f~vWvIuI(}F=_(vD0I*Vu<|?5t%#Nz z$~ENgz=gRl_7NKaimRK%$y4M5@-cal+(ec@o256rL00)6e(rDi1iaCYa%%;t_tmbz zO?^UaBpEG2mEf&dsTuGV>H{L;2F^yU5JD6x3(h<9;VuezF#Z=0qxAFzx-Ha97r|F! zF#QKL3+JK*C=6{RJlU<zh4_)Jst`@<k^LkVrK0uVMEi$YU9~CQludGqoB+A)xHMdP zENzg>DLs_wN<g`xwgslaTJnGp5{}Hs1d;6?NdYwpi`p1`PyhRWFWbXtC$2$l23?b- z^mF<ay_??r|C;X4LCbqFb&~o)S?K9>0&^D5{(Z*4&S2-UDS&tS#dK${u&deY%u`T+ z-%h>7H_=LR9{Ptzst9x6{c!$|z!OMCDq%oXsS>HHHdZFUGu<LRl_tVz2~(cQ`{W;T z9oQBDBU+}F#;Qk6ApM|L_?J{504`T9%9*kUR4=y6$;$t>eYJ4}b&;w9&(ledWY#l2 zsN+shE^vW=52xh-9*ZmEEl^?11(mlm$PBox-k1T$0XH>>nvM^mTv7(Oc|K(c>|pxK z!{pw|PpDY8qA0Wh^5Rj_9(WmR)gNjI%y;W5_2o+PZuyWLBfo|iwg5PTRpExO1^?d= znCq>@{o#EkphcuB+^4Bz8ks>Zli$#IR0whI8`*^ZLsOBTl!dv#eyF=tR2dU|nc71= z!S_%BX-cxxc!(3xfLM4zb%E2LP9KBmMPIa&JW#hOm*8CWQA}zxwGB+^o1+)_KDZ?I zrv8PWwi1s4{jUdLo*YK)2Hg&cw1BuOz&(DauxbVHb?B$gSI?@y)biv4S%Io!Elx!p zNjN;+J>($SOb(OVWEJ@ezVZpmF?qFoS}uXQWuKCzI3ZhHREEI)ZKLc_iotWDl6pv; zOe&&@s2X?^bcPt74=1vl+DiSYiX;kHT}P=r>It=<ngTaA12E9rP+v3-y+VC33kae` z)H3Q2oTWLG4r=aE=rG*<)ua(Tm*o(*9^=lSW>S~w%Iu>LQLk|mz#Hv`ZCO9m6SW0r zs`JD|epA=NG|dVbCSOHxC%h1EIk>Ue%3G)hD!_BDigKVs$da@$)9$FQR~>Mw-pF3L zlCn$b1syX3E?2#AbNm;YMSiNE)XJngNrn5goBV(&Z&kDcD$~#87~I;|=r=qN_W_-? z_c#xp^G%e7E};WhLzTy;z%jU3JqDGU8Rh^v)Ou<-ZDuyp?Lj?-!-;q;+}L!$$i9O9 zX(Hf4II07Emg<Tk)j3LrVuPp>FISb*05SYj?T3!y-jswhQ5!TGEri?t1n%=KwFck> zRn!h2#9`1I&cw?=2}nl@fJ>cA-mA;N9kV7$0|l5()P0DI5+JPZ&~T>E1#%a1{41#K z|AVP)HZG5ip#KIZk4mO?;yL&!;0@{k{$-PTMtw=XLTA$s%|%V1+dEIX0Ix!a6*xod z)S&8DPD%&Ga<Ty;gas<17I25(fM((=$RH2NSm5aON1LGgTQ4667VJ#$<(N!PtKnoi zRF)M;HDXt1sF_NC<u~P!qE}tY80Bwyg1l2{LEPjK+_TnXoazL>%MGX**`<^L8d5RD zMi$~n3DQ9XYDY!k@n{7}gf}z@?qO*-)2-D)<(k?TX>dE-m^w;lFin~A^h9bEXmb68 z)72kt_%do96$R`<D7HX7VKaS=VyPi`E~-fWR@TVt<#X^8t^n(G8X1MVgOc8S=(qo* zmf_c^A)LfMs924Fn^Bdl0ll3MP#Jt7?cgl0B3Rw7OjQSxil9ByM~W7&h^OQxa4#1r zr<CRJ#002j9DtXbM!qXI<iF(maw&yZSEE*Rb$TMM11P!&)EitM@dS|us3R^xy^xEn zQX?QE-d9_YC2ERVpss@Z_?lFMKbsEIWei=@L*gVZIFSy}nvI6M*cl=%c!VNEri0Ga zC#6{O!dsf5#-S!Com_(7h*wL&pOiop{#&U4N}g%t1-w@mT7?s+D!4MSD*2$E&;erA zQc@4O;oUAFt5pJdt0h?ix4Q}PsNd8W(EYEaPDX_=+n)$eyO0_Maj7DHh2K*?x+?5s zp0ZzP4;rLym)px9lsr(X*MpO^57k92;Zy7eJX96Z3vP;lS^^tsHhF>?Qb!=GM^b&@ z)RqR^^ed=`KLeKh3QTLOpq=O@+D86{sPaJVqn=V)gL)N9c$l~SPM>6sF`4vvxM8s< z6td<{m}`wd86=j}hl;Wt8V;xP8*KZBgBHa)avZwxrAiBBuzXGmmuD%R$X)PV_>3;% z4^TUv#eYDah=O`7hWu3O$!UP=*d>o8Z6O{<qEuV}aeWn<L|TCkszptOIp|Z^W42Rc zK~JR>`x|$h9m+&dNoW}P2m1b>%3_!*tb$X&K|QF}gt+(@X@O6JCwv-plk!mQspl{+ zoC<j<7HY)Z=r($)?w3EwpVeek6AeM#KpUnZCE!Nnh!UfGQu-4XPp534sv3?LKy}a- z&%~+t9ZWT~7~T%?LSAnS72z}GkeUt{wl#2r2O)tfpm#8j0TXSYE8rz$i&_)(zcQ5u zq#C7R%F+*UJ;)Gsp=P+ME>y0_O_VO=Hjbq>qD=5C$cK|3kFwQR^^*+K37D2$k!!1e zp<(n*b~x9G?Ma^i{PS{%$<YuWtCM$-m)^-3YUVEL5y(&(>S+>Bet<^nNJUcf;G_yL z88X5i<fObGP}XyR;eHIV#%MAay8aDvX?Y!R>Eoo+;svobR4WhFFz6W4;YmG#XFmqA z=?8U)5-Y!y3)Q;dIWQV(zvc|Z<WLdRaA4c~1z9Z_K6yXVKy5^p;1bB3{pbetJE|_# z9{)qMYET}l<f?A+mh@K#%1xysfE4lrC%g?zOlLza!_l3oOuPwB>m+dX$|ImdBi)dO z$!C>8Bm(BuTcPr=KyE8dAnt5XqM>_x0&!p@<$&$(G<pS8mRISy^cTv3)~mymo61pj zCDa-kY9gStACOrP`7$6zn^nJ>NDin3_DiRcfG!dPQeZ>)40R*jA;Mk*9C<644_wAY zppLN$exoM1BZ?y*)qh|z^c|gt?+>^a)e?K59?Al@rixIdnn_>C-Uw|$@wgCmhRjqC z_6-|x0F^;k35%YR617l$0U5CYfjKbL+xx(qLRR5@zztiBD7+Xx_fm-A>mW!*s;^}u z)azALquL8<uMgyZ^X&-g2ad%PNt)UhI2t<@UU>!Yd6;q#VpK2ay*)SxdK(7tbJ+%3 zrPIht^@uWD{tQaD6-g@IM5**)*2R_8jN^FDz|CUDV-+wj-xW8U@EuT>Mi3n`K^<3y zS^~M1LT6$A_6encqG?A!_um7ZoVxI&r_+<Ep5Raa5%mRbXqI9mjYuPPFLc2r=rYV1 z&Z>VYTjUqg2x&PWN-rp9fN4GvYOF+bn%qWbpbuJ4O~GGq4L~+WGL7h~@N~VP40r^p z{tn=teuAn@M^j7DZKw=(BR_h9c0+Y^0bQmNL6d$v)Ffx=BTNJKA&c0C@HaD&K&B~n zd7*MzolAV6_uX4sB<)wT@DPed4V6jqD`hV^56%fw(Q`ogM5uMt4eCAhi5jnVlb^x- z&mhMuqIwlQM_Qs$yix-Ri<5)3r6kz7sOkyzIT-@=;b`0oPRJ#w+bCR>O27^>3wqlI zu%YMaUDO%4%bjskm|OlwdZGci8}0=Cgbq&U1Uid8NrmFAP)Ae*)KU%gG`y`nu$4~7 zAE{k5VuI9ql&-#j%yb4OxNfuonMf0*tTaFzA)QkGK{D_RETo0JPiif{RW_hhdOoeg zYn0QHSq@VUgC@ytv={HB5|~;{D0M~c2~+hcP@hLDp-Mxgm6`=p+A&Z$-$ctmlXeKG zC1$`5b2xP$^#=wShUnBBV)#<BK=~onmtU&}=zMBHPFu=6U;^|EVDhadr=ch8ON^l4 zoB-Rzw~&L*QxaX1xkV4dk?J-XVh_0S?T7Ahyt-fMCij-E0k{7X83$as9?Tl5JmtX; z&=bgQBKks7<OadD!JXn>@wwPZE&>&!EwG`%q!9QIPUwWLs?Eq6v>yMC8=~^iN4NQ3 zO^D;Ead;{8F5Pik{3rBGztC}f4Lwk1iN6Q0iUrCA)B(;?RkRuFXfwM;Q;$#QRxmGU znL3DSD+9&kU<H^oq=_ArZ{#%|!~6sWhz+JTb*N@+Iw;?bho9a{&5=W3-}V@~rS)*D zyFk}Z!L7Xo9EEdIw)9KMhmBenl%=jx7At3!pmLk6rTp}FsuM)6xiD9Kfr_CjjYIE% zb-oK`nl;H{=w(-v&9EcA2EWZmETT2|H1s?!xDU@@GyelOfo|a%^!z7aGf<AYsrsaT z@?jO~06ds&4hVrR+z5Idx(Tz8eng9cFv%+mjM>>zj$*<KX&3l>wWRle;_7D{tC|7V zH(1?^r%@+B^|v;;0o$i^=o#+Ayn3vft7w!6xf#?3H-SgFSm{c_@o;oj*(=SEmdPiS z!Rj4wpu2*Wf-X=4sx~MD{Z7A!ZJvr|t1aN?{FHY|D`3)8gtvk=;VRS>HeRoAGpaAR z7zEWFxBzzBry-ADB70OjD0}+R5qcbTg7g9Hw!63@>I3;7k@M6c=uF2!CtCp@RBy@Y z@&Txba?oRJ#iQ_Gw1+fDzXNA;5$ZvPK%5)`6%f!2l|LZHB~p>F%VS89N|SNq0|_O~ z)PK}LFk_089s-ZL7+a}ZFc)qE=zIa~1)aK5(5*HA@39C#2Svc$@~X*D-8fJK>;hDJ zZ}hLyA8;iEs*wX~Q*{RTD&B>9<0SN~_u=G)g9FBK@*PRAw_eO#g;|#deTOK}N!<Xt z;rRiZ*j}jzeM=$g5A4Bk@V@HB&S0Q#B&C!e${00NNq`yQ6I7o14>}>DzC@dFGB5_m zlWp=tQIO+ds`LhOZckYQx#u7`g(WJH*~Bh{S^HwTDgH>ls9Dez$ANa_8EL1IheT=@ z{;6uoPIQ7S0zL>v*VQM=SGD{9=A`7AI$x;++r|PVMeVIdLl^j+{sHPWbHO+3G}{@} z6F5ANs*a<;4eLMU67a^2Fg;&Ko}r&qJo7uf2Z@Rmy0eMU*Y!{if<M+#3bPdew;<3> zsG|Sl=`7%+s@{ix&b@bbm+o$s?w0NnR6<fh3{=DbMHEFrK#`JAkx)uPM7lvF1O(~s z?v7>Iotb;jdB4x_|Gmy<*Jb9;z2`h#=Xt30%;1f4%j!4y{-^XoN=!MF@<nu?t?OiT z^6B3Ch(4jyIji+3^hYMRb(Nj&7p9l-2Yx4gh3O)7yd=1`sv2mL=<3xrm_TH2kBU=| zO$Fwk&E#xIM*Ed&t~<Cz<7UL&_Zm_wpAt7BZk#s&%c!d<=$DJ=NJYOKxx5#2H?IP@ z(`#f~n;>J0sayEiC9tudC+adKcvGhhm5R?1Uns6_sFj;f^$H&OKhgnlr7`{*&aFvS za2EDO7bvMv@O~s5E*8z|KL}dr?ap4+1V|>5Lr<nAb}hZFU&6xq!89^QgJD5!&IYAM zcle2R5Z>q^(<7Qbdcq$LpVwCF@LEpep;o8jXQDpm{Ot9Jn;y3UDcHwp?`mgKFgd(2 zoah%fDfSCuzArn^xg)&?-aqaJokWN6rRs&iiS!6(@U5B=8X9-kNijw3?@qeV9B+y9 zyn35B(Ob446Csk^MWHW3|2Uu9VZoT75D|+ZoEqxke5!Ji)!BzEDn(VoIjUY71naQ* z=c`YMGmc|&X<gmed!9<=2Bs#NmiF|ydxs3luHa3gETe)x(T~Gx!z=w^wlv>(h+KN# zZO94S7Qw{Gr_rXSl{$#5t>)AvJ{9jB@=AJX+~#=U$Iai-o8g?%EGAKx@ixTmi?0@6 zEN)`xIq#wUAW}KCRyaAbKRPn{MRW#Izp)ND)f7R>KDFPg*|vlE%v`o(^;If;XF8wS zi<}+*GV+&y$G_mC*PS2S?{x`dqwo8NiRgY74D^forJ<N{{!i+XJAt`Lr9&;KwY}za z;iPr#V0Q3?+}`_9>$g-ZotLlzcWB?~&S|QDoI~!bbixWd&w2eqOWeXbm8j3{;7+sv zG1U=RxEJW?9Y?*?i*e=RYI;@lR&xN$af11h$mnYO8RxJDs0z-XZs|~JXs*{-AIAS| z8EG527fGfc^<PAE&cOSB*(z#{U2g^=tI`oS`yd!@Uw3PS7P<SJ8}3B6o!&%Ewl%Bm z11z;YMib-vNPQXXz-}r)hIeN$k1Sj<?@#A#XT7`3YvF!wNBVCAkuUwpeou3a_}0rv zzZrU}H{N?doF~a$&FsF0Xsd?yb-ba*NbMhkx6m5jLG%ClL;UJ~QDoH`tlIR%I1`){ zT}f>WG6p@(Tsw&P$ZDmT3~l%;8&Qshff5+fmve;L=L}%x-mGAJ^nky~meaYg0Mj^= zsdYMQuM=+?uNUH5J&$}o$Skwo*!~-_#U-PdgP72|XdCib8O(m<!)A4aQ$C%%nr>4x z-zvQrFZnCFyT7Nk>WlqQB&g(Pj{Xr@5-n+(VTEUMj_QxFAznjDd}*`jU3#T1q?ckX z-!Nx&*U$^0f?5T0eKLsJGC`sqn(#$V%e`a1^>aqk1lLptr-=U1=A_4CJ~~;vX*;^h z;=09k;!IN&H@EtXoaYl_1GlJ)|K306zY`3@_G@T9B}<dXer8`JX4J%v$BLS4f7Ksi zLp{&gkdN@!!}dLV(M?WfcRli=uPJ7I*3`q+)0xPif8<WYI<-`(pQ1AD5L)dfHtk9L zGZ#zlteWXGc4xvrMcwOkI2mS3F}-D3aEmGEdu=$_h_}?!+=))%1W}?I=tjJ)Ojaq1 zEp|Y?u8Zhh>M=fdFEcz^kB&p_@gYC=6Z~BMPrfpLt9$OmP_h^2oyBTC8B_{4N|~M7 zEBZa>!E@_T+^ce^dfbok9pa8VlkH+)*D>0Q?x8iq%CBg%JKuYy<GO_YaMJ7h`UQ6- zc-)|xIKEzG4cWCy%)k54tLnCOI=kO{^W2x!C&aWf;$4m*hWC`n?Qdi+W)k20RY#n% z?p0k*H6_A3hP+@sV7t=a68<-QI=b5|*8#D*cZnPIr2gzT=M8cN-(e-J_ZI|%f-HX9 z=-}vJe+rzZ{4>$HctrC|A7!yis_G)@JRLR5c|$|%yggJljmBD-Vw#cr8f2b#4tQsr z8g>VnuPtgb@#Am7<LBg7-mza1p_zowGm7ZYlVFVLtcSR(koRBWBQJECI3ra9;w*35 zUpX<^T782>^b!_e6V;a!WxJf*p;}&XeLk2Kd7RQPH8I+Y9MDC)@;AIC?ocOQe}NTq zU3Can;;-jmc2+y0A+t;+`!RCuBQpLOl^5KK+=?zU?T9FiCD!l}8P1=GSu{1h$;IWN z@@Rx{oR_@*ULN9yjlJBQcgsiD=N{g8Rm&t{(SL2$;PHGIOff_4D?}q2>mB4B`q|^y zLmAK@1H4|LW$v5KVPe|JDq=_5hjt0sgtpqZlY_R=&!X=KW3l-@k2ZtSdYe1Mv&X7q z-rcxOp;z6roCPYWdN`@-IrBZy_^d$+zSVH6b#b>5)2sVATl65V8ARphRB8;05RqxB zes>Fo4lxJnMdF#$Y%Bj(<ao4H@I$aUcpFc>g_&V`sCs0=veQN5hTiXFb6=xN=^6Vm ze%~>x^smT(pKYoc;!lV+3x2SZz{&yl6+OayXI84N&TH%^yPe7jt+jR;{5Xj?`BpsZ z3TnP->@SJ_?w<`_z~6tU{<E_=8B)@2v%TnWlgmlcS?EsPhZ(0AsGwRD({z*k5&l*) zOs{p~9AA~CGH{f0T94BcoCjWuxLsZ)XDFSH3y?*yb^zSF!`?&Z_Qa!`PZiKwrpj)! zOZ5`Bap*U1pOe9<ua}t`er|tkFyCZSr=U+?)l#|b5V|ercUs$}(Q0Jw;{2QbAt<{$ zzT@qnS}@Lx!<+eD)nq?IbPxTv9jglIyXG7=$V^oRdtoA;cvv_0R(rnFS#MY6)K2qB zV2Gc`5ySm~Y(mo@2haRa-*=mOdv!Lug(zbgb0?@|OFQ$ukLf6-saf6bH4ja8jcx63 z4u2Sa6m4tUDG$mFkp-))IZa^en7YJ8MyktXz0Tvmo=`dHklhezoXs|O$`jL7bje+S zv|F#bnC(G-wZ!?<$xT;_-r@AAD^h1fl7qWCkN1Ih&F$^XQtwa)F(XK#ujNc)v~T0j z`FP5cT+e&XJK>h)nn9{)kS3ZOtro-u6@tB{g5KkN=uF2?uTKTiO>-?WJ6eED%oucT z0#VHLM0#pF1N0`lAUI1$g?#7*R}D3{ZGGpMe$y@?GPK-(CwhyM@a_G!`l7eSOZ19_ zYKJ~?#}XOIrGLX}n9C`rD`p7NAVRb`m;0G}3%_JNv5xBG{<7#6<V!B`w0mTIKd}YK z!yGq1*|+Q_v`IatUJN2y+mx!Xt<;r%tnzWbw26Mf`hMwPs`(WO|DkT`cA?^M2$`xE z>`Z3nRkK_1{8s7V!N|z_;i;*YIDcO}I#^977IMYw7iZ%hhW?~RBLf!BbbTO*(AW1) zFgLm+oJc?T<z(#p+kTGmcDe7WbS4Lp!b|?epaEW5ap$H}%pK0T(g4r0oo<X)I)$xQ zO(p9TyMqoAgQGRcJbfA*Hs3o*UN+(_-#RCdI>m?vexkmHlHZPA59f?j4#wz^JJ<a- zR3NUN*F_IBw}{|mHT9|G*n^FpUA3|k>}F1!P#J~JI^lMqBF-g-pN!nBZ(jFT_>tgS z@=<3@I<7oNKHwWunELAd{!=|AZfU}63BSdyaPQj-{`lyd(Ql%!`0toe*c$VxdpP5? z^nP{TH7YtL;`@imMtn?;=p-jg@=%k!h}hOpvIv*p##hiWjqGJ=0{%4b6D4~R-4f&_ zcRQNtm>;P2Di4wIOHS#~q0mETtoaKoGauSzx9x~ls1{5ja{L<6sE<`=tlhf76lzBg z;F&gX2D#<DLf(7y(>d*Rv6;h_Qu{DJ=Rv?a0*48+8&qo|l7rE^@%k%Mm5xP+(8_6p z7sxY2>A{yw1YiR2*r{^qR?hFvRW$-hy@hy2Wv8sS#c642o`f83iKUzB+PLEJdAwQb zzNsCwip);=E2VezynU=cqr-n%wDz>nUG(-O?}A5URNWze)Wv)d)V0f;;@)CiBWM#{ z9t>BfOj2q}lJ}%gcy6$OjN2Q!Hs|P%cypaQI^G?IMc&idi<S8jdgl_;FuqWaBK4mx zeNr<eB~me3FX9BLPB?yWnrR8u<FkhH>jPA2l!@jiEBCkYI5X3kE-@#lUcVi>>8)`7 zp(b{u-zV}Ubwv2Ee~nWhUt3F#eI4C}zc!7WqM_`e->BzWK-EMA`@X+5+Rp5>uLYAM zuSILwUQ%UAOmtjmX?!nllGR9tOu@g=-H{Fc52_RS$HPuJqDg;hN1X#kQCmEiANkb3 zY9ppaaMLWHwyHZ(;m%lhxxBye-W}(ZK4E(W{rr(Zc5I?q_G5L>nTH4aGN+kF1=anN zkq@I?O-<_RK2~|vFf7Q7daq5dt5bPULC51a58*7vi|!#Z2|t<}%pcgqZvOM@2Je_@ zOjspa&MDyR>Jc7$T0K>rRa4Y^b{}&QHsGcI>@}sc_aHkvxJdRe620vYGu7=a{DvXa z57#2+kk{S|7W(UgN_w$7mMV|h#LH&5#hvXsi}Q&Z<*yIdiB_Z%w<)$#Ich`inlH&j z+&85;2j760=T!Tty2XSq^4U&1D*RWviO!2^qp2TQdIKH|7sFRhuR1aFCk;NxbIzfl zcC-Q=S^gk*UKUF;%EYH*=#`TCXMGY`xt@&DWb+QQg%(D4s`PPF;?IZjy7Sa}vxJ;~ zMn7Y8S@fOY9^TyyRZEY<w>zQlkpq821;MePBYS&8HFY+4593}<xEP;4^qkIYevIBu zE&TM?<fEz0f-$NwHRYqIo6DznP|rC@*Cw8t<nJ<7^<?+exB*NLTp0hRz7}1Y>M}{b zBXghYL~h$psbWZUPvCXDM_jBu673AR+rDmfXO&uG){_CxNFT_pPB$hSR#nxopyK@v zsh>wa#FEWT#o#;G4r%QiKR!|&n=+%GK~?L^@h#)K#D5WoZ%0?PQPF(SxqfRqTm5YB z`{SZrgFUtj-pgrIj%qaJj3@7T7cIBJ?d!gZKYrD<p+Dosd+(~ML1uc6ee2hVuEy8@ zjhJn!uB^KeRZI2P`m3XHRGS>bJ}FP7_C07U7q&n<a#QP7U!pOOi0&UHL%f|#WKy(K z_#u<o)2i)yuKrN<u^sGiEYg3lZQdjozY-nxymGPsb_H4OMqSa(jD~DMeMnhT%U|X9 zAb;4vj90Cw<?IsLqEGoNqb*DcqEdyuGEUc^D_NU1)F!nEhETgX7?`$qCfIr=o67Hn zLw()NL|$)m3L>*=g#CRs`i_6i)FsxQO}}B+W7%w1qv?9wQ|&eV?Fe*mJN=7uMUSxM zI89e0`hq{hWF@k8feQXD-fP~E&TM?K_C$;~L{5djjkFJz+m_@MFR6@VzSDC?w}o!c zxy73Jryu(tMbjJWe8UNzTHa<=%uEQz(iI|X7utbT{kDJ?*O+hYII2;vlZWnM4*DJa z{r+Zh2R)rd^rY>``PnO>6L_ET!T9i3;R<NAOE!<wP%AS%>PKD<CUH*gYyBfTI}`mg z`nTW0uGUG;9_FZJP%D|glFqK9HgN&@vKgwXKIH!H{-8$URh&fA{(%(h%bA*}-r*#p z-S)fj?j7u|#U^dE2t7oyM!qMj*NTdS5$dLMD)dqO?YP@se{9_&aM;nHtbIV-wx@nQ zC=nh_5Be;rZ-@It>)RjQ{PB0G$$U3{XWX*TEN2B!*3LlH0nPAL(3uLGQR>}L)`a76 zpE{u+UwCb5-slYCc-`z7yVy=Md&~u0+iU2SB}ZLIpQaL`9Q60d?cvThzehjt%bFwR z7v>2!NNwUb4?c;!9{$UZsx59=DjEMsyEjd?xN3To-!t4PT*1$5>YHR@(8>BG&K|uI zcQkatt;Q6`B+lvIRb_)=k(_>lYVH2##&NFklr4&{e3%-SwCW2z$mXR|tOAuR`<d6Y zQMGsfRLlJDO;>MV+zRLGpm#Jc@3wMVI-~82LD%TFk<85XZ5E~$i|#wsk=GNwtfA+e zCP9ga7p-GD(lND)-a?e;S2wG>k63;c<ZnLv0kMZOW|rU7UqH3#3MR@`@+<fc`~s#m zwK|tnUuT);hrSK1@meui;V`oj4v_tcqbmJjP|{x-Va}=@z}buA-l|YDw0PyngYazp z`8xiW<`*p2v)C`Uo%-(YYBX7$&gNC3-x-)g`6+YZpQF~kv|AwvQvQ7UC|sJX*j+z! z5Kp(}K5nX=7*w%^bXD_3q-5lu@Q`qkz<0~18Ik5m+}P0a&~0aaFfjUdkc9PD)jn_A z>bdTF*vo^|)L?mJL~8T!IDfT0kM**Z9OP?3vj0}F*nF<fcwuj|ZeW+%`nrqL!8;k7 zcU(AriPumiMW>{g$6q|0^|(grE#`zCQv2PO3A^K4xnJ8WL~EM*>!XT!wgtWKsX1&B zza(K(!h*PoPB-&%@CDhWX8zD{omfxrl++242dYW@$b=bjIlRmEWj_o4-$4^``^Wzo zKR@(^a~&Bw#lIKr6M2_;*%zWYqLE;!bJaVEWn7N>sDd^v`sVN8ck`AXg#QkYiGIT* z^BieUq$wGn->ZQ=c_f$+nI1V46j%4vBIgh4J6@-2^hPrxn8TE*W&UDkM11CiPVrUZ zCxwPOuiC)h#bkoJkvx7c`=Y*~%7V3{&Mx&I-PyBHRXM;!%^K!NXd*EKbRTz=vq{f( zu28kn&5jBG^z>$Uy1E)SJI!Ya)8nRk=hP&>aP*yMl}PLG<M7<bjYt{)H+#{Ii#zYV zK-7JP)qXK#)EP9f@2uA=%)9>a=w5%B?M}3`j&oEcP;-7#)pqhYJM6ZgwE4{z#P)AP z9mYIrNhYZ!oWPyH`P$Cd##hMv*K<D8^MWQ+mY+0NoeiNs68fagkx;?SV$RSl>NGv& zK2Kflzl%+B-A>T2xTo>s51`54aBsUWC=)rFaxG<3WL<EAddr?%^RvAkR3ZDm%^ytv z(tU1s_g6DFGC6wJ4s^okz+pD5-*R46OUznzo_NO*_R!kaVOH>c)0=!wi|A@HcRi_$ z$)%6cS)_zB#A}+ST$;&V1+wN_o#AR08M*Q{?0W90;A!-Elbh^x*cK;maEoa6c`VsS z=728hzU!8!n)7Stw0YYcaPHAJ>%O}(=o}eJon;L_NARaf>zwpPF{k4fa-=20?ZSop z_thkFISI~Q-AIiHo)WdL9!mAvxqbCee77{%LY>IGY{ou66BLYgjv8_qx5HH;xr1TM zC@JqAkDrltZNd<55%$8T^d8bdZnC6{m>r(UndWw<TY6%g=eD(9f#r<RgVE(wYTS%Y zkG^QqQ=j%TnXmuwa{F74xZXKuVO-UOv7sb8J`zb$;nH+E-=V%EYuwc-p%w%>Xw50{ z7o2~n@So-!S3Rf;*hfV3&D3creWQ1Q{UP^tw~pJ@$)x|HBC(7~upeQ6|E!-lJ5>JQ zr=StB{qv@+e<jH0Zs6?XRX3y4M12%AkEqnGsZE3DsWZ9go~Ew1qs~e_X;0M#pXn#v zi3*ag-aDa_ZXT5(IPP1z0+zsT|HYiwsc}6Mes(!i5~*);>0YLNbZRh8=XZ<g&gAS` zsG6!d6@#_ib6ydZEoh=fIfIE=RwH9Ho_Y`ZNd-UIIcgJ=m%`K*9rmjSb;%VLM8g(U zwVcDAb+f7M(e_OJ`baIJV`NF&%{doWFa8(jp`V5t_O4ht&yks;v$<YF+_0S2mEC`1 z{`EIU3k9F4SIJ?|CciV+Y3me4dV0kF+IeyMN^~H-hsp=jiHsdE2hC!hmy61!Rc4W0 zpy!(lkrb23%k1t}Cz)^4RkxyQp@Ye2tC`-B?Wsx8eQGch`c8SLoXzT8?D6Zir{5`Z zAe!V445r$=?kuL8T@LN^4mu~S%l!E_$XE_GAK<%Z$9j52<<}qRuwLZccNQZ9x<{v) z`BZ)9!TUVmO^nYRKfx=a+Xml8{BRGVz=@m_eA&H6g-8YWy88<iU|G!j(GighOxu_i z9c8aL6Pe_&#Qm6Rkus(-b4)W(Z@I?|X9ikJEchfMgZIgarDu-cCuV~>O)Q|Ue>8P+ zl*oej0Y2L*w}M;8nG<XX&x`a3hS*2?d8*;o>NVIweaTVgH#v#4ozgFPS=<6j6Bjdj z6}f=_^g8<+{ztlCuOFp`X9W?B$=+u7wrw4h4Nmwa{Jz0Hm6^)kq23I~s{UqVw3*+{ z9#IXc3weVwiL-ZNv&0xF1i*=_iJ&7CoJoc~(no#-?y?AN_xL{4g{Cw`^y;?#=% z4)qA%XO8y+_59maMxxE5nM@dvX<bdV)?T7Rm#LI~g*w(8y0#jm_qe|MtvV15hs*iJ zsDnvM9woE;u6{$kMAUU5Cl0!s&P?4n0G)K84x+bipi=QuCXg$*7Bn=gIfwf%ak0;d zX|2+;se~wRx{_~5Po>+NP9gU>=LMCMSXMu~3jcf{r)Z`T-z#R11p%45i2Vbb{0sM0 zPQT32-OS-=hG<Ryfq7L|pdMxzHH)LDaBpj#S5G(}TS8~hpJVC%q6(RA{%_P0$D8y@ zbK+#4lLp`LdNAC)s>Twhj3=+qgzSeOZQ}dEM5NJA<b>xU;RjI{*4Ex9%U0M~>(rn# z$2B^IyiEmEXVY3upc*P3dodZgw?h@N-HA|KR)$Y)Fv=#{<J2a1RB7CbWb4Xs@?b2r zi}7~1J{DRNdeymyZ&!e;4j|*k+vd8qQ(othN-Z<a3<}OfJNk8*l_{qWu2L76>US|& z^bzX7OS$bityq{-NzL>p)ILUncw3Elh(n!MO=_DL22=f^<`3d2weh3Y6PpRy<<w%i z>NmZSEPfT&@!oQ0tCCdJ4Wn*t0C~heiJ0EBFPIugqLEZt_9Mcz&S|A4QDc0^6y)^j zT{TOOL5r-TPuv>+dhnvH&Faq*vrR^OHCOq-<|t^-v-Nm2iJc>P+l;2}A-x(+?7gsF zqV5=FhM0*|_xucOJx=EpLNoY$dlz^p>f9u9GLD=<dLl_1{B)c?%R)WjCaRGh5vyuV z4M=8AV9Zlz)Euga-ZhtlQf8+qYkL#5tELC)4Qe4ho^PogoD=Fz)$CX*vGS;1)RAa= zlWg(;^*Q;h#lWbOoo_$k?<`C?T*8Xd5y2ZERoFy{mg)TJL$VmJt1nc%?xtVDgH=fG z!bDmYfswn^(DtEX_Dk|IVd@?xQV%>ve@m6>O5#|X)gUSe-hlFk=sna<mms%!A3I(H z-({wM&@9*=v@yA<Xl_aFe=3!w3yiBi(p{;(Tu#0%%>MJ)Qf4}qFnV9Fa(2`0bhCP5 z-k@gVb9Q`=-WL<_!o#)>XKHVvvCCl<cO|Z0j?)?G^#g4DLPV=86T56ePotZ57rinz zQae+V3i|ZwHc{t9sx*?QZ2gTo^RZN*$CHUKjP(;H##M|Otn8dL-av$W3K_x&@Ui9o zxv9cwi-$IjPjce3p62}K67H13skJ}t>vk^vCreXtKM=b<6ZP43^}AGCze4qWM!T6x ztHO3Q+2{~4lp@T-tVgDAnY}DkcU09nKye%=#P<?gxJ~U`A*w2iLr?SQaMMl=Ae%Ow zXwVuwlE5TVy>XGc=>B9(np4xAmwmRUHYrSAeicv~XZOT9<CLUN+Bm93f3@j}h94*Q z(jQAKmAUhq)GDx@k2<goVE%ViR9_|PI}^A(q{?<O5qk|R-k@Tq6PUURb)B};kwpJO zMK|pgpgA7iy-I$szS^q(;dPm{m83f8s-4E!gKyMp)LXB>X6VI9qr3QVzfdEV4M`G3 zKW8Mn*Pq(X1IU$!RN2;5S;5hN<SCM|HNW9C2KxR4THgX?pEP;QyTM1n2WW!<aN(Em zbQ`^zTDi(_^$Jsg2|>l!i$k5+G0vY=1J4W5zkfoNA5lqIhuXyYtbeI(s}gk`>W!*F z+4G4@+$ZYbbF%7l_%XBd9+g?SbPxFD2^qVe><ub+H&WMn2Y<62XE+P8#<Z#t-&+ff z`f3|BzCQ4LgE<Dp(ZnIRWfELhok*FYp0bX5lPkLO^EE!#4rrn<nVl#R^LX2leN|z` z#tv#^3t*R5g&$Lh?)Rt0YYiOi=^<3hCrUlH-3g84=aZe><t9Cvj#7!y$G!`t-33S0 zxu!i&-)dhZH_(f0OFQ6JhSer>_YZ7iYMbxa_Q3RWRhf)^1*o+VS63lgJ%hUV*QuiV zp4`(eTLix7Xv>2KG#}ZX9p*(d%B+)09sK>i)FI}iruY#VgNoq1Fw||yy4Inh^G))? zUvbZCP{tWN>0-ceF4FM>vV{ks_Y<77xWP`w+9S5Qng*>Tkx7~dWJ;<edy4O6QnjJS zwZyO%sPCu({g689?`=aWa>rA#Jet!%t60-I)rDBzI^qw1+j87z0&$kd_DdvfA>QqS z#vZ1spa-rq<EjVmFNW$qqMF}FgT%v$1K`lUR>O_MfJrH;Q#-LQq2J<U0NPP0x|o{W zr%2<OY9zi8wQhXBA9p)}d^iloR+;^#KHN1xxw<LZ<+d8E8X{xL601GTNrVDCorBUu zOuKM0L;<rY$oF566itBj1fs9Q$u)H+qAA>z9{8<PuflC#5+BQ;Pk|%kz1?Zvf|IM+ zk=QbO?S3d=6MwCPSASvs9f9j^+gSYo4bNtsCDbfr&xc@fD^jF7cJ>%P`3B6CV|TB? z<2{g7f5H_H%}YdHDsjr}5j;AS7|>(YSrrA>KR|&)I3G|OiBc6kRUD0b2@ZH@Gpka3 zz8&hE045X2wNHQ+TS4Dj;gOlp*m<t}5ANCyCx6bW`eO-I2Cq|CX&cU@4gu;Xpo@vb zaywDgIF(A)3G^�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 -Ro?-z19sxvaXgkuQm7_WbGYnf+5Ix6k~4 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⋙w!3s**;V@s*CAgzQyj?@YKv|Gc0vQ_ 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 TECLn*i-1MIB482tA0Y5=M8;Yr diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Left44100.wav b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Left44100.wav deleted file mode 100644 index e7dfc6f26bcddbe5bb411ffa219efe745f840e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661578 zcmZ^Kb(B<B@aA)Am+2li1{s_H!vMiugJy7dcL?qT2<{p*xCVE3cNxaLU7yQd^4qg} z_K)p*y8G$1SGVe`uj+Mg-=<BAC=JxBc}DAz6Q(DbAP9m%X>|&MR`!M=1TsOL+V|)g z1CF=<txcEqJ=*j%fbC90W{ym&SL2to8o$)44GkYMeTWpP0muK}j|x8j?~(uC-p@Aw zZ$ZHJ|9pP_|E%Tb=jRa^LP0_PPx*OXQGXUm6;%OzC9n<s@AEJugJYb^|5rG0_J2nA zvwjs^DS#rYFhoK$q=U5J7YBEu5C#$d9izbh&pIH8f((!mT!BKO8dUviKxO{BR{%Bt zte*q>4EUEoeLs)=PcMG<9fG9)_EFG+8O$aH>c&9}FgPxPQ6XSk23tRSt^Rkf2=;#N zlaLh@E$E2`^bCT2wjqGt5}+?uC=#-P9#NpbDyToKvY-zf`1gbUg}{}vN`Na>u<cay z)J*X8fMYl~_OoFBjq+#BKWh;Ft62qgBmbR6!F`H~L3$_xvV)fFpd|v_@$-5NVpX^5 zP+h7Qv?+q^XX?M|eJ~?cq2HlVP#>ro<Ojzds@b3i$xsC-4vGc;$xt*HzZKLVfV=b5 zLeNhN)E^5aLgk?H;4BU5#=)%kK~Gr~1#Lz`QBVwMoq_^tj+&*Gf;IzSlmw_J0$eZs zH@aN)D>(PFHXFD)63h+^G5^hi1jdVkJqYw(3kn5B0E6~Jst?SR1V%`LV?Up=3}zq* zYWIQi^Vuq({hzZC27PgZuLq3R3ATKobrQ0Gk?8)D4F$}=&w2kTBLq062d&WHPVT>& zI8X}-%KtnE7Z`Jv`dR&;ep3tn8;APec_XMz3;M`|QM2G#s-Oi8DD?lnR{?butNCgP z=obxUBo>Ta_g}A3Ap0`tD+A6uz+IK0G^je50}PDc^WR+k93=|s!hzfd)H2Y6JWx|H zsH+&1JTP-#z;+0n3xiPv!FB<de+`rXRfXz9?VxT@PpC800{Rtd2)<3B3}`$w1sVhX z+d)l0TM3|)1OLsT!O$FNCA1ux0rdx0S|KN>I~&w&gBpYDcR~-L&(Is_2DAtI1L_U6 zfjU5=p}kNh6a#mIXTU4q#qe0TGh7Fbf)UsU6+=1D2j~HG0$L5OYXxK|puSTttDDrW zYCxH(6v@BJ3#FH0Lori0CHx~i6i~61*k7zCeiFI~xA|25C^v|k%H?ru_>KZ19uVWD z!O}#jztmG2A#IWhr9N_4{zvHq#ycGP3Uz|-!PStRhz?zdI?*=RX6z$I;c56_d<&k3 zw<4|(HOc)XMfIhYfij$`O}WY4<N&fU*@2u%UM2~uJGB&)o|Hh&BD0CM#5KGFE@Ka{ zUD$kV7}gjIqiawrx(?ysuJBPHqsvuDovC=`sd7-7AmxdDM7MBI7%IdIU-=z;H$K44 z=Dh597G-ZTdzd3kHdBvX&R$`kuy@!~>?ZaPb|!m}g}6DK!Y$_w!e#*%M~QF6cG6p^ zyL?}+tz1-^t1s2=V2&q(g}n$VKpLVO&{DK9wg$_?THpupGTcg3CDMtyL=r&}2w@;9 z5Wf<wiIzkaB7pD48{prurC5DTMBkzp(T!+d)P&wfMj|w_53UPmLK~ruK-M3syVQAV zhH6)zDD#zcB_N-c=gSl2S>Si7JV0(ER{~=^FU<loKU>-@-2k&6BR2=f%geCrmHZMV zH<Z`Qsysotq`XpIC@+=IO0MEiG-^k6qxuNQe`RPIbP{?El|n|iA>0d|2p@!1cr<bv zxdzHpP&Omok*>&gqy*uS5R!yWNB5uuQ75t%X@fj~UqM&YXcbo9Db<zD@>*Gz+bYq@ zYx#nlA>S4EaoM3S{utjl?_=+M|AugwzbqY)rV9hveZl_T8_wB|39j?Le&I;INTd{} za$J5Qq;aFza@-K!Bg~LpP$_D__hN<UW%L`E;VRfTyo}tSacUK<UmK^((<0jHnns$+ z+6diH-C|v9{dt4dbk~HKe>FETk1?$<jMPPH?`v{2Bel<Td4~6<2j)M`6HFfruXMvS zM(QlFfcQ@IBVUl!sfJW{G6Uxj6yBjOQ@+Yi<X@E83alKH-U)>q%+?CO3r-IjLsa-( zxC^s|nai9GR}TFZ7~{|LJ@sM!<NgN$Z3qcZ4j&8S%w*;`bCW4xs<DIF7A(W$Fjd)y z><sP~UMDcZ8IhK%fHiYhY9_yv=P4c4NazBT3@?ET;V#H~WH#CwtBPxgQ-qgzM+_xi z<Nfh&_+$J8@sUiS`)ZQ3?X`?%yygczj&4ZzrLWL-O;t?}-G_cp^`hR8Eyz-$h;R`H z2o<k|SHrTA4EVcxLy1(L%KPP=^1t#iIZ>9xtwIJrl-t3I%yR}}8?$xTAajNJlWD<x z3;z-RJv<}4KYS|uEL;hUhGv_w8`xCt6W5Mk!~ftL35$i3f+E}!-$-BOjS8X;P}i!1 z)sS*c;gof160{29pw%#jq#|{Yt;j&ME_My`V-@ka_z8Rzo{Me8j$n7N6WB>C2}g;K zL^4T`--&~SmayQBFb<8y;;=KQ9lZ&puPc%d--2zRo-;@a@+;gATBUALw#t|sBafA5 z%5`N(PLO-bon%#d0?Ku%hjd*WAPyGSh$qD7VpZvjG*5mZhvd%6SEaSuT}@C?HAbzj zCaMk9E9yX?LlL+Md>*ckYy@rG2l8G7R^)iN542bn!TNcoEL5G)HiSV-v59yF-VRGb z+NztRTS9dJcYcu%L5DDmx<L=8TajK=5B(u^5_$>)q%~?0auOd)7L!J@8XiO%!IOaI z)xm9$&uBf|f&ai;<3q6D(Qe2;@J_f9(j2Xd9mV!wHcW?Zh2x-V>T~71@?42mHv>zO z26cyqL&JdH9-!Klxl*BUf>$`2&*!^~AEltY9LVfbd9Tz*94=5mV<(F(rB(7Z<uCP~ zI#4~Qi1KKl9j3@*l#glyxH>Wmu^@@?XLYgihfK=tWs{Pm_JWqeLy&vOA*2d25uOK) zRVOJ=<n3~)yjxkKPJ<f22jCrWBlsp%3EHfts)P#eQMajYft3}26<)2@2U74{d93it zcwqCkK`()|aj0fBN~tWbkVZ<6rMYrfFrw#bQ()h!0!`Of^(bRN&s&1$IYG87Ud5w| zP$4`HS%UnIBq2PU1%HN7WI95j>rfUQf#qYp@qPFe{0T1Mor%AJwATW1A0*O<y7+I{ z8}uG(#`a<9_+NM*d^0u~ZH&}`M?(ebVW9cus@2rP3Z+a3TJjGmQu-#|5-*Ea#k=B7 zak&VIzX)ykRa^>}1gt=1KETfu<_I=nF<-_F;Y9WW8)O@Cv$!qXdCtSt;k)y-_#$pI z*P5e2S<S8H9|&K?T@otC%0Hxj(pzz#D2SJ(Gjf5F0cF9JQ4g97bXsrp6jBkX1nfrx z>^6>(FUbfhn`}-lAOsvC{vtBSXzCxTg!%&PA4%;b2a!#H480;Y6SIkV#A2YkW)j1Q zio{L45&kb$8+(WDMR%Z=&>U1if1s<-3Si}QK;8qLUK>t^)8P^DCLm$G;Ku;nlvf8R z_rPiqrH|4(>6NrkN|)A)*M)C9$q(cLYz|w6d&uqJrwayABUTosb6uFOAtIO^u!q(# zPk4*GO}zn7%o>Fef9F@S4cWC^6>+?B9BzYs$D0y6@fO%q<Q6;&)+58vD!7kmPsx-@ zji=_3tBErFE?$lZ5iasP1<}u`a#U?HmeAoT*aVbAo&XI<qJ7XaU?eZle&}kXC;Uon zsFX_4QZcZ@RvA{FD)rP9b&)bemc@g@0loo0kMAms6~{=V93lTD?G;xG|L{$K#lI$u zlbS2n)k#nl2va-B(?maCkKe#YhzsQ&kQ=!Q<md)g4mHD7)FSyWIZ2tTc7apTz1U>@ zZ@eRZ2{U6W(S~R}VD<K+ZnQo&4cPAfm<4-;u1DvhbI`Tu71WDXz*=K%uo&zF>PAZ8 zf1&B>2<4Xik6c$7q~=3ik@Bbpb-^ffNuDD<;=NofUs-q|u9r;!nZ`mZ)wxP9d9uWa zko2cCUEZYZR=a^!(+WDL8q_1o1*L;J7`g_-D1#2cDq@{c0@(xg1(vF%vQ_D=4uz(} zU6F^#MI;*Gz>2*nmzQX9g|J6R7ZW6t{84VA)K|bS&<$qkFwl%G#TH^)v5nY4>@Ic# zdkz1?dGp18#ei5t`VGj#cd>yuQdr0z;$&dE^gte-@{CYXN|G<ikLAJgQR%g46b}p6 zg^A)}siJa7&4pgWqmbjsF=QKZ0x_aD&=uHkV0}&|b^>|rMl>XP6E}&zWIW}ePSWKx z<uq4l3q6v`Bv+6#$fKl|nn3+c9iZk=Nz^{lMD8Sd0?gEj=m2n&6JLc}@!eQ0tQ4T8 z59lW}6U_&|d(g({dt?Hl0JQr7stC<h^OecUFG>Zak&>Y_0b{nvxO7$M%quL;&S2Ux z{h19+CR3Rm#7<y)vo+c8;MlzIU!jA+K;S}v4w9ig;Xm040D-(0b<!U3yl{axf^~6{ z4+yuVo61&5h94qM<S_CpA_ALq0=bW-;?s%V<Q?)LX(N9l{stIzDc+puLoTK!(=v@| z=FqdL7GyM$g3ke%btVP_8`zO}0o>si04b*8h3FP!3VZ}=1l0pi-2hPgb@&)Sv=^c8 zDx=g@&dS5&W^x_5D$tK*(oU(7<O162g%~OQBXyEL1C1G$r^^>5uh>b1#Wb;0l%-#l zacTzi9bo=#z+1ef&Q`~&`+(=R9HQZ+a2_0m)JJ|prU9&1h8R#AilaWH7+^dzS_kcq z{(;UyyPybq5a^I7q#QB@;J-QOP4p025$%PvgR4OG)cwk0fGS6-snAmhhaUoe2mx!T zRH`Ul1Um1LD2bJ%CQ>`8qx8EpM|vdHmUqkf0FScrb9sqeO)iq&NQyKHcnrsti2yMi zfZU*OLFiwo2b8alQgf6pU=1~vS%74x$tg+*tmEcTTj;j>RM{YB04w)i$PuQCQ>5MU zDP<n;wW5IUdRd*IHURcLTCJhBR(pfJx#|k_Z}p98hekl>pdu&?J%)xtnZWX|R6c=u z&5|wy9hfNZlYdpdgZ28adKcV*slO@%<(twv>4&sV-lw?Krf^ThkLb}yNE75bJRTkc zUxAw;?~pWf5SoFeqM68Yq!l=~5c!IvqC?TuKsq;~!-0Qt5@`B0unb1H9m<8q!WQH@ z(gWy?D`1ZIBJW@uyaITB(;x-94A3`>&O}duyW`R2hy%0|0jp3P+yh<@pM<x;8L%7h z0p9@Dicu9MsAMbuD9x0Uz!&&MS|LV>l2AchA}ZoUX@}HW8Z9OYXSng~US>L@X9ser z0xj(ac<q?-O&%iM6_)V?KagJwkjfNgBBa7@psDU73CN#t8j!yt_$~4ceS>Ys<B3)T zMl8c&{2KNeYl6G*14KHxncNF3)+*uv{um>%#XxS>0Y9$`b`gug$Kf0BNw@>kVLVa@ zGr->!fG<4>vcL}j`Wc20NCUVo)Jol^GzD60J3t<P1K;)_koPc<@oJJzIw-xDyQl}C zp>Q8~Iiyva%4@|@LT%uYU6S4@ub|f8Y1~2H!ebzZate$;EZvrq)w@s{QWrgn?nbKu z+u?@)0-E6jY)4iiACPazpI}BSz(b(x;OQ3v=@peBfCK3QErx!BPN`><F>*j$DE!86 z=T>s@d`)4TI78CPCZL;Jh;R6jTo3jW6V0Y@m-(rpDAB-YZVy&xjua;y2Pk5&G)CU6 zY*cFjToVtiSA)QF>!b`<ZYnJRL(v|Z3*-)ima2%lPZ<ZW+DB!U+62tVcX&4P8DS9t ztTGI(23B7Q`Uh4ECy6rRHaUxe>1K31eUdU$Bgy+flh!195$6D6UO`?Ux01EVEyR6b z#df1Bki9Suy!#{2Bj_8zU2A|xJX$@kDDo&-0xR%>v=<=bS7LQ>gFpz|`8Iq7z7fBG z&*eJ{2ZXc21fhUW<m+&a*#5x3=@8Bc{|G-|-m>4g$NU1JKyV8Cgk)houj8L^Ke*03 zA`}bxVxII-zNpMsYe3JSZt!ck0WujGhcrf5fTwo>89ITKq4V)y$xI5<OwbUTFtwbF zAxyxtdx@>Z&l9EOC#p4FiC#`EBr}MX_(UuV{qw&y)fugf<|3n!doT<)g*E}-{x7AC zQbS1tvpz`qUC{#{z#y*&8Yf$PCOX7A(yss3u~WtsL~+P>0d8F?uay4=7O=K*TuD^7 z0AFh-lmMRvSbHyW0pQEZ$ZfbckcnQf7k&j$`8RACu>2M9j#v})S7Zx32hN2zB7IQ} zHV})&GSL3W63`nSnhB>Pxkw$f5_$(w;dpo|R1>f|AECv-=P@IP;6lK_{iXh{9#Q*3 z)!|aOJ5n1N37en|$^iMDWRNjsxcU_O40i^8zZE{L+LX^yCuzHMP_C$6gGl5f5()h5 z=|~pb7Jdu;1sJ0KPy@i%Y*H($pMjV4NinK*)GDe2$WZ~X4NHJcSRytT&7wm%Cv+7) z^JDqi00S-M-TXu$ANT@ALWJ;=>(53r{lc@utC(Kg8eq{TD$UeNYE$L0R7GU?wLB(N z6gNt&91A$CYJhbNs7KXV>PU4wK+YG`Yw8(whdN&!s{W?7SBHbWW>7^iwq58aEE8W# z<PcwpwS<j0iLb#w<J*Wg<Y>COHdoil(Ajv(*u+@TuwO@N|D_$&YpN4nS(Bi3Yk$+( zbltTTHMgj)WCW3f55^9m&ylC_K4><;c#nZs5CXpPO5ii^0K8O?_i?4bQ?0;E3qK5D zp*F!=fgJ&N;NRfo(3x;|W&%?Xz7a|Y_Vz#WUiXallzM9TLVjN`KfIS^xtD;`dBMl? z<+&8LFM~2em=){@{(;z8xd0tQO3*P_KP-gK1L!#tos6bnGFFJ+BNmX6)Iq8d?V?Wr zE&<jJ0(=9k8>79Tanmj7uhd!UD&?lq=sEON`Um}uK0qhZEhq!I3%6jWk%MqFtcCl- zci=MkFyMFgs^yf+(rK~1xLRy1#mTQ^NZBi2l4gsIg??adjpDlrYsI(HCwY)E5J+)7 zz{$yCiP&3e3y`6rc7uB%KY+d%2CR?;{s;OS(C_ErHOOE<v1ed?fs~#Dx^Ej2hrEOj z!N=izup-wZUl0Th0(8~{$%aqC|H46dI$}c)0B-@u&Z8)5Mrha$4OVG2Sv{uCgC@hj z0o!&LAge{t2*oe1=8v!^nHP+Qz0H3UU&x6-9_;F8IawMYNL(LoEjO2U2!BgGl;;5P zu7_X2SK&o)C*Xaw1$g5+d=s7m#%_U{sXLUO$`+-cx)C6$-_V-aNU+|IAOVO{TLbOe zN&G{c3-Dxh=ojP*nhO|%HCQUz7H+F9kkh48Vo2nq*-9Ez0H>oeYQ<)tZISPQ_gkvu z%bNh-bzRPtOTce`U_};7Eu>}ud%TnonU}Uo&&3PE6rkUl0xe#SZOGw518Jr*6gmQz zNBqF2Z3eYhPbljEgYjLBg|{Iw*b@9IaS$NZDC!7VL@0OyJ{dD%Mr;z6h{Hq{v5<TY zbnvgh2EN3T@vT^0OhJ993;hT@FbPRR2EwPImH?MFh9*P1fj+iD<<&=Wk~CC!$NkGz zVH*JE@eFqcXjdO#hUN+j_+)M$Q$37_dIVbsb3o8x8Pkemfq!2~8VB^;RB;K=+cK94 zc$jX&b8&(!DQ%%tcr&~g9uE9G8m<g*LMn0#u>ef>3K@)O5G!&JxsEo%y~Hx=0^LDV zU$c$=o7ze~Ao>tvh!WyFxtSV4Lz<=<jb;QrifTnxChFs>unHKCQ5c3jM9ZTUkRQ+j zwY#zhXwz7wiaHKj1}7jmk^=8i@5-2TTSylc3A03>v{k_Xj>&)(5NWupjFf+u9*K{| zHj+^;0w}7YI!>LVPFE)aJh~sS#Hj%5WkAgUyZ)2!uL3OutZ{jG2pCNs+yZ%x%t8|Z zPvpa#*b?k2dI32OJE1cW1!uw8$ZfP4)&x6<&O<18rP@lFCwB)Le+A%oR;vXHFJ0%? zh8y|MyKg&7oh?2615McT;tF8#bEFI0_8{Xixh^;<&*8vwZm1H8y7A3KQ~U^WRUIIw z01xPmToGE0jKrqmJ8%ToV>Qu_NIi5gR)^?K4bc41uF-YZwbkCCD^M>98OI2U3{f+* z4Gg6wo3(vJ-H7*=j;2CgI!zNiIuad#?IxDe9d)$~`wczxBQ(>9UdTsfyfjL@Abyp~ z0UTGLJdn?cdVUzwDO4-?Yp_-5bvT{%vpZNN+%|~&WY;%`)sf?<<eu$I4b1?naHCMn zM{?)E+5Y}+zJ9)0{;|Pt;lbQdVW8AcJ_$U6Vt~F2!HU@e*ay410eS&1NB#wzbt}N? zmLWB;IAS`Lr3vUV46h8$0V{ez^E*|ZSb^O_Luh@xD|w#|XuIks>&xr5(anf&2o0qx zyX7cgF?K<x;bbHSM&Z|hOL;Gkk$V9C$SQA?PKe`#C=hh%517w$>}u`=pC`c5d#RlK zMIxkZVIAL&YY8;T4u)h)*?4}rkRujLe*z0#BxlQRxt4MU@J17%lQ4_a!G6aF0FSXd z)rX#^Ii|g%+o_K?q#3gH4fMlwbF_zm#J;B8K&IbnhHLL@Z);m<J8Qgv%e{p6z&fC( zk=4MC_5qC1N+3ZBb{R{-fNz7Wg!cgE`U8j)nC1FX7qP8Smv6u=VXL!E*gY)8HRsB4 zyV(oO*6^R9FToeVH6fgFvak7p;sU9ud|NKB{Hf$CcAzP3fI%DzqC}UV<M4LSQVv-C zOVCfix5|Vc!xB6gc@7ZuV!#}<2Yz2`>=c><7}4uM14F=1o`Jpxe8CSjUN8qtWxm`$ zGn2nJ&stE}!PA}_3uR)%F{3(!`Qk#0GIJN^l@(w28idB!Dcx7I&3fCUXcrJ7d{wOu zeMF8E`!$dB9gS{-Ul*mBPo@(_vZCgdA>Z0IDj`;mb;qPf4T^{}b<%n0eROZ_R>KWT z`N))5B|aswUIG$(-PXW(lG34)@&&{aie(aNg?s{RLu-Urt_%H`Yk{%8W!@X!(>}>> z3N{Q{0>`{dTz{24D#<M=E$iZL>vxAbvq#w%VOyYsdu3@%k+twkkytj*+c?}zxGdLJ z|5a8=J$PrhL-3bCVIVQwlDjX)sUbKL8wI?H5MGG?LR2EJQJXbAbf@*R4QC8J4HNXq zx;vWVbR+s8eMuA0KGC^!19f&SLANGM=mYhobV%6Bujg9}!^I1dUw#HO_XMT3yhMD$ zPvOq6y?}pjWjQ7faPdCo8PfqgQ7HU5R3ZF4yoRaGu4Ol~-GD9V$f)5?%oKJh-&0zq zu0>Sr7Ew%YqFz!LsTovr>Nn~JwVwV<(_Q-r#2%7$4Ry_Rzv#@mQtdVEDs4w?q2@Qu zQ96eHOchWy=%aKK4Xb&iU8<9HtgeSHMZ1UQ$svRbJC0sK>H?0YA<_x4BWvMjAf{VY z-JqD1Rk8x?({L$68Um2cJxP*U%J<~?0I`k*nlepIRX&NexWhrWM{*RF4lV2A3i^gI ze~M}9e&~pLP1?r|3bpkQ_htGUfjCQ7bslz_>aXpno33q4ZzJYlJpm#pLTlhNiB{zA z<T~ObwhB21BC&g*CCGSuIyFplR`Z;0Mg2k?N4vrM)jxn|Oey8mBTyvrI~qi1BY(+N z!vh`Hvgdqk`1<s#2k)&vHkX70H$@iUz?p(KkmJZNbmi|Z8s$o0;^A&ur-iedBbQnq z>eH#O*f{JF(L%f3<c)}kd}r?yVKGH$tC4T<k>mlbV6GiKC-G3q<O;#^iRD_vFNthp znP8Z%d!}n{3|c<f%g5A?s~2}X`tOJvdIjI3Jm-wz#=)Y%>fr29VW>;!USNiAy?d8q zTWRIe7G-mslRT^aCBf^Vx4~}y_3mM1$;F<+l;UY+Z9Qj$!?<SR8?mXNFy{h8J*}K^ zjwmPU853B<_LM3?hmcEPt*$^8!Bt@q=FkVkJ-W9p+VI7&-mqAorfa8-(q7V1dXM3= zDbmu(GSuA7n4pWN^3kArL0Sv2={sSav_+W$9e}sOk<bLWmhg^w5<KsB_`3O*2Wo^u z;jwI8t^s#|UCShfZv@W=Vgj<iQ{YRWd9YFNdf<oO=^NlX?@J9_4n=Wg;(B!?f&sL_ zq0!(O+(gP@<A{26s;<bOnCe<~SvpvLHwTT23^nzf_O<37T};)Xc9F5<U1A-vinvC^ zl55CMWEQ|E%gGHSOYWiS&|~N*x-T`JTmw9MjMxkC%?9cll}ODXMq>Ms^&kdW9WDS7 z{cFIx3WKO(LpeuwC`$l7j=?98_2~9MR>o_l(&xyg_!^`y)F0T}iz=aX<6rpmODE^n z`#$x{m9H<dz7!qyPUK1W7<L;ir{3jW1me6~J(d0Qm^#WL@~J5)3XQuGyE`)4oT6!r znV=^CTU1q9_##FUDs~WVA?NVlxWR%$UW_D@CM{)nZ7eWm>7z9ta1&xv4S@Z9Ca#jk zDiLr!G!HqhTw>a|YUEA(a^~&fSF>Liy#M99n%}@#?CTVK5Ln|I>AB}_<Mjpp;tr@| z$+HGy#B%!yTY1Yq{b%|<;O_d+i*)@>A!~p8bNiEs<EF>j4<w84A)e7z<2Kv0I9Iv& zRIIA8>hjbH<vodx*s`dGk+<yek!s|HsBTd)_H46Jw-;ZmE)a^Cg&{iFD?kP|_(%ED zJczS(2~pT5e_#HALQCm3*BU>`r10&9IR04pp6{{qQ_0w(6NNj9LM2t4>pY|UnSl-g zm-mEgSJ~1MS8-CQ&YAA56dKRZP!1u7@N48?8r2r-tj6BvkyeeZynU%%v~7%-VaYc( z*GFq_(6K-lou&_H#%X72S88@pXYg{!17)(bT12JGavSIivL2)H4%i%|Oih)q3)eY} zJs!RmDhPfK?D9AE9rQeLNsgmsp3<DslV!g-hq>o?yZCPfP6X?R-U3{b#(FqfoFu!| zF~}qA6mf}s4I=i_h&lLn%noAmG}atDj1hP$uE8_0huD4WIf(qf#hzh7Y!m*Nm`07# zjL^jy`Wp478m9Y3r=dj8>AL7jwCA<UwTecee^4$E@5m(tVj_8fj3kqYw)kgkJbr|X z)h;$XGVM3NGl}}@nwfwxXiD@Tb7+_Dy5SgDrQ5X&sdW4sau_0&N>aR3Lw+D@Wrn8$ znS~WU&wke8?#P>y?k;{gHS4)|9=ykxZM$hbu4{sR<pggp=V0e+&;IZx2-3H(dt+wC zj*3h&4##`T57_w7h~U4BQ%r{($WC+*3@Ix>T=5@O#9HX`BaX#2C^xpk*a~>^-l#E# z5m+U$X%O>7x@1>(-~8}3VWT`j8qe<Vnv0kGpg%o+tG>y4U+degyakRE{tZkMUN0a* zf8n7xP^p2WkehT7=5%Yk<+%PF0dNNQD)=a%3pWy`!HsCY@t25Bwx!mfv5^kdG|&+G z=9X2_!DL;P9krg;%}zU6r*h3Rl_SdENU+8%w-;Hro7)-p=-yB}(JOKq_dJLLE0N{j z7}~?G7oJPA<>k^aVL3Y?<ncfDA$}|{E7&Idkr~ZiVfKd{zI#r%_+W1HA0xi?{F?i9 z?e{M~Cg-^GJ{FKg#YH8>6H23<W4-2Z8?g`kjp(fHW_V~UGgdIZ*3Z-()b`U3){fMs zYUgUY(D~$Yq5{4Ptq<6f)9_Q|9kzvBqLFlN!z5EX^H_6bbFS%#X^m-%X{Kq5ak4&A z<HI|`hoqU@_t0H`9q#~l6W2~>Q)eCLWM|0fa1Hac_x%z08XCyb!d0n(IvA!w4CX7= z1z(Sk$9G~uWHX4hToqLIUbtMS4~X424gDUTz${^Rf(YGVVT|NZKEPQRPnK#T^xyS@ zZkgs2aSZV*D*$3{BKL$wV5_N2?FfB_?jCg!9jEyCSau21h<hsj29?9F(qr`n#x(O0 z^D48=Jl=H57;j87jxwFI%(R`4>>G8%{?@WZzn0>#@n|{BM6T5ajLR*nEE%R{y7S}{ z#G?QXQ!El`xr*8geha%4iQVJgm}mby=aun!#;Y%%M;CSv`k+-BL9b}Gp$`NuaL$dn zhI-nE=148^=emjJ4wf;-jdXKlmspGKA1)0a=W595h>8y+ClNX<27awfQBFY}@bOy6 z5{PUX2PaI98y8t-%pjjD9J9~2#ue%O;>0~DNNzhE#>2G&K6lHqgrbi5Q}aIND@FAj zmpo?!m%>NbV_XgXCVx}tCQVj!a4Gr+kw`V8RuVDj3S}R^G@KF44z^)k(g*a1rr2b( zk&&s9_3gjfTH4C&$uTn$s-=vqG_cCas*S3)tgNkwmwO-oGMcjgV|i^{s-L4BOh=Pz zv9)jyWs!J<xAS4XoTO2|z}bL#UW*~<P^gzYM?kq?xMFBxV6m^7XRxz*DN}ehZ-4fW z%w6Bozk0sx{p$X9KGTu4B)4}#&*GtF-CU^msDF3J#Jv;;t4k3(t|KQ>wdwZsP3k<^ zkI>=_i0Wk`r;v5XS)?7>0_%rQB6g7Rbh`Gl{s{2l{)wn=%Zo5a2$q}Xs;24&LRUn; zCg<SSk+bR{=`+6!VBM)9G}ys^$a}$a&NIL}$@kK~D0m=j<JJogq$5gKs1%-tzQUH` zVeA`{uQrpn0{&s5@Lf17_5?AJqv9ChAa{tF9sV9(&We1t^j19$vIVNs)%9;p?X9;X zq=*fcb-Fv~A%2PXa&fafM=o6K@;u>_@Y=>an<H|tZHiGOE5O~QB9M=DUbdj`sgru# zJkc`3+|=+@^9^9vhtzUSl76^xj7c^!`j#4m=!DKjYY|U1cTJb=Ut{LP4T-~I4@NTP z1==zAYV|eGhi>^rZ$EE|ceH<CK<jVp&M7hEr)RzVJ|#0NyLVx{vrXVSH(#y~qDx!U zk@9trWz|aBsO&@vNH?&cwau3dr4$CI^9RA~v<lQ>crg#YMO4+i({9zKYpirl`iW+m z{;{cZgkZNuWkxQsueNS8w4z?Z(b8tNPiS}`!~d7>Z|@RMqPv%~aap~RlSS!8HH+() z{_V(iX}yR2UqeaUMWH;1ug?~5^E=qJfHA2av;to(EqsI7$aZJvF)2(GyM&LIH^B>u ziP|s5K~~l_Kk{;9N@Psr-%)d8?<agt-c<g6#j;AzD)p*3Gv)Wh%Q5Ti)2*Y;>84G_ zfT4n6F0e|ey6>7Dz@i?c^E88WOZDURH?&qdo_GV+@EPGe^G7hvU*=8oHucPKm6d%g z?qBda=lYM?-;2IRe%<-C_4o2W_GU5JS96hqT}4AmYdY7uM|g+&ZK2vM0TOFnfSEci zjgeM^T%h&JSZE*e3Oh>BR3X)mE~Se#^>hREtlnZU8)g|+8RN{mEd#94R@Pj>l&hbu zMd%5Hh#HYcP$A&$Ody6#$hW0Rl3AR<uV*VW-@{9o!60M7$HsA~+-bI$8P0TPb~2sW zMci$EiEv&xEIbkt#V=w_`K%HJ*t~4<H=z=Lfi*B+!b7>|(hq1HYQm2Ye^5g;-E?~m z$>xF9cM)*JQ^Pl`n49H3k^kn~na^)C-<P~%Y7!Z?Z{_S&4^+KbAr$-C^o7`<UKX=O zD<l(j448GLl`=KbBx0Y{w#qN+IOG<&R^Q%iv)nPg(_1tgu^VqlyrJgm^Q_}z42j2+ z%gVWuwndLMJVJ(W8t?1ko4H%Eihl4}dvjkE<P{w$ZdB5&w13$sN3Ju;)5xC`PUPoE zuaw6iE_Ore#5ZG<(9rN}<_G^=*?^s+cj{#AZE`SNPF%x8hrS29Fx$nyk=JyLDKBDk zq$WzR53?B~mRPf_pCUfl8r%2SHd*HwuTgPOKKstU(6ho_&tvvo3``HNVEY2@?q=8$ zoZwsNdG8+UaeD0mDBPc`54_N|Qdmgj7KP0Ilb$Z_QLaaTeKNSedRF;%`BMVN1D}F+ zW;*{yu7$3rtC$LG`j`Q6hvE#e{i3$m&Rfe_Pg+YN4%!b#4UVB=8^kn^x@L>AeluM) zRx{l+FR{kjGVD+7Mtg^d3YPY!2;(Kguf|%Y9McQa31dh7e%gustyU4>@P6MI_c~|T zp>=AUQyq=UHkRxxI$O{$zbG$0|8D-Bf|A0_qVdHqi#wOVrH@Oul`U}eaz?qV?o%GY z_fIg1DPa|^gtv)*OT(2;P-BD!*sBZR3g?q8skQW6?R9<FSZwZR{XN29du$tFpJJb8 zn{Hiax~ywUxlsseCY|DROt<i9W)%Ng`Ue_=l_Sf@&csUOh|F>6;q8IW{=@#&!RE{* zuCov+8pKOH%iIpa{ubUlo~7P}{*|G04wGi61@L2J6w(1cr?T>SX_|CV-U`jatW=t2 zp=Kz(hCGC~#|&6)d>+|c!)SlkoW)K`c|otkUSP~wp0~^Km>o}Sw`HU_t43E}P^m$D zj)})^h<`JUnVLcf3XrpPbM*bR4x%A!m74K=ctWZMSEuS3heVXxD@Eqm4p}Yc>PE(p zXSx{CBsv&ZC2>t66+hkHL3bHC93JSbl>b*|!PlH`-LjhIUoDyCn(MvjyX}L0F3%uO zL+@9=mZ>c^f}ChuTtQnvmxZe#k9Vkhk~`iPA6_V4hiee;$Q{H;biS&S3_>d*TJDRa z&=ID9?OybYn55|Qw)^IOhG^h>7HOyIU50i>oq^S4;>oIp(*_Kl?yg6!9^PZYL!4K- zscwdTQNN4x*#5zlzWLr}zO8}$a63K+WQVO0fier8bElR~D2^+RF1_RI?lXWjb4?r} zbrm!CbASyw$wNvO+FjGe^faPt<n72*J8x-jJgKXoo3BqWEwLIR-O+<%YsVgrmh1<u zYfUc<j6pC}jo1>|B4$~vF*YGO&Hmo9)JW+CZC~AVeFsBjgH!jHMk2N$L3tj(BHTaF z%-7Ic?Ah(fa-VQTJDZmEF4<R9uds2!!~FO8lM6N!ibZ2ewv=`*yH;j!G;$<3^2$PG z2OL?>+3uNMOTZ9*!Tu^7kwVHAXgJKm5;6uGh`+%15dv9}4$zY3p{|zkp}AYc>d29? zYZIC#bxo4vD@C0&yhAoJ$DD%-mgUg-jU4gePS7n)9qWh4iIJl%cQhA~_TnGm>4C|C zJt2%+4Sbu8QUt#@xW}DSdbs#ONwlj|;2`Igqd`=>o~o7ha)n_ye1##!XOM<?OWXBT zOxw*hOv$=$#9nxpq~|7uHH?QlE)_u+vF5}8Y=OFh9~P?Yf9N|Kx-X3;9vMTCAL7%J z1|>|7$~9_8N!=&fgd(9pW|50jK)28^P_NaD!X1!D-YWNkCgUfy1!mQb#Y~Lp9JMSW z&-B2s*wDx{#k$PyjO-HG*p_YHrgLK-#BYHIj;96NvJ-wh{?Q<JThS)xSKo-xA7Lq& z=Ud}$>AdHN2R5`u@GV;;UQsTq^^{IRmGDI0T(`yD-upVJ6W&6b2$AliNui!$F946x z2_n!mYOi5!gfFU1Y~|R_Q4Otw^%+zOo{X9B7UV1XllGo2O&6=VOzc7aRLY4@xn*oU z_5eGS)ARj#gx}9v!}<Pio^7rSXKUwG*L?5cK*Mk@bATPqis2=}uy3$e@BQT6<xdM$ zXV3E_&<KqLo;%5!*)V%Wpw*gKTY8bcfvJ-Di0PcMm$9y?lclNcTvYS8UWsYRlamJ| z?MYY_*D{8S%(5xg&K8d;(e%=|2x!QE^sElm|Im*xwlKf3bg|a4>@v2{9icvAQLs&k zlx_-L__}P{&;#FN*XmMDQBnTmyrFqF^LFJADi~jomXGHCmd#}~&l#A1w|J^E$2%?9 zF5EA?J#;s4&wI)>(NWv6$#va#C|pPE39Uj7!13xqu`2f}ye%wq6r`hM!#I1Lg!uC5 zsr{?GtunpJq11!rw<VflE|^ykkl4VRT4?%l^y`L9q^NzMCN$JgJ~k`4PPxzV4%>O% zWAw3Do*5cy5Z17;utc1~j}LeB4RA1p9rK>$tjyb6+})-4Pp~z`)*xfzso>+fatgmf z4k0LA+tAorKk`UqlZcsy4rCAYAUoX`bo^4*&4IWV`Em9!;9rl!N6{(xED)uwp=)I# zA{N^_L=A{O7gcKOZyu}7#`EDgwOHPu9D%l>mx)Yj20fHMMSUU8Vl>(nk&$@32~|ON z*mOE#Wn|;%F44~-C)jc=PfW{=XAFb%+qBE*v&4HOU$$_5zth>VI5RIZ=VflVpj)Ze zRn<QuloLK1YU8ivwmWK<m3IQf7w#k`sU~QF5+zP!*83gqcP^hND>zE%1ZR*fw9|F{ zwT09({0qo)OM%m{S9F{y&6XSKj?A<Tva~fE)J&zW0ZWrjP1bm|19VB+ZPa^w3K|Pv zR1Qkz#ZE$`Fi?0RY!lqv-{GhJIi5Gp2W2-)N0-I9n)tSdDsTfpp2H!&Ci{2jV}SSn z@UIOF40U8j3&W+!(siLKw=ujwm=fF<vT=TC1ah3LsM8pa8;=`K>k$KQjJ4+5tHvHk zY@7mBcwN4<-0DO_Y%P0&<%6*tK$Oc2etkXtckMbllZeLK;4{cU+HWSm{YLDy_-%24 zs0G$hy3W`YDGp@FFY}YW7oL3gXV*IiS-P_5eZk)ReR)N>FLUqY#TP^sa)oilf0hg> zD{+4G?DFG)mAS^eVY-HM{7>A=92ZN+mHt`w$T{BY4qDknE{*HR<!~uNdkJJ95IKg1 z_Or2F60?#%C;gjvBmPS4oS2W%i=tgo<82f4(~*A6ddJS(_TTS)+n77l-9du2v!jyB z<y7dN@+j7A-azrtN%2oUPB2Ihm0r+%rI7pK>si_{uSS;fN26?0VXpIeaI@f5=7B7j zJY_0~z4lf%zzYamx6c%`=G(T}s#$JoTcKTq>46Ha7bV?`kC&L7qW4j_rdUgT0^dR{ z#3yQ&wz=WDdA4mzlp1Y}*%r0bw!>u7{DvNo|K?|b=#t0{ksd=7UY9az_Gs#8_R{k~ zR^cw~JN;hMZR<|^<S2Jkji{ye-y+=Rt;XegT<6xDroH56{9kk^+*zq791Q>NKkh!_ zm|c3SBvg9Z`OdT3e=c}B6c_sHAMYt}#Ffr29#_1)bgyfNKa#QWCc)2vmw^0#c^bP< zd$tEUaSmk|K3<crTcoS0X-U4q{sfVp#zZqsTVvITe*iCtL?&6A8Wzwu@mr{ZHX;_& zS9PS(ZKRB;x&ZkHI#(SpZ55(~+d_$`lk))QzgaY}bNusNN@+rgz9hYDrh8-H21D`x zg8bw6Oho9tU-f<WmjxFwt@tNme-P(8BP|kUvr|I<1nLBPG3`Vf>>)mA-x+2a>lre1 zL$q^sUgHc~n>cOC;MB;fpQ<!VZCJi@qB}Y>BHPr$a9r0_>!){7Vd6dZ7GyL=qJ4=5 z+J@$)QQm~1DQn7)EH^qnY#Xk74rj5;yc<gO1-o))WJ5W9auf1L6^4slr8CPGluj$Y zT@cRwlC8^*%c-4zyZD4N+4n5Cok`;Eu*br00w2BSU3<#zlw_1zor^p<ena?o_7S_E zIRZSCA^bx*fY#F4Z1dvQB=0PLpaNDtoM?*u*Y2`BGuAO2G7L3F8ft0wU?I5$bIAic z`a5cRuQ83GubMg$+oK)P_3UQTXlgvf@iUpX;Yjuje_a}=+>=hT|M(`AMHj5j#<J?? z>?l0p3<T2oDROx=OF1fEmFmiy)e-1v^0>C9(QK)06->jlY1l1kXLy76iIa3PuIWBc zsFScm-HfIZqbN$dP2b-*&ve<`-FhQpm9354XRl>HYT2SYgWphRi+8yzY%CAU6%Y?G zU2{VB05D5&`gq+n?O@$U{VQX0%Z~_${ZypO&P60!HW|)oYLH8?NyuF2m7-PVDBaaz zYBj|!E#+G<oda_{Nv`kC#=u`(>5mSs5B3SfdmB666;90ElO3D8tni4VgMSg*5o9pz zk~avim=(c4{GI*#f)lvgiXO)_uXR220c~A+JB}lq`WeFT+S(tcdJ(kkwso&5Ue}&n zj~0Pk|Fc*>YPXIyO)_sYh4c}cY4~O+UV6wuY=BwFeHOY(mqeM13D@x#x+^&|%9fSI zx>9^iLX+4o{40=)(2|`Io)8)nsu@-poe-A4!*ehW>y0Ku0>GThLA<RAvy-o+Xiytj zo1RBcrB`TL>35o4_Lp&m<r=0Qullmu`>KxAzU6NvoQ{gO-Z3~dLBfE}RQpLkGh#k~ z7eA+<Ep-3buO_uhT~w`o^|n>krCf=|^*z;sK-1DXxo0x(e`kIS&KpyF+7atX_U-b1 zcHJtiRyaF%T=uK1>Ddo*yA@6=HMryanou|94l9Aoi~8Yp{;#gTN_Q8<6@4t;RQ9{u z9+<%x`T9bFctWb9Rz|$IQ#;ezGp29i(sDCXZY7V4-(@c`Ork897x@+cMm5&1)jp>m z;bFBEe>k|=|3|PL*IC_9nvE^2Gp%-0h9(Q$An)V4f{f#>+&i(k`Y&`-dBUd!gRWr7 zutK_Ed*MH&i5@7#a}m;Sa=Ls?x-Wf^Q=x09M843rGYm4WGBnkG!fU9<xS7EMZ=QR- z`<5r$cQZ(`?SzK%d$lK$gr`$&wIdCF^LN|q=&aa*al2#2+G$gF>L4^r$YkOeH#=T@ ztTx9|DM_<g7p+gwH`hPXyA58`Evq>)ImQxqEDnon60<lGk0>>M*3P1S;C^%=cvnRa zu}Y>qNm?V+1lDqJ@RPr}zs!F;ct2bl#7%#MHNi&SC60wf+w&^t{>b~a__6c8uVbht zU>T}~@!)k|SMMlqjDKt>oxh_zMSmw1@IJ!{@*7@=jzrQC16G%MrQd6L9)U&}%(%Xg z8ilt;NpwH9p3KnF#xdrbX1gg_zkptZ_k-8T|AL&E8|-=Z2)BUG<VG{if-Ya!`^a0( zchnyfTE`TzQ`yGhd;SOR_Kq&4?Mu@frS2yIBUf1-4om1LYzsoDtZ<P%69yp)<^;D^ zdJE0PDDn#Bq^;V9`dITy`-ixslq0Dhs;M=G)VNwDTz*Z$>Zonj<Ho7FkMw-fh+jZL zAe;I+WJ4#BeGO|OYbN)tTvWsKi@oN+)JJhw^n$#~JF~!&`PUcxTi@(?MSWesM`OM* zQ-a4`Eel)x`2F+L56?gJ`?4=<P|-a1pCKEMiw}k6-1$%y-x25el8QyY7QQPKic89l zx+pIJ__r>>tk5MkLfQk*AaCmLM)Zt*m$*22UQ%Ryuc#>NJN;$4gxpW9&?Xs^%r#B- zbaTm@kXhIeeiPDjS7jYGOcQ6SV}&ef`U%8hwSbRf9*4>^gZVmgAv6$ugN#r-Onc9p z;?g`McR}8?;=S(Ap)EoH#L^$i1I3wK0RwYu#Z+h$7E2Xt*60>$N0T?;py*(tf{f4Z zKOCIOQetbRIgFt{klt`H$aFmf$KZ`M>E;Vjvl7yicO^ZJOSI3_55X*Q3do_&;WhF& zIFUd#RdlO$er;pz3ynd0NcXpKrS(YUfY{*)=}G>?mhm5=Mq9V(-;z5Kr_u^!f$PEh zUTdXzu^wj&LB3J$8?LSH&E5rpx8Z%9K{(H!W(S3$eS4kJrCp1s6b~<b<t*_o33dhu zvqzx6_oz#8G;)UAQlLKHM(u_DLhaY|)DF`8LG2`#;!D6=3M~1RzN*#ed+EpNE`lu8 z_2g!v0Z~l6q_%1M8fKab%o9Mwx3ggbZNauGYx!njDA3Y()O*6)&*$=IglvFq+$=tl zzp5*s>&i@Fa|rbuE~%Y=FuQ*CvAnjWkA08%SY!@WLpzh6g0)r-azjGT{Tcon!86=M zB>{~f_LFm{Q8c3&sW+Ps*?x`LnlQE8pb7;Q=T%fw$|Xg|b&t9bal`!Fc+c>MVWOdy zAyYp~KTkJGdtJ-vi_Piw&C&63$q5G&dc|2H+ZkQ>CJ71^x+a%~i!)0`J1)6r`JVgz zzE7^i;=JtjUmJWp`kws|{?ab{Wl^T<Tfoc?;Ht1kLfQUZ-ePyUE6-8cdBo*#@A6#n z?Dd2_0q-^c>(ChfsPY>1Q(N^5%#S0A?0-dy_Ib8-)<KpZ=G&$t#$`s@)XwzP5U;IC zoP{Hlonj+#s=OF(PIT9N(LK>SbT4TPZveHFp77=Qp+LJg6`Bd>_)A=f$qJIby{-($ zx-!@?(D~e*>|YaVz@i{$a}s!mH%71u)x`{8v#Y^%kw@S?y=5?~7^F;o689Z2nu~?b zvR}Ok7a%x@HQogIHg)jY<iB)@_KO}j^|xHL4z!BEM=#dvv>NIHh*b{4Mqu}_3wVGa zskhWwTBi-`+8Vv)!x3NYmZ*MFlcP>V9gCu)KH4*EE39u!A9M^^6YZ+bk_LmfLO-z| zm_C37O!u8}4{)_{@vicoGu~<bKwxDM4nFZu_VxGf_WbJU?O{ETFV6qX@AXgj-}067 zP4(XNlzE=`T89>MQ>0xgiTsJa0`ELg=zR1oc84fOKhc&mi~>HxQhir#Q`$+MCudMP zO;4R*SYcjo-5Aj$V!P$Dp(Fhqp`{Vw=H9`Mt0jv{+Lx8Mh6l>?ch&LuN==$E)>3BD zYMLoMd=vBYKMi|X^=aITA)nlZOBg#jEFvjxT-<V7E6q4%duWS$by=IT2kxFsL&!v7 zx^23-+6tP@^dFjZ{RQ*l$i#$c<@wYRRfeS&q+}$xq9#RjHLo(385SF(%!JhuQQm&V z*2DVRctn?~ouu_?Tj*ZsCDZ4KWs!X&C2L1RGzkDLBYGz~9v3GRRViv&tS>=|Kjd%C zPW#^b^Vbiy57R%k`dT5odr^^VesDB+$8KJ@roW>5vg2IYm9hfIFn7o|Cltk03|9ya z1QATy?+PaK^`Jy*yRpc&BBoi~%b2B+=d7JgMnkN=hklD8%~ZvF#{9}W!i4MX)Dff^ zhz8%2EYLN)g)Z4r-)@P#Wi8W9!G=p+m~VkRf16+(<{&qQKftX4+Iq7$!+D~_Uo@q7 z5n#$bc$<e-a*T+9cP(gTgw$5p%3)k7XAm#TRUjJVS{5Kt@HZI~o-toSOG0T(31FRX zpr6P)n&rAE5Do3Ey$Rmioucbz7-TAM@mp$IET-oA+8Qfa3;PAR4BtR5087-9j?@0o z?gjZo9W>1~iP{GG1EzBk9iz6!)QY8I21cH;9yG@4=F!VZ2Yv$NWmZB@AO+yPcT6pj z8VDh#Rq&CwyL+hXuxq}1wP%gDukWI7pl__Vt!Jzoa;LaoxZR#TfWy8LiepZIx0utI zRpIo|tHAd_qi_ShySxlKjj(7E_6%78?N<uH+uWVh`%oEj7_Uq{q}ON~Y8UAm8)h4y z8SfYgQ<<r$Wu?^~(b(G5^igvI-6C!Zj4r#8HzKQD)~8&lxV?8AKOg-~yVO)OVuQWR zrW!9{CmCIt<44;2y3b!dsrqWux9?^51cSzCe-?KxuA1GbTL|~$`ui8TbKH*uw*(on z(H(TF^sr%`VUe+i*=MaBnHl3qxK{2-`BN#`i49|GMl#k6^GV}dW2EJf%@<WJwpLtO z?78S=w(+JP+RM}(VleK(1`zw{$@&!27t>jzq|2ffq3z^jOjX}x2MyviAMz}@-Li=9 z&A&|i)b!(p4^KWW`?@Xrc+qy(&cG*T5Eo|V2lsgoxn4R*$7DyW>zU`e|9fy~XkoBn z;I_XwfH2tt1|KHh>AjYH_CZmnBl9CxnJXD7!!;1QaT+F=)|fNQ_l+&}?`ajQqc#?F z+%&+nF2^ow=U6^RPL8oh-?U!PRzQ8?d*<Q);^-`++s3*sELmh`wu9}InLATvW@d)z zl$layW@cu_>697MCQX~BX~SmOmJA}>-+jNoSu20Mq^o<*-uv0~d8!#bJ(M5Pfeq87 zpu_*km*Iiju)CTk&-<A~gQMuP;g?_=)K=hQmq2o67|70!iN6PF)>FWp*gXCbWJ@~7 z%J^xVm~F{?V$O5w*sMehX3@rC@OCPefz5q)eP!TWF_|#qPu)-TIz=~Wec~^)2o3@- z^i*UiHk@F@jiq_g6H>Qio20*Vj{K48s&1uepmn-!tF^WnGW5}mRLqdv!K#aX$8o{J zjbcv$M{;f6EDRU=^KY4rVIOrnxFVPl92Gne{D&G$U!+s%a#Yn|n?PHC9dfL1uJ1It zCa{c34z&;0jUdr`(d~?Z`y||ewxTrNo)F^_^b8z`w-VL?o$9PGBe4%YCu)emAQ`g& ze?qL0w3lC2ebQPCFN}4~r1`7KqK_&@;|=1E!VP^lOPvLt-xG`CWi7pDgWIE;cscZ# z_)pmy`Ca)N=^o4y%b<EY$e)k0w`FR+tjMijx{I2aNRh799Mk7$&&sQ#^@Q`0NuhS( zwakQ=UnCbR<#&~Yda^o4ovOX8H=6&kLCMEbhNLD^dL%EmwKoqoG|*YK6SYnBkm<E0 z({|B5%${P)G&eM?RnL(bh~DT>Kr+CvKZyGhLH1TYT}BbNMH7T~;kkaqO_nw(z6})K zw1UsSp8Zt+sQK+{_N%OS**(5T@^6*^-$MWiWrvHy!$PIOIex)c>hqHQ1IL2LsD|_q zdNBQhZW^A>?29!)XUIx5XN?mqChKQ2VO*tcr=sM$Wi@35vhxZ;{Yz6%yBFN58;LVS zkAz;#-bj0<O>70)L4I31)A-(aMt5G(8ZQMdy9=QQ)Gg{hy*o4oxY1t+N&jVEdrvc$ z!I|r536!_vo>YG)dQ3FNwU0M~wMcKoCXzyYY`!p=cX7@6MMBN^0>H?b405UqW4DFn zLIsdK`xA1(r;xeWEaHNs9{Ac`*WNW?=6RM<OVHfH*iidT@m10nUyketskdBs0n!2U z;%f0ZakhA;xFN`g{wb}k=%pz#G_p=hx{!PzX{L3pVS}oIBu}&?HiKOjxfN;;bib2P zmYu@q^Nsiw?AOR`x=(Orph9pZMbSw3P<Vg1AmpM&bWLh<@OGeHpl;wwU|_H;*p5Q! z*`a=sIm~BnL2L%J1c_p!iF3p)`~x~e)D^-K+3}%(Z<7Ii0XcXQUJuffw?w0Wukt6c zOL|70tgNgmRBZ+d_(IJV^-4ug@gsOVH=H`=vKGGiQTA=;_a{Hcl$7^h<pV@d?R;y; zl#R)wja7-tp+1E(KM#6&?n(ahg_-+{Vv+R{lWBKSRePpx4&mc0!3CZ}?tA32D2y<Q zy@r$KO{R~!k*ZGen(`&8a)#fwed!e|C0BJ-E-Sae`dH11_n?oFG5Ah-7ei)pyNcP> zOf~LRsa#HODOHZZcSCMKx99>N$N!T**Ob>6X*(&W5#tj*qapuq*V@t^#np;eml(^2 zl<g{U6!iKj{*HVt$*S|ULGJe7`DKlLV}c*39l;aiSWior!u8yJ$5%J_Bvcg5VY69R zv}RaMpQg5kLd?R%2x6oP+zhP4>_t|GF;_DScv&7wN6JU2O10k%3F9q;NZV2#KrOL< zB8RA+RL$^tj)i|q5RKfJZ}J*eseg#yLo#kmn4!*7l|mOIrOYz6G}<ckmw%tDc}brF z!|%+3_a%0BdSGP4DEtADAYFI?IARIlH@+HI04{+WFbU=-^oeO8ccm3bK!RDpBJ95m z%f#3`eqKBWj$-$uA5{7JxfXL$r<7|c6_Q_BqlQuHv(nBO49|{d#csqGLpwwnD1&9< zN`eHbyzN92NkDd8HBmp?5=?5CmXkgy{ZPsV>rY)*c^~wWFd$M3I8}-Q*QlAmmotH1 zEa><JQG_n<M|@R$ef*!P%*a@7u24=`#l8vGq-_2^-ls0oam4Y?dCI-R`+)>L>qwZ5 z3KbFvoQy03JNky=e~Huh4r~@G25g8!&`PK-?1kNc+~NmG8VJ3GK}53Tg*;WWPG80N z(AeBm)0AS^qrNG9fqLVa%n^$5wsNj5aTPu(m|57Z<gH6djT7n<Thy#^y`_%nrLrFM z#kW6C@gePb$rJBO=1bKQS@Z=lNY~c9(O5&(41L1v^`CaHa~F~yBF~_D(y+RszJeap zHd2jJ5K2aK(EL~Gj|#o2N~;g8idXoSl&K%D=q_QzK3QK)Tl2*fSp{e1)>W{IpHttN zM}VjFBvKwET34esNoD0w?M$G)_f~BY4};PfDlo_M*0HiQxujxoTG8JH%kn$ruFQU! z+4|GK%$%%0bMb<Oj^^Zf>ILl!PA0Fo-#U(zopr2rHztn;#i1tQiQo;d8LAh`3NK=n z2^#xT@j-XkoN8NXt7si=I;G23HBzjUzfnw5uhG>t-Y``)ne>;GCx}YWR#pP^s5Rjy zTpV5`xuyE78*1QmdsHs*cz6rfF<cT{7VrdGQvK+O^d#z9U;??uGs^j~^nS_J(gx1k zo}@tS@Lych_!=l3-UzWE>9w4z%(h^60R_PrKb5EhHf|F{2Dn0^Yb?U|=jVcK%ubNv z=?4jLFLV_#Np@02>IzMz*46fX_R6-N=IZ*!DzkJxmIqHy3<F$^15iigGWH9n@jSd6 zF-A;CSIX<EqxwIrH<NFqInqt(_mfM_Ycx{nLZn{2A-64BFT#Zffg9hykxL-Kg+xC^ zUWc`zzo_!T3Bi}tfzb3w9ArG_F#98S>C=H!vYXfK_PQ>*R=6vBfB5S8?*_DV`^bB? zP*?%{$X_r*@=khE+E}ua(BkdULU?teb-Zgl7T*reMh+?xRm74Av*f32nW}}Zx-n$B zW}ay_n)>P~RZwzQRE_T!T15_Y-7Q&D7%OO7oZ{H+sU3XIY=qlL8Y%0kcdL9dE9#BT zacO?O{oLSP(>H&7X!Ffk`fqp|5|uB~>{aiOHip+l4S}j&+`Ggtj<ksz@s~1#DhGHZ zdTB@L-W$Z$wJAB}=T~}O`9~$BLXWhew$+CInoIx%>!f#?%O$6mBP-0TWUbh+-0h?b zrm&`#;)A3ENb%j2E>pBr57su(mD6rko)O#OGA1>+-@T=jDV+CvOa7-kNA8htO!k;B zcQdmxgI`YPbj)j3AT4d}8t#4T8{~W7k-EjMY-b18-|j}<zGPBB8ypvW4SwbAq4CjU zz$aN=TuwE{fLj-Wts8DzXwEi_*B#QJnm3vax~Ybp#skJfhQqo}>Ls!qY%0`TSjSFb z=CPe)8<9iOg=($7zTuv3zN$>z5O%Wy{n%f_SIaxW>-7E$oF=>7Yh62>ryW|y0LLz8 zANNQvO_rk$gtM8$e7*R6;4Uf!OqZp=f0GN?6n$f<u~xBZvFfo!!Z&_D|Abcx4}^B{ zeUM-D1YLzEOK!`rsE_D-m`~UyCaY3Eq;yRBU@p=c<TJ6^P&~FRRx#c)VSsx91u+}1 z4yZ%#@$SS;v0AoS*-)2Zo}N@AO-Qei-XwX3skdq~fx&n9!BItM5Y-hZ6{|x{A{wR> zTaMiw?Ho=}=|L#q^tTGu3q6mv;hu6c*^1Hmq0PbVWUgn0E9T%Fr(C<e@<3NQCGwit z&a2{E6Dy#>qI1|x$ppDpIbYddks?L0vx)jbL;fPjJVj#Tp#o$9QCIpvwng4vQBK)I z^<LdmyGu7iFE$J|?9!)c4AN0hH2kOcda*8lWA5+VjC@V;6<4?5ceW57Ks=Kymfiu$ zjs{pSVQ!#T$(`ImpAGN(ypv`A$Tc~(g-ysZMX`36)}Yvq>EchLEr8$c5Y;>ioLE4u zAFiII>udO6ykxFx`<8S+<ydODwExm7q;E;vl5*1i&hpgs&X{dHZ7Oe>Zd;IiGYu_Y zqx^qqb&@ul-e?ZX_lfm*9l!^APaKh+QRJ)4>Ya+&;^S~F?hW<SbGr1e!r#A;U(@sL zKhNf_%$b}O%Y64~Y$pGu@3+X$`o&FM70BvAHW&#s_J8p;@U8M)AcqB#sIK%z+C_PS zt%6U3DWQ{$I<XA@SMf>L+$^#+uv0(>TyHKg{xU2wOgC&c+%Rl3?9|WIR#X*AzhF%v zJ%2Qs9m!?Hu^}Qa5s<f2n>3?UMY37MdC?DW`zi|8rO{xN<h)HhjH`>Ql`GSg56+OL zz6-tszP>)jTkPHG8|m*t0TqpX6e|EHnGIWwUjlot?c&WuAFQdUAbyDd!3+ZVF_J0c z4<)K2&oCBzbxZLz#8pXG#db}O;jCq${Zi69`v;4~utrr`N@J}Nxd;Jwv6n~yeSz)4 zWavUz2Tr9|iNi<>$!XOs!&>W%r1az)_E{EM|DWnE@TB}e4<Ubwz>yF;!}f^upbG-q z{I<YlYHg%7w*l-5Ec_6rcepoI;J-*R<mf<M>I>};)eVmf-Jq5ShLKrb!dv87<Nb$( zsj5*{C@;#vhKeUjE6e{>q$$43eo9^tpRgMU4trx&`MvCMwi@q@t%eU_rzQ0j9n^%b ziD8gYW;~|%Xjf^PsT(WTOCxCG`1<IlpwTCBT`j#{e7pEcsoQzY`zvrUjPZX%HL*?N z)e?jl1lb}L+?Rf}`YQfZ{=>e^O}Q`1E`}>2m*s+5qGqM{kp@Cp*d44D91*I{`;b56 zZ#5P54qZL4cgRpKR9;a_4U~0N+L?-xs-3Ghuez&3PU-^NXwzH$QC(1%X&}v=?dOu^ zDHW0ySqz3OwN(L2cM$1#Z@iH>Asw$6svM`-AWgzALloC9Trsf5v&WH9qAEK7d+pC& z-!rnReyaK2`*!6!?nA#XqrR{H{jIEl?|x7hdKSt9UItmj8EF^gBDEuR!)Rz3^(k<{ zj|N6jfIcR)LaIo|se2e+n7vk~ZN1H5DKJem<{R7wv5_+r7%mvZhD*A}nzo8}#ASG$ zFdb}^vzRX2M`0>72(=Ps@m@lMe@80A-N5d#4*NXfpf3d0`I0>IT!Vnl`^vG{`Oszd z{P2A7Ecd+iEcNXV3<@DkKYn9856(t&@dv~UVmmR9=tkt=QrwM>MEb*$1Qt6EcsH&2 z0{#LZo;^+M5%tBtN{#9=!(7|il;5fG<b~Et`e({jl8sn0(oZBq&ZEQee?W@i7)FWS zCo+Z0oQ#{#cSzL6I>;yJGA#K?RLY{1Z2KZ}U0o@-CzWFNko_VXU^p~|*2l70fA|h{ zDe&8G4b%;WfWPoUq;_;*<Y4Fmg#|zQrT%<!i$6Iirf-BEhsBYt;R&HT;FqlHKS4h8 zAE#bKR`S!JcGyPAGWikUfZ?T0#I-Q7=u`X$e~{hAgqh7;TI@HZ#V5!=Y3rL)?dy}# zlpl7~JYAC^?TxNTBn#EJGi))d;`Xz0CN&%njP)*aPAL0OR^&S5KO4OSZ4@_ETvdFR zR1h_ec6D#fzmT=-<E@W%vy6FjN)v%|{654%yc8>lk4R_eTI{~CKK3&4P1FJ(EU7E& zAWKLjVhgUs@~}#h9OZYzYx}8mX~n$CMOCC#epT%IN4IjZG&c22%Jrn0wr*y^a6t1? zSzDo07?fXB*_u<jp?a@&nChE!4?Y0t0Z#&Sm&edAK-Jt4-^f>vE(|_!uPi?Db6-x@ z=Zug0-;3X$e&6xq{!D4ssISbosd+;Ro|QfKH4L3(xmXlZiSnS=vDfU;@SWfuvWBl0 z`6D<dQjf0>t-_{C^A$@~J=M!Jf9jGA)lI7{Uu;pk#eT+e$~Z>1Sv6bsS=>URmRD6Z z(x|i_G!Ip$q=Q94CK?#wQ8+UkkKN^|Fy99IB8w<rD(lEfkv;51@?@#LV9Kx71(!+& zxkvlEQ!gkZaJzJKmpO(yM|hjj1Na}J4DpHoB@D#|<bG@qH<ODAlVK&HQgE7=y1|-% zWu36|iE{jts3ziwEah?&kHJ@`ho-MFW|;}LG+#}>bwgEMWc$DyQA!kx%Sq$X_0mD& zGSmit1wMnV+(a<{R6_m|Z<gn%`e<ePy?U*_pU$J5piR{<$_#mJDI(sA<pI{zl*DS_ zpNX<xqe&pM{w~ro+>Krz+~8m9ed!FBjw#J88|WJ96$RRb1~N7IrGiIzBdCRCoQQFR z3WDeS#iTw^m);XyE^LJ7;4`FugRIXw$t-*m;(-RnI|(4kDEx|PpkmP}ytB-#o~&<f zo^QL5<W1UPyJgH#JtUSS#xfan@8JI6E4p?xlj|9qA9Hf;BZYx9Z++K!=LdJD-xMv0 z3+P6|g-wE<M+>|M3#Wcxl(i}=^PAy!d*@gR5(Xlji9(PWss&W{Iq-0}i)a|yf-p-F zphSI^b(3a@zvEx9^7sYu3&jh4JG-gej!J{8WmjKZ?Nz1J@>nXAbjNzlTx1+$pmdeB zHPx4tU6jeHeQG=KWtY<z>hd&Yii_e}$gub?PQ_yE0&Y3TrHbP1gx$<1s<Wqlu`922 z&Vn!FGIxDi@`?Xs`JDSDl&$^NFL&wBriF_gf0MRwRo(&>f_(Nu=#JoK&V-98B3M57 znD#_@UYa-tKSB?S=gB9iW@?)0e(MqAbz@W0Z&NFCrfId&qh~>?Vy^5f@e*$+J}$K= z-l)cFjk>8SH*OXFqKaIXi+uT$e-)O#p!`sV{Fkntse*C2YB9ox@*SnW_#apDBEM&p zjq{zOvO+$Z3oP@M^R)3CB0q%o2~W`a^5&Xa+6?6zf`h6GuYtGE&oxPOz@v)Rx_0`m znr8BII0H@Lt<kArakM$_f%*}GLaOgzzGdlXX7wfN1M*$syVwaperYZKB-^7Tl?wTJ zd^Kd^y^%(tAl)N6F@BU-tgdRRY+GZugAH#$^IX0}ybO>mKcF(=tfamyS+-Sz5w8&m zG*Vd1u8LNTB!%0B?tv}Xdg@W2CHc`4bnSFbchF^{oGZK;R7Ym8Fbgm$2gFAU5oS^- zE#UO+CeH>v;pJS51cFu-pOyYAJs|Fcor7)hYWy{pW9RT)V^HEElrPfZRix9EleHs_ zyRAKw$&^IWSo3T(M+}DQayP<O`W!Vhv^iSLy%g#RZQ1-#805$_&W?_uu5-QybW=7r zo(V`6y<i_-Av~I#@BCSuQuwBTEUM>_`c}~0*p9J*iAK;vz|JWI#KTUA4EsQQk$U9^ z74;OI<dbDpWODfkrBb`!xY$-Z)l`0Og;5oAD$My~dbz?>Yw{%99<$QmRo7RPNiiue z87tidv?H~)w{e=~u(j0E*OaB5BG+L(<D1#O(P2>opm*$yXC@ZJ(>Xb9a5pK~n=|8M z==HUi4__^Q_c?P`POrS+uQ`Roi)WWkaxU_&2+E_Qg%aoqQW*`x4`M4BE3GG4*F(p8 z=PGX@HJEe2uw;;`h2CKtV7hJGV61IoOv}xL<(egK`On<I&|N)KW+J*HM**EH3!aEA zmef=HR83c(Qk=k#2+35wQ&ANCl~q7G5V~bzy`;YSKkX*<Zb?x*K)rM>DQaKPr?9l7 zq5FsbUwTbw9o5x;&-<5mE_t24%B!&>iix@*hGDv&3NxM*uf^nsCr9fGxuQ~u6X?mW zb%p9`ay<cPL@_zPk$WZlfd0f{;zHSbMH{6LoN$YYHuz<HoLDcbuT%hkXpuIiuBo_4 zG=L5Klt|6cjZiq69Xo?vSNyBnZaiUpp>M9)E3Yp;hh4$W5WS@?c{kM<%^(1;F0aTV zI*4qsr_9-K8rVLx47Z9*0*UiGG!uB~%XGV(JDvMo7d`o;j}k=<++yCwr?KzD`-3}u z)jdl*>&cGv4(490ljsR{oOnzu!>^-)Xg?r^c1*O0PmWy`5Wqk2@gCuA`~mz8`z5Wc z)){znWt-i0%RFA6s(LHQLa#xI*e}4sx)^H>w5oGLFK$6}Zm4FkIdFcrDBDshcL=UR z-#w}l^FbJt_z9Rwq%fS_9eU*-;e|boJ>$Ix$!3%*(weu%n<iQ&J^;>A=lH<HV>l1} zLd*tfxyP!wriJdH?wjtYUT$Pe>#UEHL}^pXoh?t7pH=>Ldfk+M*2RW78eEwpZ7)tD zmJwHhLr*MERejJtGc+`f2T#dk{VnxM=_({Qc9@&Mu4c=)Gl2J-CyK!LW6dMKJ-vUY ze0lz|*Q5Lg<sY?sG3H~_+>gagz2}3ILL<X}0`5;Rv^X-5-7Zv5JcGVM>*Dj-4b*eb zkFsec*Gir`Hu@Td2gG2kkvyPXYEH77llP@4((a~xNqv@l(|*y~&E(e%lYK!C#*Z+& z>3YEvRQu?%SQYfOw1c{%wvH-?co-iVarke0Zn&$GBf__1bJ27_`5BB0&`;)qU*UvH zb`-BDeeAsKoe<bbEubC;H2yk%7jV_KjYCA1N(D}@F*eGyNW+PviABu%(CX00Xg*&B z{s-?Y{YQ38G6p|@gkT1`0{w(PqWi^XWC?k;{3>wF8t_pfHS__f+;fpX@k){lGL53X zqO-ia)Ppw?aY85H#p3B6;o~d>E2ZPLt<BAB7j643tqoUItEH(#HfF`A5qBk{<t>#X zm5=2bsf36kQutwfZ)`9i2p04E*%y)j=zW3XzMUSU$KWmSl?&ukFT*vNZtQiSf6k<H z{5o&MInm*9On0v$7t^~KA~q1(Aj$>=l>TTTAibH9a!5C%HZoRp0kXua@F$qjz-MaW z)zE0XykdfGwt2BlW*=;=WEuqSNcl3eI2Ek~-4x7RJ4PQ}4A|QXqALMIY$m&xnH@pt zEK=jS?u<G<I4gJz{xPBc+`U9aKpeaT-;2Fvg0wVn#)tV3a%zB~Uq`*%W1%l#VQ0tk z<5^H1!V{dlt9GX8i)}+PpB%DJw>S;ebPF^^>baVKbXSZWt^Jb9l7}VVw@oq)(QZ>L zl*|NgmjX3o9^$ubiu$vDx*4}&_8jXjQxEMqStC>$dl3B`suUU#-XE>Ry%(VPVWBYE z$3M0t@E!d$>UHT0=ylG=kKe16ydk%MjK=_BBv%v}LnFa6fk(j)^o+=MW-eQwc?iA- zuiZn-s+IgM`QTjbzZRVYWr$N%Df-2xTb9kX6-g<nj`Y>#`;~u`_R@aZuth#!gtP5} zc^<W^*m>0RBXA(9PV~kH$kWw7)H9R~rAx3p=pCp(XvZGnGKEp`z45<e{rQE=o=|Ea z;_*6XImS4;I&t^kUfdrGw5D8iZe$gI20kwSsXAl)WNVgODXEEhoBBR6ERn~&3$>>! zg(^mO@ok_G0^uF;A(#o3A)7@nMX!<LSdh?3j{qlilKif;mY76;!cP<5<GJy@iDaPp zJVBRYcI**y0R9<&#V4~nqcfxVj85new-IkqoiHr46j-ZUy`~KPUbRlKLfTByP0~u* zRJH-6ygibY;%9gv+7nqWnj+dLYAk96pGee?<*=GaO<D-nr{wepx;EJ2KBg~H`d}yj zP2VoB**noY$#;+(=YQoN7T6o?N|%L_0J~#8+guo#7%!rMe_}h)f$(BikYiAmaF=Nt zK29$V{TKZ$j6#-3XKJ>YN^Q%N<aV|BwRV9bA>M@D6s19UJVRK*XK@v|p6qczw_DAX zk8Mp*&>3h^oaS;PFQ|0?I&awX1n3_lBPIMo=m4N3;_>V3c93k?K$4y+o`+s*fTy+5 zFjJ4)%KsfZo2VkHfjt&8@*kR4#zJe$q~=LatpkiUO+Wc;kjg)a7Ga|$yOp!_w=8hd zx}*oT_2y0bxT>4%08tI!Ms$=lQa3iVu$-~AwEt;4W?rW6qIw`%i4Fy`%5Ff58!K=^ zW{iyO6?U<|LPyCFj+zDge>D15FQ@gll3eUpx8i5ce|)P0?%;H49N<j!1gXkKfjI#@ zcsY0>SS2vs*U<gO5iN5#9=g;0D?;74w}~z2Gx0k4boFBWa`RC8>Xcb&m(q@;jI}*A z)KWDQcZCr?9zIJQ3>xTvB2Tz|iP7j;@k3ciUM%y9hhSqwt)V0FX|e9HS@9t74h(}n z1MbUBwn?NZHG%x$>ERjWtxGl!^rX<xyU_knt5CUc17=RlfSP1OHUAm9oBlPl)*P2Y z$UA;eWGg+H9uR)O{1s~>x{vpgoRka|&%}G7xTqR*2GH|l$O5bv@wd20yiZ)0xQ=?@ z--(}qZD~w2fefOWXb>au$9P>VL)0qKUC7{8aA$<W(0#0ptbux&?v;LlzJqR;=88(E zY^LY|{QD1-u<Dd@v7(bqB5sam0#=_Z2AKKKU}O!p9xuQ~Bb^crxIe-zgWdgA{WSum zK~X3W&WflbFX{7vgTAJoG8gHZ?Ws(*2$s<M!y^HWE*fqc-Wl2gX7uVzXMRz<D#$GT zMr7!HM31x<O@JSQsnrEHKx+__!JOGr^I4ar2MK@eOqE|&PJ9$Kh{9l}o(3O=7A5M& zKM79m2=gs+B(jH@EmVZpVCTduBzp)ca#)xazC)gOb#};|Ax}C;=$4OH0_-(U{2OP8 z+z9p~mwR`6kCHQ}yvS&7y>KV?Jg$c(!K7#=wqDXmwb9Vk_D{;Y)Vs;eEn_vLcrKjF zr?aovYq1gNO8Itus?D6DO>L9h*4o1`QC(ABNAiyNQ(RuUSl$6-(lS*?)mfTMZ5Lfd zT`%nkbw1d|Qdl9}G2V|S*d@_}z?VHFbSZezcfnbyn9R5QSoZx|?&197#gE<Vg5x41 z0DWm!XltOe_ntGWtcByVYpO3h(3q|jS_Wpm>ST&X@A}V~>HgdQJ1mO5MJ`DWDcfn+ z>7N_+8&8>Dn-^IoTXvXl7$@phDd&ilBDo-ro}@=nqv_s}n_MC>82d+(BHJQ812zs; z#GhCYdn;6le}gsvufrbvUwku`Bl;1a&h3kY=uMP{>OlQVy`frCy@N9YT>@K!S3^75 z&50~*zbsRAUUNmQQM@O*iXOx+aaGyAY&o!vt_f!#%K+!*EHVdpL~A6L#AXVk1U;bL zeu@7tm*)jU{0D#)<xix+r$kfHTX;{&Q5m5aqwvbl$tp>DV;qzm+r<^ILwS8-Fp5eQ zDvx%PA<uZu*v2qGw^Ea&?yl;jLex^tGtFL2WA#2ofn);q1UfHx*a8NyMA-YRiM<tF zAI_pG1v-$Ie51%pf$x+llFi7u!$6yD5vGEB$!gvyp7P!sz8rr~YGCL`XcxU0uo5AE z4}W0*3teP1@!?=^W0#$luLA5Mv*bN~6P*f3*HQE+LCB6Mw`t1j8tb%LT)kb<S~f$1 zf|*%@pTYV9>bC<nBm%-=J`7Us=lPT1&LBgoV@>h%V2ki){2TK({f4~eIqQ~rSNSt( zGqVv?3sn=|vIUVa-7#3nzstANd(^wuH_@L&9SsrDJhocwJ+ub>M_eGkr<rf8WsTeZ zv*|6J^sAK*#d{DjG%W6nlduD?uK22ZWN{{4OX;1m4xF<8nF{s&wRhF1+5xCB9aUb% zQu$@saam<~6~zUmUVTaJRy|VemtMl3!;^#s(Y|!2fQoG4ec<lvdg&-FJzw0uu>S9F z`NIKfj{JSMXhP`>hsE{IeabtLyz0*iG^7U7_vjULM|ukVFMX1(P5(ikpn2Ly8$<QO zi=*ec>G7awgt(^?*Y~hgOHQOcE9Xf6oHEK*&Dd70lfFU;_*~oqZeuZSK8J7>0D-JF zU{hrCOX3ya)kr%~Ds&JVg>DgTfrv!k_`G-|-X0Ja+krFS1a~_+CWHl3$Vpzvi~3Ib z_t0IKl-O{130f0xf)}BCMd?tp_@tOOwmESY&PI%Q7qJg~d4~coVOzW^ItuO;|IXLv ztn2`W0G#`=fT7il&k@9l+JJ(Zik`$6u)C~C@OU5MH+auii!s2q{6ngd3X-<c)6(VA zEs`{GDc%>KgI6Jzh|ftUC_<_enpN8BI+6aeexE*~YYR3cKS9#2f%qo+0Nx%~@d#5C z)`#+g8~v3?D_KO6{vN^Z^eVs`IUX4ueoQk#Mc^;83D61*e$W51t27UCO=X~qVjY<7 z8EPK2f|^Pn41Z&GfNifC{fn3{*)P2&6$7Tga=@2=BweAnsr~>6K3S&Erp3l~`ktEa ziV4z9#8$w2Xd-F@m@o@?mZ=lH8+jQ0z+M&BLq_Z`$y`}L`ime%xk8Hw<sar5>-y@d z>HX}NfY~nv(11PRNkP_I<ZN4dt>{xBS{yB13Y?Y;0<A(q^eBHcu^Fu)-Kf$7Ptb2$ zM)LCHr?!Amsd+11jy6tg5k|#&!K;ams<^31DpsLJB~!&3<yWRQwy!en(LK;C&|cL4 zHr_JVv^uSotZPk2b?;RN<Od~t@fu+In*;6`R{;6=3g?WL3zhe8ape{-_~pudne*{$ z!*7j$T+NRas7sEN`5gBgIc00h1~@)BJG!rX48CgQ6w(hoRy%!_$q(cb|G$BA)Q!+T z5r`>a2Z6b1lL!Tznb}&G>8hPfU0mK;!Cih$8gKWQW@#VD7ZBT#POuevk(di9Mb|*P zO&?@Ape){qh4>6`M{3Wvjco+!!8*td<RjP*=EsKcRaqet4lSoYQuC<~!FGX&ub0Q~ zT;cfQnCKqlH$^VSiqRd?km9m(uN)DpMbm|yj3-hFRBR0sWN>TTA?>Jarar6wOZ7`u zo2Vk{7vq=<;i;kAu$Ubsm=aattD=cWTZ9*FK)PdFL1r-~eJfw8Y^s{2oGEunniKob z?jRS~6>f*T!JZPQ#eKzY{1Q4&)EllMI*9%xddr;3IoeK!E5_5tr-lmpnwq=v6funL zKypQCqOtHY=y3ckCkylBTK5#^OlKYU0^fhZkKqFh%eLbFWqUJiBjZDj==YR@zC=$9 zRRsMgbHa;4UFbH{G~n!A8CV+h)8#-mqh<_(oFWoiBu<i+NbAT}%KFQB#S-;3U0c&4 z>tg$Rdly@hd85v*+%J}+a=3otX{@_&iMz>ch};g9(wjnaA`Mu;J{P4)o+!?#a+Dus zpK%>DnHe8!;a%*~yI#4I$uw$wcx^--ejdE-+v0jw`nafn;g`Z=#e>UExOguX_(~Or zi&#m*ge{eMG;_^MlFz1JDhC3VR*kNsR4WScPncXrB<zGU#kAUNF{VB%@2)^r=>Nxy z^n)pD>~pQZEWNB1ZP_-+Ufb5$QewQIf2cj9W)yd%C~;rpjAb*D(6B&dvbC?5uMl`n z%gA{o<2~mtb=XVK6@4xU{%%olpm2Nf<kI_P^BuDtTgobxmKE<PK3gJ`Rd8SQJqnzs zy3ktsGX>E{fzvD{a++x%)P{Iu29YCesobDBr@w4kYW-kul6)h1QS!*7L)I6D87isd z7Lt=V0=U*A6C%WqSC`I}H&PsyWe^2$hH#wO9C;Py!pouyIeA<J9|b<G+HhNt_`4k5 z7#v8}@K*Hn_RRFY@O2>P`M!WAqK)pE-t@rnaE7oCIVw4==mwZ-xU3`gDZZV}0<AbD zOjsBwvWrngRJB!|tm-KLEuMvK5{-a9#_s?f-5&cCOHN#Xrif;vhw;ba|D+S;YZa)n zL?KhGk-d^6h#L5xXbsUss81pouaRg4H4|M!d3?F}jray}9BTsfDhBXSuY$ktL{AZv z^cl#D88p*0E7kp#V`V0A6C4NMiq8?oaiah;W<q#H=r`RyB#*RXWE{^`=HGF7Y;$H* zq+Iw^C?j+wR6R_EpGLAGeApU(6B--(Ne>IPiU`a(ep+l$`~@Ir_Y_XCg`n#L=OVG= zqW44{#VgHQ{Y_(Sb302_>k@0o@~6dXs%%KrY>;mw>WbROnzO11O%J8e;D>;n>JfSq zS->s>o@yuJ#cznaN@|NMVg&q3IL6!!Ee_W9k0xJ{Yy8gwgQ*@gNi7Pl@lW@y_3U$9 zbGXVrI`UjYyg$gk!TBLSGcw*89WIrs<9fRVwJ%M|NZJL|$ZSozoWe2WCDa4*!+&ER zC7qS$w8xAOEINCBQuCCqsnb)5l#%v{mN!OT|6BJ!o3H7ob?bT<&Ke%+cWXtelagto zyWDennNRPmQ?kEkYVqgNS<Xl967LpLAk)c3-Zk!*&LfUh4u^BGM@laDU-y3?|Mb=J zEOo9c?OU8v)V*Z7W2YzPFQMl~dPThv#sAZ@;b>FNk}zYR!7c5rW{|F;K1&}p+%jFY z)U<7}J+kJR?-;}yRJI5O-)(krv>?JoEqqm|IqsB&RXLh*nq|t#k~v7fcqaFpiAD!9 zpV&+MdttWlm0QR>3_k_@w|_yZ;ELy=r_`I`zZl#?R}NjLE70xe8X+o7F<W9I5uK#J zVvTBs3Resh4;8%?<m^Au^-((;;h!gpknzNJ$w6r|kPi7Gt17!KIRhH5Qjp$oP3V0> z4mulTU=FDS$SyWO(kPbD;`>Ax<i19VP6AT%0Jsf24n7S(hSj2G$ZV{Q_^@=T%ptuc z*&=RB%*T2md*G9xy{<lV6cEpIMaKZ&cB6PKNZ<AaJg0^DFGLFnY;kY{IV7|Z=JFQq zE@+xM87T|j4=;_#nBnYZkm16Zfzi#8P-q{uI<V7!*1s#Tic*BPL_KUhVM+W7)B!Xx z*+oUranN0q1UUOoW8QcK>Wk!IfIT2Z0E@Ai!l{aDmm6fJ<ED-#w_%iSf=Vf^jed;J z<7Px}g+GSU!30r(9!NI~^$f?toxtQYF8Z07%&q1zVKr#aco~}tX6ecNXI2KB-qxsy zS;}~$7eOb;=1>p7_L)oG_sn;}&U213r`anHDx%R?8P-|(*|5ykHRVj&rF2nxvy{D7 zg<+9up0o>|jG%A?v>{!E8X$Lxd5ST*Pv$;Jn^K|lZfR$eDXZS}Ot)DxOWhGLTUG(R zu(mc!b3t88sRjAg{_&#d%HVWQhqC8I9ST1bic5MsaL+W-6EIOQ6$~`<H}x&>oN-$` zQ@oFSlgQrW4)BZ+o{(#f>w#;#d#Pu!_p<K;dC|W(a5=aVFwciE*Em*~mQaiG&@8}E z+^od3bq#X!VrzN(R{H{QlP)q?wVxE7BnIpdTo!*NGy}ac4B(^ni|>KzA-{mLb&D7l zKgDruhiH4^j4+K$XU_uu^g;Fj*NI2?d2A>m3YowL<gr)f-RPx#zx|adUr58$;LAXk zv5}}bngD*Vy`b4Ig~-R=Bg^1>iEz9t;1RD7Jw>nK=ZLkSx#<oL6O#a~vJo*He~kVi z`W|1-e`FNVPLT_d)r>-T4gHI0qyrQp)oLZ!H4s0LgV64HL2OD~2Q?8<2#H?A*5Zwb zCZG-BGVuHlLVqDA0rPYO;EO*5wUZ*GI@$*}OGe7;sL$xO0*A{b-D7nh#T!X~yf*ST zbT<~{{$bul+C;iX27v@)e&l=f5mS*J3dm<kTnd<<4l&75Cup?WKo0lHyp4Tr{V;Vo zjBs`^`#k}T2X<(xFqau0)`h-@9z>T28%4jwRg^<D<+LU0H%g0Qqr9%-Kjk&`Qtc+) zaNTpwX=Rb54EYo*VGNO>VQ*N7G-FnSU$q8bj(^Av<SKE!xL@3MUMnPnPR5P=6&@BI z0zQ*7IygK8c$eP>D^PX7Eu=&EdH5Mf**>5${gCf}e2s(NG{1|AMNRQf=q}lH%{XIi zi_tpIa@T|!9%*(dBQmk{sCX#B0Ji#mM1fwwo68=n?Z&;<UrBFL#-zSWsgdlm&A0S1 zeK4^4mwFpu{ERkc7?&6}X_FL7v9H3Bkd!>?8s<P9R%dzlzkqrZ55A!ngpxxss(H{& z*7UA)?Q?j_ra8_yzqtmx-L8Bm=1g|h2NP5e?|9%|f8k5@_4WEZ-Mx2w6$3r#n-LM$ zD7Fpiip~&Uk<V4P(E+v4Fva-7_|3S?xW?et6=>$GzRO2RM~MTt0-uI`0<87tqAKvN z#FqG!xB+x>?t?A@n)tUwoy2U=iEtBeOY6nAfnDV-@Qwb+S7L+VPSg-`t9!oVb!nnB z>geV9?Ee+I%HE4Pp_#}~Y&w1h?*aPu8iBcM3}_Fj4!SE}AoZ}`z-f6Ke~HZjPm&Z> zV14lgKvB04#b_t^v#^2L9$p(d1a66yV>u$PxHE9VcF=v&>{I+r?1c7luK`PIZ8Xdc zPWX`L#B}K$KtcOQdR}}0pO0=8CBtn%Cny71MRgDg8HDDeR(yi^zU;Q@jP8Q5nmOCF z%J5t>Pti!y6pI1c_9fu7tOb;vqS$-TZt+9t$Rq5j$fwYH`Z(2u8cCg@E>V*x9FRw= z207q)uS*RHHHtRj3WS${^)foKDwe^iqj%}n!5e|I6c+Uec4UFLoxGy5xiU@hQPxpb zN&dHT2gvpn8>Oaz-lGo5Jore_^Y}=iGw{<N;EMr4w=+MIYs&t`WPzrzBz6Xu%d^6T zSPAIjTMEw75!^WTBw%R2jLwgii*AW52YN+1)gaK7?CKrte(l`vI8|1&%uzPlmFo-A zD*mRZru2e(tKo<FuC<eGpLLyiwgJ(uS5}kN79+rWKL^c2Q^5D7p8TPDzoCP*cXGwF z=ILwFcBk}9T4YPLcDJNh=37Whw&j8OwDDivGu2_~IW!}FmYGHC{VzNpU6oujUESR4 zJbrIwGD0@=dr3R_+-vh(aKWz5u7U0^o>9K1<Sf6=|J0}QE^v=`X<a*9U))2zn|*(f z<H&QQ!T-iD1fEc;a9-5L7sp#7Vd9irr%5;5H}AIfN;;Xe&fd;i$CRO)t{N}9NNhn{ zi}pjq5`*ItV*3D-Z2%xTKaH=4s)<@4FF~`}c;u*P3>;46f`%A*{738x`0d^co%qin zX)U4JlKb3;9m=vUWp<|+a4GuG^%$>!!>!OI_zq$gF$<5OBajH_fA|Dk;0;9wkr0}L zN$~Ah3AzrnDjKk7SQf}l6pHtY-{6Oln~6=lH|hx2iacauf>~4vB&>fb@)gx&*?6+Z z8<X+Xxifs*L|1f*WEk)aoK_!H`Q+my4h%<%p{j{jfUQr&>m>exe#0*TJ@7He0$-QA zmB%!G-E>0-<1j!^lj;_#7RlU1A<Dr06LVr+g@ybot~G0Ax<*$=riUkn9?<P+F-=n# zJ)X`3iIoJU1qqDmASJYd>K%%JW;um00(3p`;9b2LUO){Dyacz$UiA3r4nZp_Pn45A zQdCn#RhQN0G%@XdeLZ6b(>PNPV^lX!T}i%_=#NZ+9>#CPUI|XV9=`!_TrxoS(QA;u ze;zp>9m389JNc4$Nn$q?faXGE{5fbNtq!=7z}FW%7;yL}`;GomaxOW?_tCT0)yt7p zy0vt2*(u<^TS{$Xli_~i`$|O5nO0iA+S2TEZNDsknoj5rs!q#{;uhE$&{?+&OO^~( z9MEhrd^am?N_)cA$X3a!w^TC=rWfW))}yw&_Bu&$QrNcEGSF~Q#fU*S23v_b<tZ&o zFG(vtT0F4yo`VGxYm>LBcZ&C|H`TY)XCpt6z5EmXHo#9N$o0OCzLmay<Q#wBz~aDH z|4p)yZ@lM`i*inKweU0{-v%dyql^|XS8777L_9i0JYIfWZ87YySd$8p<H-k;GOb^X z#hMlJ#l(1|2UIWKF}69j6tqMRfm~2)xD#9e)q)O!{;YHH2%r)i0y@Kf!3OyJLEsxm zB-SO?#kH||d=67Ha+IzWTu2`DbaAPjQs+pQ988@J!U(?=8jdxV0JgU*ReBFE5Uoj6 ziB%D*gM?vg?5bp~e5s;T{;$+b_(Zz_U+7KjReT#%BI3}sK(%osR`YkG+Hjoi9R3LS z(LcqFR3mjd!#mw1RgpLXj}#J20ieIk5?;ao5a(s56c-f3<Pph5d^6$&-BL<)0KQc` zL%K=UQ}#(B7N>)|hgD*h?NxkGCv<s+dxnUvq2`@pr(^?qCs9dw%qBB4LFex%_6T=} z8_$l64h(moYX&Fz$B_fcERyiwAs3Mw$mt-<yN=BFR|j4^jOoI^ieH8EL=WJi_+UN~ z?G|nmIvJkIUXIs9t4JCG$L@XL#QdflqpYgBsqO?^$Mf_%^mBDqjaxBNdIc{P{h6=} zh3rD+P_!eM!iKXj=oucy%ee#KnVlB77R~?@+`o|((T1Rl_$r&jHf0+!U7}ASgClps z-@%R`NIegR{oQ=E+#?(ZO8b{e9Ab|yn8D0~hKSFpju}o_mf9ZMn%LS}51KW`Z`zKk z_p(>w`*=BALa^fDvQn^*sHQt;m}C0S{KHbiHr4*po@=Xby>7k&7@0cLZc{IFD|3J2 zeC=e#UV?y)TsGayf5}_UlW<jY3C<C&_b!Y3oO^|*k#~vrytjvMDLKvG-v0+F_AT_b z_Ez<7^E!P&|NY?K6c;1|-TVPCZT;z5>iXnv?OpD3lfMIX=z-xGU|-T9UJ+R%ZmX=O z-(*>pv^IrFX_HbesiUQ)o>g9y?jeR?t3dA@B6<ho@JsM@uNKSX_i{X2m&5r&egkNC zO;2=zhax}G*Vy0qD|{h-0(*|G2fZ<5>>FDyT;k7g?<zGFbuOG=yxVcv`wz8*sS#fQ z-VQt74o|{PiYi0@0Rqc}#3HyaI+JK6y)Jtsbra7~i>LuKCs7Y-ESiNb#vY*;L^Tpx z&K|l>cJ_qaWxhLfCO;l~ue@YfZk}KosoSZD;{m93tZQsBRE(xbGUYc^3XMUn1`bab zmX5%1D6s@uDSC{$F(r=R)j^-va{L1EOuABaTwl@h)}ELAPjWLGZgi-ANSdP3#8Pfk z^eX79*&p2(of~Z)?GULQIv3pI??7$_&hBZxm7tV77;py`g8kE=;1X&nofm?l+gU%K z8*7rd4;o~f3a6Pa;ac==Y6bmg<Q=yi>Vm(J&QN42PpB#bdSr&SyrHsrH#nV4w)&Qb zhA!%Z5-GAVHi&H<X%jk3w+-zJYomvlRFLYM$A91g>@s!=+nyD(I(8MS1HED0xF?_^ zu@2J>%y<hUw?Wr}E;1}c2j76(*6vbYL2iDHeDQBpaaC8{-~jF<vQfT6U&r<%rCNHQ zba!g6<cZc!z{#Bh_?122iJ+y6f~B}hHc36s(8EI7v`Lbr!}g(eg}uAYV%=vRZQ_h| zOkYiIP-LG1ZVL*-S(RIS5$?_9(>?v`0l6T@g}E9ypE%wDzi*-AwDYs8n&*_a)c1^B z2q<$s{rAXCAeY~Q97XOSO@7Y5ArJ#^c|G4C&vn-`=QAhgss?;8zXKKMzTrQjA;!$d zfd+Y-IH1_1t79onGNx@$H>Q6~QQPy457bwr-LPWlS&ZZV1P!u1grlItVW=PxviQoN z;ZPG_ns@|tgTr96J{3tq{a{j=1SXXR1dfkFv*6NLQ<kMilJi`@N)Hq-DV|@}(laLz z2*2X4#Vd*)f#;+j{sixbCu0>+HBt}s630Z_kTvKkY%JCbwIJ8vO0Y;|N9<?_-HF;n zc-+sR^kLt7*C|JavxcuYG$uY%JXUkbbjG^QQb+$pUIE)4KgM<9YQ+YN4vAr9Wx$di zty!U5DeZ{w6d53UVk%I+S0lCYzr;5sC#BP6%RpADyK25>s(!brkJV+nWh=96H$KoH z@;~sc&=LN5)D;>A)Y@vH>`+qpR%kPw2sQ|`AU}Es0zK!M?}&eXFhISf!3jbu=xX$Q zdQqr#qz`k2<AF2pP231PpnF(tbb44D9v?|zeZo7q3K5cBRc+I5(I*U(OjphCEg!5& zw#rtwX}3OA{Zv{J`;wT%_hD*BN<#-iX<>V0VH9RNaVz;ff)VgSrVGz_JMeswY=7Xy z+zUulk0bBGy6~gW-cUcV4+~KBfEqU56L4%Pc>yxudB0m1wkWylJV0iKq4*2Dhw75C zuboaAmG&X^P;x6<InxELT)9tT!a=t%@(}GvAhHvxjrv@($v!6eQ_8Z`8>!t=Q&Z|C zUAEpe84ag&6LhrhslJb)ks)7qOMO*#9ebM?%Vmb^Qoa4(y^8=}EK$0p<Y{qQ@tdMX z#j{FkmtoF@u9fZ~9y2&kQ+#WDM|?YcLEi)Nr2nsg-@l$b<SlUDbPaWVayi_2UXaM8 z2S$f*e+x@v)8l_YIikaW-8ES4HQcco(u&GUEA%Y?N9rEyD?O#0F1dq7p)uggy<SKc zdh;Q68j}Io!2Q{2{N)&xXd~K=RtG(;r!Xgih&Dq{63Y^OKx_DcSao43r({NiZuz6` zSq^iVzigXpna>q$6tQrfV_y>!;O`*CHx-V+Hl!cg77KuzXM6E`$r))c={d0(&p@uj zcK8O&h?=1Fu_su2u!S-w{$qQDMg~rjBmGY5JtKpb5I#kBtwUEsTSZX=KaiLMbcV^o zBxo)6Ra#fILo-K{tg0ouhi8l8iJ9@npi^;PVgaNOX+T@V3gWx?iL{48sy?iZ0X5~D z>8fd*vAh1hW~wqnx*l(VJOTGYudoQPcD8VTa3-*kn;MqUhXY%|uJ4<-i|;S6GZ`Gb zNX?{w(se_RL)*eLB5k5|nChSpZ!XuJ+s!U#+D7X~$nfXLWk$<ikFA47BH7q}&}vvk zDwWSsRsuKSu|}17i#gvk&G<lnO8Z;2Np6?iz@~~SCNA+Kn4{sn^k6C;%%HOAZ(%!g zl$#EIJs!FMH3nJ0Rs0XIf!YN2*3H86L&s<deU<7+tpgO1asCP9es8YJ?x<2aqU3c+ zyE4)#@%>E=XWqs^ABrMZ@37iZ7Nm7cpPzO#xs!FZfmh#?Zx?&fQjnIPhusvPm#@^^ z1UcM^_QBwoAnY;QPFpkEV(=D^0BOi0`cAsr+Ct4W^$FD$rB_x3?;WocofTZ~z3jYS zR^GumJGlRF-*<g?L9Tsey-Us&r<Z<rbazkkw(+l_ETKI58=!>i{3`(Mc!u|zFHTM* z4L*-&x%+|Zu`9`)034pTp#nA*FA^1@&+%X4mC|wYwaOLhVy)8H)zZu!Nj{&_EorXh ztUjWIBqhK@*@Yd;6fv9Gvs_=kEsydSxUXC-(37<z(GaeHP9`3KWY$p0K%zhPOSC>w zLs-uai9QVP4;`g5soKG0@{D_~vyap4*83(0>V{4*uY|{mWk3b8ieADK;ntwjkrjPJ zK7w6+dC3>qdO*ZVk#!We#43p#i5H;VNt<{9+Dbnp3gi2Pk?g0)f8jR~DK{_<Aqk=c zOrZg-7QE3L<a>#2qIkRvOchn(E@(DU1JDPrE3@S(l4NWG+$a8*(3Bs~e->i#neYvC zo_M2divm?`P><9a^?CZW`dl5QZKBCl){%FXq~Y&G+YC`erlVS0jQ;=D*{WNsuQ z+$i*lN)4{|PbT9&J@{f>^v?-iqThtaMJF*nCY4pPPnffSM^cL&%=Tu3Og&~i`0v!{ z7v>Z%NjwzI#=l9P$t$Qz)$O%M!HIOqFx7a<7%^<r-_!0>*HLbgO%q4at?-!mef~K+ zm}wmC8+jBS6&@RA!<mt9(MD`8@UiE{{)tnuV*<v{VXHEgqvi+|^3!&DA(ckCgMWjj zlYA2PRRfdLXy<!}(K+08$rB(0RR5@4K;en_26=hi086XnnQ4}CTgx3zFH9M4duBMQ z+94T?W<zTdBSDYVWW2iUuzIz@ZN6<?ZA-D2*)JziNjs9R+cDb<kU}1)f3JC~JR{2z z55Q+2?GqI_Yxr|uw{NWHoolSK7tla|m#uPaaEe_oook(T*LU|w-wS{3pf~uKS`GU2 zmeKCuQU4F0$!G8_@;&frd@npPx89THRgqZW8Au;~jXvRPC$54f+yqb&tBGZ@p~_tv ztA4OC-|VuQ?GJ6Q%&qh<RL6iv>lM-)+7_!S6!Cj`1>c%0Vzz-^>CKFrYZ+ez=ONAU zZ{oeu=h6X^2cTEU1DsI{g%8{uHV_>Xc^djg?FfALh1_P>5!Vr~KQJlWgEa{Sv5%nB zw{!d`=x4tllPB82>0n1XNZd=JlJ1tSm2Q+AC(2`IM0cQDiHyXwgeK85-X+#jSj@lS zyzFrHBrE0*#tNZYXkDT}k}N-_kSV{(?b2uXLWF?ZL9^ik<O1GAqL+1&KaxL`b(f6B z^N<wLU+_=hL9YbY6|F<YV^ze%K$qPJz`Qc)>g%uRvvnG+MxCvgA|u5u@f}DlSf6MV zQ-IC>e?WJt2wbB}m_|&^XdOWPI1!jfhP@W=OHTvuI^QDymEc#P@gIonk8WdngEY|s z?k{dD>toshMlcMNkq*&f<^ca1G@ney^y1pm`f{oAlB%ob|2Vn|=&FvcJ2O|F#uEZT zg1b9KTA;<PXz>EYi#sjF-QC?C3KVyDcb6o@U!K1!Gynen#Yz`#6G-kIIcJ|O%cG~o zOpI+CH$CoAZ0nekQBT9OoUI*)ZMm(*)g6+J9^t6_wW&BWb#FW5Kuz_gct=19b;dtG zP%pS6cqTY7SUET^=nNGI^$z0P_6~E8a|N^RWbV$Gk-j6XQ`)k$Lg}vbSa^AUc8&2Q z`1b@qYlZ<%o3z&|Ma+*Iop*OZQS^L?vL(}tRV`#Bl#d-3HqGLcekQd=CDL1(X<Zrq zW9;GFdGpmuj4iAe8CCS3B7F<>E3hkJXD)B_!H9XzwYFB4-O3YbF`2Ai_3d=+MW#=+ zlnF`KzbQ$5lQty1NIIKTG->0v%x@QxtEN@XYLv6l^UyaLdFzJ1Cm0@q%){wFq{XKt zq(4iyXOzsSlCdIVNM`4(_1PWWxBQv9l@3!HSyPZr&;<E+Wx{@p7!*|__OJLq5*ERD zGAeIWd|9Ydf3seetFzW*wOB4j3A@NN|3&vc-M`pZ2lLiChAxgvIcmr{+1AxMOW95@ zn}2C_&}-HWGz)YL3<^ZU>+cra-h!F$)BB{~$vBxk+S4E~Rr49k!4a24O<uyhWrXpo zq=J0U^0Ol${A)z(NLxe+XASE?X@pn~Bq*RSFsFd~)BwEFcvga3f&!_mR#-c(&*Qn+ zL1l;auzi{1IvC^E<Z5&?G6e;{NS7(wY?qy#!kdLZa7Ne%sQ*E)sqs3ZGYoMqNc)vP zE%&V-ZMQIY8s?l3b}IbG$g5H9qc22li|i7S6xI;l<2S7~OJ`-Jbf1Qk2>wLBA1W7I z0+*&&?qaS!aMqcc_EXx$G*9~3OowZy`@MIi|7_rMU}InvevJ$?4CMF+`AhhF`q%kW z{l^1gp{DvE{){@5fTe`JnWLd|6+GGNf@Rz|`oHM#nA$O}=q5PP(;^;(uME2fo_Bf6 zPjVa`$cGpgwPK-xfvdh}-v7L@zU{tZ{to`m{z?9={x$x^_}JqYK&eUv-v#FTyL+AP zdaf^7S2NFLTum>K-XOhCM!~G&u6piFkLug$%j2I94dsMD=}^#6z-p}${a2ns1wR)1 zp>(IRz02e(QMBOt_#xqmYHcE!d5revHBw$Z?kpa2ICo8`vUe2iT;lhVAB&GDQYx`W zLY=q+kwd~%#~v$Dr$~M13Qn{h-X+-sGCHN5|6V_(aPs}6<w=jfRruEXTY;pjNjsC* zeQ%f1G3O^=?m(X4<zTnq5Pw6@g6tX@H&Sn=>`ktkGWdIi)P1Ro()wmJ%WeZNkYWKt zD<?j|QL}<|r){r&rsE&@n-7e75HmMU%N3V<d+r*!`{x=JQzNov*mC>N*8b{xbUHie z7vPR-^ai1q{&>u=JNcJ|kO52k$(Ple$Q>W1Y-N+hTjRC18N9cT!6m^5fr0)N-c9c5 zu4Y-wG9sZi7FqG`#lF|UnR+4fjj8hM<|%U!&l2@nL#3&;tNmxkQb!BNAbXgtwPn8Y z9u796NFU)uvhr=9go*SQ`i86%-=L8Htd}-^HLHkEG)1mt>4-ewM%HSU>B>eaj`gIA z=y;~eb~W5O(RS5#-ug{Vl_jY=JxUtWqimdPQxh%8md(~bk;>HtOpuxpk&&Gut3^`O zTxsFu!*7Sx4lC?j4mZMZb(>UyUgFb?j#@@wo6qC9;Lgfvp3~J;A^VrCE19z}Ia!nS zFnfGXFHf46`!@OK`F*}gzJ|U?UoGDa-x&X@K;h6?c#Cx5nIbnG!yHJU`NdMg_QCFj zYHUhWYV?<wI<b#p5@QmhMP%d1r4j#x_X_Lm{9<2iy{t@Sc|{{+r~Vw+<db~D+tXJD z>vC1V9oQVW>F?<8gkN*~H3IhFCQM30{wdy+oSNCQGk#C&lsYqYciQlbRav@gpeM>V z$M>Tz+55>`z&Fd+4o<+;bXhco+VERgso2#CdkelRHn>!`()mlCF5EV6{TRDrsC3%Q z(pu?Vc@ybBTi2+Hd9EfNDq67Qx>7qzwk!5?!8Hl<;;Kd!hTilp5)3;jt)#MKlhF;F zgx&7iu47rvG7~dM`h0i=3`rjHt=*T|pL=|{{mqf8W#+gu1Gn^F%`HZLZL!bp8kX)& zu_yOWewI=@^+H<3j8EtQf|*s|ao96wvv*T)miY^_s<mtzz!og)oa+3=IoO#R)-7^Q zj6MGEJeTt<%iSPX%jn4Po_0-LEsvKTAyJjEJV;!sU_3&S!cy$!xq)k;-ezAK0e|Xa zwjApsRcAgvNIw+Z<)7^v=S%Tb@XLPF+sZQ<Sk8}G@maCidtBSyhIe(Kt=7p17;6oe zz5=<wDi4sO@>lB^=ZEn6ku@SGhmUuhv*ebi&;q2T$R~D)1>_8U$0|sFuzTb%AB`FA zLA{bWP84Ua<<6E^TQggvbrA9=uSp}NEbur-sn;ySty`^2tmlxQahD<Kmbc<Q9!~y4 z)$$tC+KrYOmcEv|mTlH(dt2u>q&!rKJ{G+<x@vU3C^e#&Gu?L2BCFfvxzZ%onLfr; zX^YlB5b}I+UCp|i`7ZNV)|c#f;C}Z#ue{xSzx&d>^}P=~kKvj&9y;dL0VfdLQh~bu zA-+W4E#E3QK8!IRkq=UPHNUliEss5DfA83h)QO4V!y-mT&WLIg{V<xwtcxBMbunUF zSQ*DM>wn4>)}I{YMa=2?)lhWsroRTVZQl9cgHLugR1%!ZZQ2;^WT;c{jo<GZ;oFOz zYO=d4+{faw|H~YoaU{J}`myw}nTK3Qz4?R5p<G($P|aYnf0=J3c<FilTJV#xlD<<X zIa@;=os|Dl;g!WY6^kf*Hs9~Lu1Acvy_FV;f#z-)?~IqX*=I(z$lb9(mm<YWR4cWq zWRqeG3Qo`4B3FFWCx=%pExjXS#5|sluLdXhvUWIl%3m0%y_;MYGiRk=Pp$a<QS!W` zl1YP--+vF!NX~xl`R;!cJQZpk`WpDz7m?F2qx*M%(&uk?zST-fO8POSPHMaKN169r z7d`9!M?%~fK(0tF)Z><C);N1BM_*^5ut8xb!j^^K0)J>$^lT`#(xSIU(a09z6P*q0 zH!Q1_qtXp}S&T9p>e=97JPd8q41FP7v5$~4;MT2yd*(aI%I=CvW@l}0pr23m?(pn| z19b~e036KkIp=bIbpPcE_x<FL4+I0}gEVv`SOSiSmxHaqET1DPNnEXKpX$6E79QRw z?1-a?ZLr!`E)Q<WJGzd}r@QG*x`}p1UiB2xOLT|RAm#rcRXPuu3k>&${HxMhiBQhT z^W;nNIwj1q$NI?D)jr-{)Sk=Mz~WFM@%<;#2gr*4n{Hyc<u_mhM%kL!siUpqF_IC7 zhW`+0k3JL=h^-#?C8liDxv(GXr7SLasdNL$yrpST(cfqma{5hodsjv9)y`+U&S;4J zKRA1vYjaK>cV2YfDeeQFZ{G3#gMp#JW5MFVa)HPGB7wPqWx+yPdwngu_Y%ck5@dOS z&JDHvY4uqv*q=CFIU~YfMs$tp6TL2GaBM>CrI^p)AomKN>Zog3!@lxZqlC5>UD~K% zA+TS551jE=@%Q&V^|to?>hBde9V~|YZ`0q$Z}ngCP4Ha+<0qfzn7bPA^QAe@;pI5i z_14u3KBA4>J=`nY0k`Do;O>+YjqavVU@<Rg*%Hwuer0~W(A%O~u?Iz`7TS~VY_9Q< zr|q#yK-5D<b44PlYoKf%op7i?;X-{1cPzq+lrMC?z>d7B@ttEMak|FZ>Zw&^Mf#V` zr6t9D!w8K<HsnZe6?d8Jh8a<*Ba+pmyx$IdUHI)la<|lynZ0ugdYOL!a+A4#oo}<d zX;zc85-FZ<|9)GY^jq?Plw05HVB%jZJCrlSs|G*ni^M!>hnisBZ+!t*w>#Ebw&V7l zj)`H5BP`MR;-<!T%B{z*&h<2AEI9V6EnLaXZi@zdr>UBE^_AM8(5qk}tk>>HqPs$N zvXJx?`QYWHCNx~MGaOp|;8cHmWc)_?+QTa^)#vu!_e^kCME>f^oNew5&(FRv|4e`1 zKnpm1_Rv3@Pf3CtZHc#avzLU<b{7=1LF)obvXWmu&$=UjyswlB#C8*sr2nS*iA@~i z`GlR+rM1{ZB*tGw?tEeKSd^!J_;63QJh8oWgq#UsYn{W;r(Cnx)&JzzQVS`K31mZ; zkOr}fz`+i)z3}?%Xxrg9AJ#EqYGm=KSy3XYb94!~fP9GbL{tm+ICk15TGoM=YLaUF zU%h=O6?M(8?!m6VvI}Rw&a!5|&ED;Dx$@+6&iOZ|mV2K2lzW6{p0}m%h|lKF<v-y& zfuDZA&*`rQX4&4*Y}DR;ku!LP)dxa1LwWN*A2S=WLBmc(G>KXrB}cc3z8v)cT;yfZ zy`rl}dm_t**LF;|tYS&Lq7fgO?Em6j>v;zE7>jq1_l%DP`UPs?J(LTj1WyHD1%~?X z`C{SyGA(DE>veV^S8R^rPV^k`&i2jrJ@l>drFrt^Y|G4-Half^^0Jf_X?0zVf?McE z`}XK2xnJi!n7>ki?EL@czm-2a|24RfAB^b{@zFk0bxJqk|CiS?+mRJHJy)%~o&wzp z)hm3r(4EAGd2R8%W2Q!`;g^w3wB0chYO?CKTIvbblRtub?4r9au!w${qtey19;v;) zdy?lS75bL{Ti#>}51}MiI`rC)gQJ6m{nXPZyH<Mq_lL<3lQ*Tfzt;rz>dR=GC9+hk znC+hP@b(-e@_>_4+ELos$$8T8x4o*Zg0;D|m)#yNMZb;vA&)EJQ$pT6!%;<VbIe!Y z(YgGVK@CkW3uQxhB)b(h`s!{?Xs7iF=5}~vFUARXKprf0poe*q-X!$iU&Hs=Yxl+b zO8NrO4S#mm$r+ffW{u7qlvy?F2Ui}?F#qRJwoyksB>U)F8pckthtg<evE_tqy(80^ zH|(yXp{=l5Qc5MG#S7jQ*gchU<ld^T&O>hMLFsqqrOlaBa>`N2O0ud4lnqdH*ra_@ zTjh>rp<M~v9R3Kprym>(tb3F^QY+ekWQt;BG}%hxFt<oy?<9|04T`iUR=@2R$0g?% zBy@*ItVQxk)rgAW3!LNZ#i7ujz*dM3=1s7d?uXt7^90)jO8dXT$Mmr0H%~3kaHK@8 zg*W4NUkl$2Z*A`yPdQI1&uY&G?@QlSzZ_@*&!3us8G)6-3fc(db9%@=W=ON-F;LYU zk$Wr5Qo~l-Q7!B@_<T)^S{4-*)hzN!#NdeQ;a$T&hn;igc0}4HsAHunq@U3+_!j<V z;jTkj6|yE~&CM>CQ_$1ScOtMRbP&30n-OM=K-yAtkfPI4JnwS~<~(xUa@lic<&<~7 zcNc-)aAVE@SI6ugSqp)}+p>RjyZw)hHqu6$7G5!CU9MMoUga|jI0{14oG9ntm*-Y& zM)+^GEV%~T4fgp?pzu8-`@~(%lRy8l0{IF&&AUGL(70f9@u<fUH6!{)oQXIRkpnbi zsjZ1}f-E;0g|=hPR?6MUbui1wxRv%i<-)f{UtWE>`)TBt|B_<TJXw>0^EcGy=tneb z@K5g%*UZcY=}%LKq(-MzOz)X7G_wYnww<zVu6l6C*dBnUMBI>6%RlfEZ|Zns9}GX? z1NJ!Q?C||j(Q%>p<9P}uG|Q8oi^P-;FJ#*-SEAGS5@VG9M(e4CYbnqXJqfkeOwD4f zg>!5e&7mJ@1{eVf&u<LV%7@wn(*xN7Gw?VtK5!e#jWO`O5?OCE9O<`HH>P^i7G(Nd zhPO_rlUW>$l?7^h>s8x+yX;7CRC2U)L^~4g_pHk;)6@Y<8+na1Li$&#Cf|@7Dl3%n z%1b!~S=S%f&r(pjDZf-IS@K&yTaKtdE2i{}Wzk!74{I;?!-Qe3t+@T8EzY_^?nzX$ zGW<;H=o`(ZG)Zn^8HxVv2@;8SE4!2yYF_JoyXkCzJca3z&mzA@{2IR1nPE4rruwUL zK-xo>i1TK;URbLY3I+QH6NBf2bwe4!8o@n*GJ*g6<Nag&1N^sreZA-1C4e5z2ScQM zb^+JRoa$b9&jm&VXNPubd5tILM4;0j*c)k{Tvu5M7peuyS-4wOvi@n`?{pzS?nczk zs1=cahufSooJJN|URzY#PFoXOX=@|(v~-wsG;?Vk1AedSxt(*%mDknD)fD+d^}O@^ zuYwJ=!`gE25F3U<fljy$(%g%3R>B>qe|FpKx!EVOkAXkCIeU8cl<e&6=$uS<XJ1V4 zskYP9$Vb^{wS}3H(_-ty7s^vRVM#(<!rk28bG?a8iq4FD8vfil*3reW)p<0$V$_G2 zUvio8FLU3?ZOI+Xl@a$5HO$MH9WfcvgQMz2+;O(C&$slFThL+rw!REGk(#fF_i@hk ztlsH$zK=+%{PpqYQJ)8*>-v)NJnh%aPT3D!r-8jr$;p*-*;U8&E<2a&fopWm?VO`< zrn>H0;QA4IRJUt`yQc48aIvwNjFSJcOtxj(-SEm@>|E#k=)4m)1DKXGrcZ2QTv%L@ z*q+g;5!`vk)?V!@RinEx3tD1&jHAW{<G4}9XsPGd-r(f12UiBKhWhCyP^kgjXF`Re zy$>Amjq{fEj`e=@dcD29c|2WmI%N0H?3uA2PJOL&8vFKyF2R#*51T2);LLf7+Vd5h zU|jaNu$AzRvqbC(+wLfD+oX1t`>?AdMZ}Oi^f@ZP+LotQVn1Zhvfr~u+OJp#!c!tj zc`eOmw+Rzh&HSd_+zc1daPoluCAF4Y%A=*HG>Y8gC3!cf1K-jl>8Y{_o{6oHgizIC zccj^O+TFG**4max)u-%Lw_CEU8|;bB8_rqI<BmS|KY<e@Nk2i=u$9y%$Kc{nkTY|Y zemi7<?^MN~gM^D={<;1wzOSC4IRmoxrY}x)e4mt3{QJdJn(-)WY|b;!F{HA@8@KsZ zs>)f)Ld$Gxz&g*i(w1uNY&~x&X(?_QVd-XRYB_K5TWVTcphn8?IN~_ysOJcGytTiz zWk9>I-@4k`+iJIrl_TgEV?a=N!#pwWsqS*#e$X2DH7C%UDSp5EbJmpflBq{h{z_^7 zJ(T)5qnE3{r-U!tSIz&o|CGOszcx^@$KC_pIo^P`oWE>vt=7;Cl26K8yDPk4bY|?H zc%J7?!l^vn;$vbzMyzl&vEEPzS~6_+!}REOdD<k_DYCNY^CI60RZqN;SBrPY)`}?@ zT_S2?WJ2V;h__)I?0eK)5+iSnYe<fo<2U?!kURIQf0g%3PN}RqX_l1t-~RbJ_)C#5 zQ@%zeAN;;0?N$2fj0#9wX_slqoR7?v+OA;EC(jIDd4D_K&z?3pon7@@kvU<W8vYL2 z6aJFrDAlZ6Y-R1E?5XyD9FntzbBZ%AtV8(62rJU9{gH(u|B48YI2qn0{BT$&XM4Nb zlBnFEMfhy3Z=e$TtD~Mw&r<IN-{n9fZI#i1R}-A4z)6{FZNNur<?D)h`q-S=Id^iN z=d8||kn<{Mio2>O#!G#<(V^T8^)O07jWtr*DQ`fIF}3uuIIY8Mqa0JiYDA2SOo|MP z{3$%$QPh^Mv|wkrp)b>>X~*=!yg$vB=UOuyJHk6gu8C|O@y7YwHchQ9^&olqE8`(} zH67r1yo$`E+o_k_6o2vd=5XUDBOEB&3Q?YPB1_2c^clM)54W7Q-wR8Ns1cPvdT8|V zC@Jzo*bF4)K0@yI-{5avQTnPe>IwNV`$+1F4Vd0GhZ6d&^jV6M>d`xVB2<k%puDev zda`X`HGETwd+WGm*T&40G?B6@>Bny=U&ns?A-R64oLM1fqHk`fg?X8Lmd>g}ZC*#^ z@WjYX=yso=di^7EcG!2@3q@r^#4w)8Ka)352raiYaqM?!_OrJ3)<Tx;a8G@2scBnj zU*IqulN=jt%hg0_t*B}Y548^*fL8gN`<&}*=I*qrDZ9T8{FL_o^t&SOzkT@hxk~bc z^i)^K*GcPVX7QTfcV5G(GhXYf<<Tb_O?VmNqIHl(ZptT>(dZ19ThH5)>~|eePQ&pL ziiJH6?g%<<5!<3y$5+mOx$xu?3rp`S^Qd%U$zO_QB@W43F8)-E615||oAa$L!7>Jl z+Q#CRaZei-S`jP|d>B|5=n&ZBALwiB-Rvpp+33#9;V#7$k$n`#Fu$hlL)J&fr1Y<s zzZCvb>dTrh*T3pXN521+-W0j6!#qcQ8v+SPKd)r8GyCuh@S@$tYRC_jPL}7$!0B#3 zVlUuW>?r3<f?H;6SO+8@KeN`e3{eMw?>rPfB%8txhyNCS+qurZ%i@%`kT1ZN+vt(H z2MVNs)&z6)%)n=yJ^`N}sNo9CFE_z?*6zFES>*mRr@3o+_LA%xu8}#FJw<#{;AL=( z_CRlD#t8@YvbFMU<%GJ?Qry}HUf<nqH*N7qw=ZXpwx71WvqoEe_&>$1GvMnmM><Hh zn-RLAeb)Xm-_e$qJ<f(vy<_{vjf(v#I!{Cls&JL{=Ut4EdTD*6E_5ppF-1ERd>lB3 zB;?4@J1xq5&d&<J$PkRQ1RHcB%cu0Vx*ZE64n*&btsB=RHX%AGyt-q&#UZz%XT=dA zkb`hcexzh8l`+rx5$Q-j(gN%s$*Lr(ozyc*VfhyAEQq;X>lqy7|Bk76FV8hN;175G zm31pUF7<74yQHwB9?3Vp$7Ga;Pg;0zpZ=0B!!&!K>a_l6JK`uBRxms@JU<)=PK7ma zHnrEVI@DD_I#ilMCef>`wQMTeExWD%S?5?MTDw^nS_|49+2-0m+AG-?TBoZ-&c?2N zqO00H<dBu{Q}5`UHd!mv?k4yD`r^~fk8M7d_|)>tx}?Ub_cIb*4$o$vEf|GUppp5E zClHe?L=OF1dY%r4{-+G<1RN*{E8~N;t-YILJN)`~*{|E~S{qsySx?zcIwpntq6*|X zlHe;ar115k_lr#__O6JpV8i?y^32Pn#^yv-gjY#_WTv~-uTpXPnC~}kYF)q>|0(dJ zzmadf_b2aDPf^b(_v4&mIfq>PToE~&kha)1$CDkEm7Kmlbt*XeJHNI0w&YtmJhc|z z&!i2_Z0Qp2uFzID3mKZ*C?iJE&G4RGqFOCQEUD^wH4iX$D>6%R9L2({aArFkHVH{S zjjTK1589hHhgvC|9$*jU>#Ef{*81L3Uv<i-=zMX@ya=|?CL`J$Z!R%Qnk9@=TJ_K^ zOcUDqj(973?|7C$=e-$hjHa#@*+$mt>}ol8JxZXX*3P^p=F!J2OQMQL(bO{5LbeCC ziuU66`?h|zFxyJ&ZOdA<kz$e0vLkdNEzi13+vT^)YxOti2NK|Zk|XVrddoGDt@+Y% zF<i#!`7Ej|+`J0gddM5aMg14t=;H%R0&fF3$i8yI0Wuc)lzf4O!B5)1<}W0MRY6~O zM7}5gCV!Q_qxQ^D3R;iaONGTn+>h{vpLOnspMJd5nq1*kghDOS8M&ZZ1f1A^ELO`B zb(lI+9jR7QKPv;2&T=z04NjF)wc^2bzWJUZ?s#_%_el37cNurjoEX>gtPYvGGOlJU z&-7)L%BkZ$8X$TU&n9D}zv0q<)6y6&uKR)N?6GdP4za$rTvGchWn`Napw+3JE}+L* zf4PQw$TH5_*Sf(nMjfgc!1|i1GcD_^xo!Kb)h%b_p;QMO{Q<N#NxodZ8Qv6+-D7tL zT<ej37M-yr?Rn~5cq<=CKa$zRWw^Wh8U)q^n}$Y&Hiiaj&-EVWA)IT=NO3xj?xR+A zjBP}>T@845bK4gCS;qnAps=f9bHa{0`#8SaT-H?UW7{T2Ik0!?#1;UypFeMA-UoRz z6ZYhB=H_wBV@gCtz}wvJOtN3HwXil&?@3)~g3ydy`u5QB;JiR%AS0_iYur}14(8=l z&wlT8-#y<=-+kXnU!3o)r-8dMyuYOM)!((`YRPSqyQNf5U6`JoS<yA#{lM$-zYK2B zN@1>4il^~2ViF0%J-d}bPYE7tA#jU2V(-;;MujyG>*yS6?_q7B{wHM+!GGtA;c^mA zcF-=;&vGUCj#N*o#lq<#?Bg{0h8>nV$Q|S+(n7jgG%~+w?Lz)w8BEC*0e3&|9|Lt} z{p@n+ZL4Rx@En(TmiqIDS{r|m82PN~w2g6;4{H%t)mh20-agd!JM?}7<-^i$Hl7|M zL$Hf7fq{J`g;;Uvi8M+ssoYemtLxwtu-aPI{?0Ky?0xvGh{h4nJ~^w~eU@EH8z~>H zB9`K|I0rA$VDNKL1dZS=%;x_Hw#1Y^F4ReTqc=c0#1~Ag60xEu%deG!mZsKPw#~LG zwgl@_cp)^B*R!W&u(*hXlgZ#sb&+JXq;-yMv;8l}RL4%F6@9X{vDUZjgMZN)cASjh zbBv+-4J|u#J$NRNJ21sR$yd+Y6zK#Exhjovo}x?Y=`G^_B{*Cwig(bRZ^ZuS!GJl* zZYhWLphrb-zTNBvpQ*EEVSbGNCNjk?@|A9pepPy@N7T7$Z8b$Xt#IXEwU(uz<*-^x z?EnpBTUL^;Bl$>Mv7gW6Be`k*X1+J78_SVCH_e+5F0D;nOI-=>hu+75%Gz>drf_{Q zdi%~A{68?axF5QK4kiuAbEnW$4eS}7EPkO4S#z*H&!8Ll(?YFZEO*uM%41o;NikYo zrFOAkb=Y#C_?(OtGsgL=vy9X2Xzu6?pQVxZ366oz$guHY2g06)6%W4>J`SE3*CR;8 z;;;dZ<<@D+L$;k<<z>uxC{Xfi4}<OCsXH~48tSGM*Hd&||3|m#9ku_0Kl#_f6S8tv z`*dfj{JqTgci+=fU!`}?n&G1Eq8`mt)9dy4Ja?hlFN-?hoPRJT=_jD0Q}h?+2C_pU zmMOLl_K|iARH+SsTJ2XW%S-7;Ue#<4CEp3rfcD3UUQ!*bw3lZ|Pm%n7mF<%n$?fEs zau-EWTPeMyB|xW2i?zHQ@)TXvL({P)9Hu?g*n0tp&5`UrIqh+~{-r-P7m9yqXPmCD z<(0~1HQDm7wVLgB+kI;@%#Pnm1KBAOBU<t|d<=o_uJXZB)J_}&>>sSF)s@m1GK_bH zRzzVn<xXlU5Prq_Gd%e=DZ}LoQa!d3h)7G4Ben}gnC33Sq1OuS3lt6H#+};PSju}s zm-8Q(eWT3x`d`|V(EQK?ZL#6tzoU}4!6M|1s1VmEsXz(-R2r+<sIO|;$Jl?ecd#wD z%u$^3ROvR75YH=T)WVkY>VBo9+#hTDXAzILw9Z(ByXvLc4X40Lp2)xauL{$;hcqA; z4}xt%w?bpUAhQK_`Ko%;-7VZF-3gdzjSJfKNnnHvsDICh+TtqT!6U^Nai81=!nZ}5 zC*5XGX)<wwi}gv=rJM~0$9RZ(O^sE@$ot@raE6Q}_eo*aSY8T+MLBy_M@2`HZI7jt zqOqpbf~VONj!DaLgN`;v>)qg-Q7IT5sN+xf#i1Kb_dg6&3eD4U>6zLK?Fao9GOHcn zt>z-_sLCcoYj=gFh=0w;dRus>77o4*bPV<iZPK3UnZ`FH9d!^zNEhmqN+}C0A={76 zQsLVoE=OLAvd5f^od6f0C-I5#$KvM3oQymdR@xD3YihX;pV3p&Id+*cx{K^1$>ax2 z>aSw@v>hs!Nu-Y0Ztl|uhirjW-p=lQaG`DrETxL;gljW&H9Nqse~{5Wqj*MNc&sF6 zCTAVXp5nTY)7<mY+u0usTn%l~o0~T93LD8))NECQk5C@<tz1KTON-EPaHtv}QpHka z#jGS&(pxO#qrj4BZfblD-7eR+Fq>v8Z~xm?#`;c;P|qs86kV1u`O1-hl$Mi?<}9sD zz~-F}e}un%9|GmH&BjX}Nt%)4q%FHHx3Ijotw0`J%gFYTvm^cp&vZVrJFSW$v!?J+ zD{K5<6f+lbueeM0lJjCIUudQphEa!aAZ?`uN=@vA??4+a*#1S%VGVVLoX!fvd)me( zAX#L%7->$>Y6kXun|Kt@MNea2$-u4PyU;={w?1Fb(uW&G%opZDIPiZUC0Pq;p=?#_ zS^l=1g?2KZ(nDS^4U|mjENT)}4zb*<3aw3lA>xdOA)D%Oj(6ZZS|p2(K^8F|dn zY7^Oo`FS@gLwU58d=P8+N9f?M2Lt{EzKNKDRrF-Izq%`UOiu&fcK^M=wczp4R_za6 z(+?Ww%r|_7*e|Aohm>sAGtO#8=xyj;C_D62>jq5j6~8JnNFw{rx*$0!Ag@){0TXPA z^ZJ72xka%~uwH?C*kJ2XYZ+TdTVAA_=R+NG5}tM+=-)V5e&>_TJZ4k#EAX4sB8tvt zGo<xWUTHh44quT+qB_rozm@5OLj8dqz6{n1-44Cftj2QVN8_BnQ{SPN(-&*Qv`f(P z&d@4q8??`QcXJKDEON*S8Vkp}R4C=HYBfS(!Fz!!!BxQ=Jn8*<IB$Y|xeI50HF>qt z0rR3h4({BGbjq&IRJ&$<uC`Dt${pn&)v4B%)94?hA-PJB{YicjO~CU0*%)m!g=TLN z*ixBdhUjee(+UK;1$u*Xj{sbAv3c7VXN)x(Al=ul_k@0<cc@3`m(b2&FfcJVO-qA* zY$rd%M~O(<N6M!zw-&SCvfs3qw4bzgQu|9fsY?dX6{!4*sw0$0c@eYIHsAyn)Kj1c zDXx!&GhH?x4#%sK@C(d^9F#G58c)q9Bux4wb&+n-MIw(GLT+c<(AZFV=%ZHHD1f`R zmO07X%j=S2l+x3r8m-T!AS2*M%NW~rIQ^Wq?X(WItWnNNaZ;50T#19f`V!RFAvRu| z(0y<b%fgg)Qt+Kt1^4;S{FQmc>}d8kdLfZ2O5dc<GZ^=a3v?=0dtrJ(#PV)Ny#7i1 zp#NjOMSjUiF-{nK0q?>`^DDfp_$J!W$&#V`YOP@(>bU7p9r@sHpvueHQkElml&zM5 zR$*DEzL%SU2Q+{V1`B=@vq>@10rnb<$|B^Qm<8YAuEt)iv1Zr17*6cT(exhuNE(R= z=2AU1lq)nWG+P^rr_&v`tgJ7Fe&LRJguD51Fp(ed>0&C`f~=`GtP?9s*NZrg1Z)0G zJfy3obMiackS;L~{zMB{C^gtk>cd|1@b%mS*Vf-e8BtZt6dy$?ushGtu3$iyr}u=w zO@CZ#qkY%h`gUNa_l>${7#yZ<it)rlZ1f6r)EC4)UI**w7vq)jGj>3IbG<ndpRt&( zgKOF`HNtXJja0*w2k-!mrCrEhqzJu23*#iuBYnZ#=Bm6+ZY3v6%cK>Oj(W6^+zRTI zI&?O|A7+c+#T0P|6aVVOB`S)1+zJ1iclsZw*P3c|w5i%n&8x}!M{SZ8rKN>RX=}Au zXpa+&Va9A@h*1-q+djI`3L~{-nDNnwH+z`ZP2IeJRFmRnd8igEn~mY@Fv6^DM&fsu z%?f-4u%JlHYsZO#<Rh6v^Rbs$TUVu3QWg0BY-D5beCxB)U?;|~)+~n|ld8%S<l{J# z`zk5QO0}yc4e0`5a8qB7I;6I|LTV;8!1Q9PbV52Kot0idzx`2KE!B{&vnp&0tw9rL z9om>W=rWQm>WH1ZGtk}%z@x+XMDsOv-WUCqZbw~M!}zK<*8jy%-duaH9oAbJtBw7} z0yt-AI>*nKV#wxO<CwA6IAq*0YMQ3`koOXM#4|xi3-XEFq?g!WX$gLgahTfgC5c26 zapY&r?+z20_5s^{2CD<+&lK<}#>qRNY@d&NegYw67?RLu;*5B}LtGUV#72=w@_>`E zf&aqu@D1ieVCwmeT*fZ2*faE7&@gv5kD6mqdyN(I#Z@7ZID#^gc<@w@@B+LHUx#|i zBF>9s@`83}cUcGNqI6x_BCV80!87(Oo5>clYb*$#YnQZHekfmo2kSJ{KtjHQ-)&G1 zC>io6sW|*c_tW8|GI%pv&>KaINumbXNhYJJ=BQvcLYcDDJZu<P6PNUnh8+m|e|Tn2 zyzgs96XSuAi1lAc490Z+us8}IlJh__1I9IDjZxlQhx26?_JWrUK<;XDc_r>CD|V~` zPurF31D#A;(A!v-lZ02CCAn~$&!#<@pB-T5={;hKvf@vmv;EAI*c+FO>ioG_Ln@P% z(5-D3<-}&b9Z%pbKVlAmbHhqw2d0fL^=(Fmna10Q(Qp7vB8%u^+6jM$8#O{Z@h6_< zD6vVDBO}OH><fl-{3<C&0^%T<M`z+*EKlQ536Eg?X=hYtey(93YDg`3!Fs{vqOnv0 zozWL?!QbOl-);0V^YePVH}4^=bQGNAC$lef8=VK`!xZ|S7GfE+Ds4hWp#sd!&!UcW z@=ClJQY6=49fXU8P<fZb>B~qZQAGSLc8j%QgE)(iRJaa=n;VR!##JK*UC~3+Wu~Gx z>TQ-a+nfJk|Hbg`Jijo-5Zn$YM04SQALjyIm;cQtiA&@jU5*5z8`x`qfIZQJJ|=&X zu2`dWaB7Za)7X5rk8NY^*-@N7FGSn_f9DRmoF1iL=)dq#?<0T5WH1%pH1EhNGMM~E z+QB;^S+o-4u^I-z?QSj4=8$NJm*BJgXP!3U@GMHAY7HZ!`9kBSzSzh#SMx%=iunku zp}Kj|T*aq~L8J`*ot`CIL=u0+tBaN*QFMj^Bng%BcrucF!(J;-zLPezJ3ene&88c1 ze)l2=$pLE67x3pk10HlWvJ8kehm-9fDH>Ui>Dc*s(VZlTo}x0UK#J-7LNXS}+HK1D zTyqWPLQSwjDj36!Wo9dpMe?v;SUuVifAS1`$D1*?Dlb;U{WC9~L3`R44)L?t4e|*b zlx(p;MDfPvVy=@OY&o9kXBI1+1i$YvHNgmMkMHa@eT91YExmzN_J!1CZILrOkzU3< z5ledm$(Nw_rt~k;7D;7JdP;N=D@i7_uEY6D?Bc%0R_(oRK!H#h9=Lf(d7PN%a4t3_ zv-vIlJM{B~c}JsxxmjE%8PLr5_!yjVW$^1cZv^#1U2`P7FC{+JJO)>zm*yPd5(luF zUO+=~l}{l9#Ck9kd$NnnNtcNP(uw^mtzu>1c0K`Tv{Pi81f4`%9x?~>@<gF+=}_j8 z*2~YOW9(0Mhb6PatS9TuX0y3$f>d9rs18wdDU%gpBj`V1>I^Xl8=s9I@v}_eg4<|o z_KMD+HCa<u0afNKq)XNlS$wIeiDZjE&5uTBzKrz2t{BS~!#TaZC?(pPRFBbq)90GQ z`DJs8`3K*?9sD5A`#;1On)#{Fd78!vGm%u13Q0||yVkNfz+i^M)8UP%NlnrLw|^Dx zH{O~RL^dysb72xr&HGRjcg5-Z3!F;+h3A(KXv!mU5@_;m)=m1%2GU((33g2x{)6Gw zDjUan0}@S2iLpEZz8^zy8m{Jt&|_toPX)tmUxrF-7jPZ|&y&r(n;0Pu;!OsL4c=r4 zJku;A=8zbYh*M)X--}hZL7br1@!i&C>8v*UiMGM-21%#oPfAcJE?a3mKFpY5%;(d< z{h-uBN0Y8lnruhDN(%4Edy7`Uf4Ye-#L0GJALn8t*=e?&79(%)w>G3FX>nSS>>``6 zD^~Lhd?R-O{g@3OT`ro@=|JPg%VQ)#$CD8D-CA;l{6YQ^@z5H&#bAO2LQxSrE-03W z<$SX_!<0;+pVwa+XZc*X6Fep7=r!5_*_#8{VLAq#N;N*+7^juh{Khq;DEu#b{SbWu z*7gqZ2XA9mM{oZt?Er1}VDQEMk?X40l##NR21H}L_qS#u=cuo`<8EHhtBNpj4OP_> zHi1oLI-9{B(*!n}O+%*rOYxb+ld<Mdqc*Oe8t^s#gZ{?s$mp2NtHXuv1>ZrMGZ!n$ zLSzz2B133b-~%sENgX7ug%>Gn)y+<39PWiL;%_p5)WanBGy3~$a&aV!_9q_RmP`Dx zna-WeCcD`xT7a&_gt@TDG9TksD<G~?L0b`(bjHvA5I8`4Ud(K#AJ$f)J3h)s()n^* zHCYKr*|a5{OP>)3yc-|kgji*agzv}>{=ryftmj9?S9F3Z_GK=z70<CgR#qx>G#<kv z9^l_&$Vg~^kMc`KqOrtC(f!&^?U{B(zisx!&$om<0srD}T8?x<r@sw(7p1v@9<Ui( zB{h>@N}G^I{f>kqrSO#4Oy-KZSdEWqob;R2UW$<ZW;^kfzi?rUGoyr!Ocg84-Fj=i zKe7tqL?ZplCQE~*=WzVGLYo80T!`B6ocU0{qAxV!xKEs-`<RA~%WpO@3&Z=SB!7&1 z`~f}5647r?la8VWn<SlN<46?mg$lVaPUNF>B3ndni2-=F)9^JD;Jx=4U5$gBM5lBd zcS9vQl2#{Yc`Uz!^D0$5p(iL|=UF%SpnW8p#5Fz+?!6z$za*VdR+*g#cJf(F6P<Yz zPDLl&j!~$riy?)(8dm3VdJsKbWpY|L@U?d^$4w+RL_6NY+-EN554ltPOtP`+cav^7 z(L!)8n#2`U<L8YgSc~~_Gacst;Iz)o@_;Lw1toSf+~WdW(I;b{Q4!~TDtf9o8U-fd z4zgYh#Z9n9Y~%aQw(vap%lszp(uR^IZ-Ksiu4+{+YC-u9*xm2VG@KWE&0A&?*F+30 z$|6`RI*QyvI_gSN0QEpA_A4r&2Xq2X)56kS8iT!mT|7gdpIa0M!gbd?ELPDnw5~XV zB&V0C2bb#ojGy_hq&rj+s5He;xEf5CMzVgG9&M1S%jYFLLm*^{<e)J5Xwi<!(pTU_ z8R9keKsI*AN>N&rrdH_{yABO;6=|%TU%7-zFhR<sLrGsA3undZm_Jt(f1AJS+w{t! zHG4tNLmLri#*5jwk^d&wuv(qGJzT%<^ZDFrT6CAD>jh2pZe$cZaEBV}^~uPXIHbLT z{>a5I@v7uJs-Q3AU!?h_^RuKpi==Nve^h4Qz&Ojs8f!$G;NvfxCiCEKr=#K=38b;C zlp?)l@pLKfQ#Y^AJK$|D#PchFxyDN19mg0U1&|iok~ar3`3UIm@92j6X;<|b{56e| z_K+}hBRZIk=6upvYA6*Xn~m+L3rCsFczx7)i&<IOCU>A$OqX61NsJC;HIy)`@Gs~B zCtwx+4Mgq|%g>5Ro#idypDbtX<jc}k_L24>O?fRNQy<4=`kc09+tC-!1Nz^WUPS`# zGxS<vqL7Fbn|LF!fUc1$pl5W!0eF>h(?~!@^JJ{laQ@nurq9uHA){+A{LUXqP0$OC zpepg=xs)dzjS8XDp~Kn=tvXP|iR5o~oYqHYpAD>#qLMr$3ZhC`hF;(g(hn6`W15>4 zM+NU8BT?s4vK{BmL$cZ|0i1H9UQM(FdzO)kn4Nu<S6dRT7PY3lK`Ov*@OpZSP@z!$ zP#0~1S%C~;wUoiiVR|1vo?p<vz(W)G?+5sIk2a^m+iL|+0^@Nzw~5-MuSkK?>|Y}h zJ9Z8!CpMbX(XABc6G%sNXvwrLYW@J~wKUv1K{1lIGo!&ee}($AwD_5Bz+`M0TyCRK zBQ>J2;5Mv65&Vw+$P82z!%=7Dm&TG~M!H@Fr)Lt~s!V`0ULU0x8-bcBT4bSG+{Pn} z6WUk(1+T_TX`Cc5wLJh2kqG`3?7dN<CaVOU$Q=>M|1c+`PkoM4p*7!SE;sy8C>_FE z_|vR~6_uOhGJEQe^+dA>-^Pnz{S89L6v?X5W|(MgN7`XW(HFOhX>8Ot>jQWS+ay<F z3vo|P#P_?9wi4mO#tO*$Bo!W|sz~5gK8h@tx&kLzE4pLG`xIG7r_E3FKj{z~g4+8s zVSJSF)|ktCkTqcZO{D{Hf(^$x6;H#+W!#_N#SBshC&>`p{2X0oSCN4ptB!bpyR;!{ z!kYZ1-cr8>gl8kmWOdO47iPK0GM;UIH=Y>dp}*SC862_ha4RbMWYV8H*eF^;95xcn z0i*=Ijy<&jT!4@C8C^n4(XXN@-pp+Annb}j<GkENo`cj}6}MU~qkrf_Fif9jw&Kl1 zHAd73Yd_4H*2p^hQN)`0czHer%-c~&y&nJ;`zL;fETIu}Ihhat=Qw=bXS24xNNa+d zHPb9XN~8XHCO1}VsQKl2z@VS<tC$FX*N5mGjQ(OdYX+~LB)*PJ6ASniaZKdFIsFZ& zj2~XEvvD@>G=pYkK9{@1Io1nE!5^0GmX%5x%|+HB?f0ZGj6QhJ1<@_P5bH!qXdGhX zYAjkLm|^B1b0~VJ<7S5FD>Z{>%`|BNOQB1c4?VM!=HrWuH(F_6`Fldc`4?K96@xG5 zbNYcgSqG|+D>wx!k#=TZOpNXt;jE7`L8*aM<xy~;A7J#?Ynr=(Gwy=(d<S0CSfXvw zC-QEjG7!CvY7d~kE9CCLt$$NY=E9pQWJGEWw1>tju8S}13g$|&U|qIh7OIIom@~w2 zn|T2FheOE{Io=Xsv8VxgIQzz5U?pu7)!^~8$ZRP7!)IMGe&vU;E1K&sLP?rme`AiL zyIFp6$2@4x$Gy28`p(m46Wn$Scxisp9Bc-Wh26*)h0KBsdXJaGO6qF5Ic{1Y7)NOU zc>QNgI}@ZR<*3S_{jQ8#e-mqn{Edg9VOX_OfHzb?C0alZ$>H*Qu$4B`@}!Q@J5*I$ z&CA1g;E_~IB#3lY9N5h#+C^~l9N$KYvXjy#r9XI4pLr{E!ueqpnZ<Upha?aB;CrYs zuk$J9T;rlq78BZyK)HIOk1H+`*-5#aGzJ==qQII)@PVjyo|`jx5AcDSX+MM(BCD+^ z`dbe{%>+Cw7g+@tgL-(+H!y{$%zi+%-%CCvZ<p5LB;6&t8d^xv8}QZi4fw17S+=QH zl_W586ZERVCZR&`+#7;QXrtMlD9j`Uaps0l*LM+>_*cFQ6M<o1%{C&x>05&bwPfIV zEl{y_!ktt>GzErpk~bDVnf<V)uWA+b%UnSxRaRD%mUxTjXg@srv*t5olvmW38foGP zvRJyp`L&@`O4<nAytDjD^0A`wV5Nn05jXB5ZWuSTOQCD}UVdMEq*dj4V4dw!-m;@2 zXy%w>Fy$IY)}R6}Ct~R<cp^Vn+9*y|g%5;EzAK#OKbhm<9@~K1!2_#Iu8QM)3ePK^ z@D-+&@29d-Q@+F=0Xd9;CqcS78Hmd*qqpgyAEb|DK78_C0|WcfJjMI7E^<++F`FtK zf(pdsEzpxaH#(x`T`u;D5$Je!(DQO*c^4EIv*ZYQ4cTu#;(f@UqCBr?`pu7GrC4KL zHx7cOe;x|7<Fq0wpXIbHYfF!F(+GmoJD5Bm|B>8qjd+U`2N!wH=jms)`bI^5j6_N0 zq*(I1@mOEORqVQ-#TU9x9>)g3secQp02FaO)S+jftLi6JmZr1v<hZ#CUF~_}MrcN8 zwRwl0rI$!=)=2hB>v6Y#p)RPj#|kHHO;-Ww9f?|Nvc6YqsUI^F=s^}j^*@KLp)<kw zoQv=FJgo+Q_}}?YB87cb?ntY7TO%4L)ot86#pS-h8LseK<_!Igeo?f+gk_Hi=l9IK z=tWPGMv6~$$=T9$sTUao&pct|#y@8oM~u>_MTd(?a4VQ>))#}&n~fBi=ui?wUfL3A zJr#v+ZsGF;RNR=X)RrdG$-p*?qQlJOCq-lCm)FSiX-n~qN0HYg7y8_h#7`8m)iiX~ ztV1T_Yxc_r<?ZYz5-D1ff2f~-)>Zymcz{L`am7po68<|M#2&~MWkw5&8^Vw7+>fft z4Se7S%v+phJ3O7=4Q5m{m|0yMU@eu}N&>Q}^0NBov|x|GuFy<l2ya2spn@y|hQeCQ z1LY&V!poU<qlDHZct5y9&m-!h{-~ucl#io2_{s`NEzx&XVyHjGBXHz~(+YBugj69m z639bqph*9S{J=YEiYxq}I7uD@hnWG@WPT~gn&at~#dBI@3S$I+XB-ZNLPOy@GM1&V zR^UqXlow0e*dN%Z&&4NHclS{Bj|7Tc&KST~@%MTmBi*ct3T*(*gGs^&lFi$b*79g& zx;#YMOrHTkxMt2VOjBi#kY4!^Zj4uf(sxC_KLa19#6U3w`sU?kEI-N{a22b(5%7># zsD!eBp1q*U#T2tPKTKOm=gDGznfDdVff4+Mx~+$tD%;p_o~C)gX5XcsLn2`Ws~|_p zA8^b3NiNV+<fCy*uMXrl5xxIiI8@}NAJ||v2WjF(j0~-+`9bs}197uV!l^qRo%KS# zU&M*3=3G+&zj&5h5Ou~Znahjh&B_`jFWb*E@Y7D^2hB9&keR|Ci)Um4?MmMB7UG3? zj;<jev%<&sBb$zDVkqv?Wnk;wMn`U^&BaK#kn9JlWP|@{abTfE`CTKD|H_&{@lr~j zNx!3C?8y$0Yi1A3%BPw=cp2Q+S6MxzP4!_b(B~39NAIEa*FP8!&1A7qicxyAtz<8) zNxzsy_1^k-V=->1LBIv-aUv?>Mm|c{K%aOVI9m_)H+dkM0397kEcCIMAX?yjny(Kw zKjXQ5m7=B7m}qFIz*<PNm;nxn$?pQu7z4cLB4)yM$SeMnaaR9i)ZlLgM{Vih3wey# z35`~F7KWO05;=x7;S?=^_w>U#I@9>q_(SAn8&Hv_fPu0aUCLa#ij`F=s}b@5Jo89W z0#){}NWi@(()dE)hLNaY>jM`p0S}RZ(htgFc@w^B1DS3<(^HK0V7u(3ZW<za;i%xm znlDC6nxo+5b`{^(6XQ1W9g2z3<}!1y_<^QE!P-!a0P^}TkdXc4vB{0O;swy<i}XCP zvay(y^k*tv0sQc#=`j5UK~=O7byyUt)O)yfC&{PT80hC*ydXEtTcWI#4)w4`udoSn zYfM|;i4=WwC@u7xS%vJy?rKDBQb*d5{3r_ZL3}mdKr2>|jRf9Rmi#Iz00FxzssLwY ztPwa#RVi3#=)GQ$*DRY}<6pEcU=}G_YjZEnCl8VjNuQBsA>s7PZ+eY?z?|qKc9SZs zvUD1`mhn(S9sVB<30A4i_z|Bm*E}yuVdC}!EkSO<Dd;}G2#(NF{v&3osle9u((k}i zN7DsjlG&Okk^U@^K18>lOv6!OZ#S!$V~iASUTBF{Tojapa)KPGR8uM;NxBkn=H>i~ zk<VO-o_IWN@ufIZt4dWdl}iO;QIEVO#n>(O2&Y{p5bl>iF8c71aN~LnB%nQ+z;to~ zI9wA^mdqq2@zH`d5nqk|W)9BJL!>V&EiaJb$)DIqBg}@z5VBT&D9sSlkU;JZHiY)P zubxF7vJcW+C0SjmPM5>+cg>L&(?zIc>hXr=-<mIU8#(3UNE^|IIh4lIUa`*n0)0h4 z^D*yD4El|gkk(0?<QFnj=j1P50qDeG;iuol1mlAi(07~LQ0*ts{m2UZ1uBS(s6Z>z z4<tW1iX_|`+RM;h<4@|4-bi1ekjX72i}yxly`fo(yg*%e0hk8(??|F~L<RdthWd^j z!TX&J6!<x~4b6?2NEh3{pL46&Dpb0UbT)s|4DFKWpp3H4wqAoj&EGg7M(P9fn|g0E zOW5fl5=}p{CbFA0F-K~>^h3M@d{5UIL&OJ0p}aXO#sWv$MSlV+TNP(w65quC<z;yr zWH{O3*LVPD&sgBT3AnEtOS_a3$|qtsubRD3)h3WG=2D}t=|>&545-OPv77fbN1LCp zxAS6ddlM7<qH>I~ObMg6LlIymrI}AKnXJOMiXA}uGjRj9r#4!X-_X8=2IzN<Lg-J* zkxa&+9G#9GdKGx$KBltXU^vX;{|Xgna}PK&*W!POKY;dbXZ_UPmf`YNq^;dH#)Rs^ z2QS^6N`GRPz)$wd8<peo7wNOyT%JL5@ROXwJS<w=0t@LXsc1acJBdc5lK#cJ+_NRP z6FdG_zKkhq2K1-dU?Z-<{nrVqrk+x9_6>aT#jLhDE^xqm#Q#z&qPN#d^4l`ER<}L1 z=*mxQuz3O%W^;20rpd_WWMib|(n;jp#VhC7Cen|G^gD3=&(?;Da;zq)h)&^zaoT7g zkj)3yQykqW3XvINEoL=afzJ0ee%ExP5xvG@FcZqB9JPd`O#T>dv^#MFEYl~7+AJFL z#Om^7sS>@7iew>~#S7|N^p(I)n*as6557!G;L^*bIdV^E4>IT*x<Q2FjTPj7<HXGo z7MxAXq`u$__A;M9yExL|Kmk8tI@*wqW}G|}bLcYZCQBFjMLm|NTm$!^qnLr2fY&$) zoW^4$nH@1JiYIoujT8iDVG_RAf1yr)h-rs{_j8wikhA1nbRn;1PD7`^7&?IpzzZmA z!|J0uuYi6?Ll^uPS%4|-Rm^g00|UDQ#CIfpW-8i!%?{RBVX_c4z-Zj7Ua}T?pYQw^ z5sPkgHO`}2G>Lw}JIa>+0{(fP7lPmUG`Jsp*M8=e*a@t@OY(1QgP98x_FF~?FlH`e z0`Wg?!D!(17jT*lpg^-Q2YjMS`eAWgS&LMX?JNp6$RIcXx6#|^;lPpWLlHWdp2FF8 znHB;6WeYI+BH}ydeM?wPD4@q#Z>k@e6FQ24q1OJbzIq|T3uBLrl75o*(>-K6Jp(<1 z2mGNP=*<twre&+WfbBh-YTQHmLLXlX?|%OxLt=&SMhc<^?@y1=e&E2EQiha@Dqy-O z3suZTIPm<3^ZGU%-}BQ-e0`{6Xf!WE6M-rIPJbo6`AofGsD)NtoR_OvIv@?Qoh3%y z%W`;Uusz=D>-b`FTeywY`eSteakzcki3ynS<{|xYhW251P}Nsp_n09cQI{yA=w!^I zzG7C_LLX(m6cO|_-HD_@ze&v##yUNZ9x%3p8HE21mrn|YMMruQ@4pMQF%hWa%A#Is z$J-gBLNs*OSPkT;E`2Q;V9xue7(p7bzL?MMU_<ClOnvSlo5e@+OAXm%FulHjGaGM= zFi-Mo@DN=jy;FuL3+X^3+NdqU*(Yhd6eA94ZtWNF0=k(W`6VjJi=;bbFs~&#OH>^% z?I)#akQSp&ffhv>PNNEcPishCtlt#z7p4=hXlYsq9wNiR75EMBX%fAQs{a>#qkh~R zNp`TuNPfDBPQuA7q%NOfl+bOMwPYK+L}SvLBqFamQM$rT(e-$q&BQ=V4d>|wZzEI7 zJ*6po%Vz-%eIkP5oOqAQsRw47C4iWB1M}k@KKml{(IMj}evNEH4^Ay>k&@$)D$)ta z(asEI0@vz+&i_4B(jM(MGlkZcj*yFHZDX%q#Q2N1!is;uex<KOe_n#$MwPP(&Js`1 zq5X%>u>#)Z8E^;cn*SJA%p`GzUSI*X893l6HUoIZ2jkCRz!w*)i<w+=?4khiNVn9% zmM2PiDM+$_VmvoziV>LUWQ!Vl=Rke`{y^1Gb-lfi<!u%P>1W}V9%{B!1LuSvOtCtc zYgRU^82NY^X*{wn7D@ZeilKYKY3OUL@ZI_@V(@(ml2`63l|<Df(?>|PnTAuotjx$e zy@^o{IRzKA=)m?+do!Td3yso$AQPno)ndDVJu+7=FLrC+f~EA2W?BAJY@l{_R=TWo zQk_aq_EfAF9WgU13g@oVMqc_<D*1mjodtXp$M?W@_wJHFu!H~!?(PnuI20>xMGF*n zDDLiFTA;XFk+!&NAOr~Rk|04tAc2tF?(F~jHoyPpK7r)!c4nTxdGp>I7i|#ifp!fn zYFbr}-O~vbV^&c!?S5*o6>V2>#Snk4ZnySa_e|ElQ6)3P{%q_pPS|y=3f@uVAV+_% zfNl>k(z<hVW*5k9j<Zaa<V!?srFLEWk#mCet{kr8dR5Kjym-BRgA>5YRvB}Hxqw`i zEu0{=Hh(6jd4p(dwBFGD#WTzEFFlm&`SkLfb={+Ovp**u1I>NO<IJD5dqyVrPw@8< zeWrI}QcH8AS<Adm+^##cxTsHcozfqY>pFy!ls$HY`xeow0lw}1N_i60eLBG1NNQwV zAZB;U+Mp-77Si>3p315ZR|AtvBri$|O5S8A`g}<h<GbB+ioQYXttsAkt0CuWUNH0A z=*!ORing7b5&C|QO*&<b(YAAX8Kfp!UbBOBM#bxOJf+;fY59o%B<g!zGkpg8*6{WC zzHu3LpXA@Z=KtLA^Tco8sb7uMin}-Z-S#=FuOi!Xk@=7;*Fox&YpG9vpAEjR{Yv`X zbH|~>-V;BZWsXj2&3zw=jQAkynR_?=q_(?TYVAxv?=^3BZHDKa?=_-Uv33$!BuU;L zbP)Jrw)aMOyJ^GReci3-WHM4W?9=qf?7<mGX79qJ|B}n9neL~l9;SNgvx|tgZI?Dv zCr>a>kjFCA*yY+n2HASM8+QnvNG|35Qw#Gc>etb?xNmjO4Shb+JI0%w+{ZgcRU~hr zgmKw5#;BqdQT|q6Vs#hQHhY8eHMdw65zJg<k@Rpyx?XFM$?LyuNP4MF_Fa?evF}Gu z8ds<aC7*qCa-*bgNxPE`?>n=$UK`9;bY;_B+7PpF(uw4O>Y4u9n4mSaUV0mwi7F?4 zSYcx?SvT3VL7dvX)yk=-)?hm?JCCvCh$L85)n;NG{e9fNYkfw$Uvp+f&VW|JOiDUt zj@Li9Q~7mI9qJctjIc%~2PPFv%%1o%`3dI|=h(M&C(oy%u|j*ThqyZ$VP?ngTM`E) zAI3+^#O^uXPEt=e?ObBkvJTnDTt!{CtggvV%;9<tqc>5EapYZ0)%K`L`cTh4cWrIH zny$6e$=HG0f5gYEVa_vesJ{$9Jk{2&$=t}g$6e4kV2n1Z*^|Ae%^^mR`-_U9-m)aw zBjf2O_K5Se?40a2Rz2vN+m8(Qq3%(7Fn8v@@g(^z^ITRFlE)?Y@ODIkwz4}7cOTTI zdgmpTBSW*L`BK|u)FcL9pBp4Mn}_U3cNV<#65P6Qp0ml_<nc7sE@(qkLvJguzjfHV zEy<s*T6wi6dT*aTsf(oA=$@}fD(VW%->nLqV{PS*$S$rLo+$3PtzmRj5!~O|&pW_; zNAA~5Z&Ou|yo776H+bSt&~t}XI-{Xa1;4tUwD$U>FNvj+uUqxWjmZtX&9uL;iWAT; z(_EH&qN}%l$X-f+pZVSb-;)!+nceA<HpA7*wa;iqe1D88r-~4}D5w2~N6|^$GpEwg z*UxT1{G@_Ak+}35BM-d^{Jqt_&;Q<<J;@`Zp8Jq{3-_pH)aq*ioMWyekLWb{(3L%1 zjOv_d9k9My#jLf~el?#v%|`kj)BL>M&40+`9q(;wttWqc8hiiTMCbC^Ig#wFp1oQ| z>kp)3vwhL*Xg;xg?c(Y;s~MFZtMLfap>eL5=dAJS7Fit`G#}%UdxtBR{VDlT^6%<* zA|q}pz!v+|@C`6(nstb8RU(V^zI}#Mr2ei29^LKM$8vsJzzi`pdn>0xw+w&uY%XIX z(o|2c>;7ykwf4|&;hVVztNgc0jjbrIJtBuQnB4Np_KV~`c2jo?dVB4Mr`p<!ITKQ< zxvHJ~>AN!X84Wzs@kxgeFT7>@X|2qz$ptvqP*xHBpgWY@{ZyVnS2Q^YJII8+XeHuR zSG4onIkhzU06feKjM)n=U1DB_r>ohWwR!H}eV_PzcBR(R5tCk-JlVWY&PX8ndXYve zx-ta0JlYs4<SOG|R`T}d{=FmaX!5-GXnve@%=7+h?zDEQWqMBNJl|EpC}uacu2DZz zTaDEou}^O3HNQ`{(zu#<s**Qc&NaojVr@=J>wRNYCO3Ge`=yavYejZOC$eply``1c zC`WW|ztUBZzSH&ExQGM|BzG#oylf7(ylODECAC}Gp;l>Yt@)$57d;W|`9j@URehxz zLw@U1JD&5O(Z(S?HGQo!+q21RuBX})A0Ok&s=u@1k`E^Tr|6&N{s+EXXV3Qbr`Nr| zUCb54iOd>TcVn7%T3xgj;LSWBexHl;l%KTcV0#1c*j4PoZy0UeXZ59KLQ+Aqh5bSs zW=vq$^dIrLFk+f5tmeR8)U_L}S(wb5_tfHbHYa-z67g%G9@CGovR;YYA;b7WR$eLc zcE=Dc&92`yUK>B^F{(V(s!Q}SdT-9Gw-DFfz%IR<m4|rH1EROxU7hF?G|X!3?dsiN zozy1j2l3=TlRNV#nO44f3H+TTPU%<aSG1DsXfK!}t*LlVe)QhB#K~SPS-nHG)jAys zxREBno=M-isa8j-=>F8>^aZ-972`yAHn$r_laKzhQAvwNYX)H7LhYmE#;vuN>L19N z`I~!ccj5;(&@5|=m7P=NlGZe{ua?Di4SzR)OvhoI#QjU$`7`%~U*}A^Ag7eOl$V>v z@*4BeUeQ(-HJvm3W8NSuUJW7!P)w_;63o7;BNf8FoSBz)^)cf0C1imFsbs4lR0tz3 zvYJe`m1;TB`blI%Ro73E>lkkzQSY%>$<&E`ag}lTy7Rb#vFe}LYd5iD=;XKs95+;D zID_58Tpj87J4i3Ca#}~o@S33+>=TcX;Zw_wGCNz@@NR?2-8sf=o$cd9{cLg@6R7{L zPFxKCPW8mwTuBe(9h#s1O3O-4$6|HSF34K<k?9h^KK%`Gzcbo$GA)kjm$YTtG%eT; z<Q%(?(zPjCm=>hpA(B;93)b>zbJ#uZ)%Mx#R21>01XYXNxhq5;qqNn0?-jTAg=s~| zusLZL)pps}R1CUlGI7K?#M=jH3(00E&Z$Lx?X}vYHrwfm6a7uKL0coIv4ou8?{;@> zGCQXZdRy{&;yIr$WUo<W?04*NLy1biwz}JOh)kT+dcif1wSU3J4seo%{K4P!-C(A% zJ`YR1mkPvx?6RsVyp}_SaccOpHkMkG0_rvV{z4y5EVCGqo6GdeEuwZ3ANz^ZtCz%$ z>*^E8|8r4qTanDcF6@zAj5L#2*LIa!d(1Aby-|;hp`2Q0wNCjFck$>=G^!5i%lVX? zhVq<BB#`~QkUYI4A`R^sVI^MnGw@N2v;BCxI#RlXd*;@0Ch^s7hNc^c6tvNU^qg8@ za&-StQSADt!r-Trorqt&kvy<C_#-Rl#M8ATs*-9DkDfwaWNk8EC2~2H46`p-onWGp zjqFACS=(!;MN_{fpXCqoQ15VBX>0kZb)87|>nyU1I&)f~)Oq_~DBQ<>uXfvewUX%F z;Y3n7<p=XFa1+Kkm6wx+OZI!at=5)o*UH3h>v0Z!LFL4UUq?ppEbS~g6wQei9fXsn zkrVokNazw~DZm|!1GRLTm$R&m*oEw5(gku#w+x&-VZ;~s1gp?`F=V<9)~;wLv^(sR z+puH1i)S9FcY*r!+l4wy`Q|HoD_Kn$$r;J5g@cPr?2p5UOvc*5S~X^g#>a@Tv$J2E z4M(geBReC}vsU(Ab<b*Q-RC5xKAhK&eS2elofghH)p{^Jj}_(9+(f8v+r8+n+M62^ zyOFtmi0r7cj8}uazhh+E)Ti3Ly;e*63+b@gAt#dKb&8u^S{Up%^u<VqLIW;`YF*%T zf6mUjX-zo+|7g3ln%ZFPyrz*gwTAnP&XCVjjTq1{vNEP?^R(7lL8`DcB%urWcb&9e ztbQ+%wK3W)a#rt=$<UBhl_iq@#I6Dd{c4vXTK@|fMlH4doc?_$*LW21mUi}kWLfxY zJ$QCA5uPCO87v}wAIPGuq&1-0r6pOex9y2qsNRrTs$k+a1<1z_<9wzrG|9j!XJHqj z;GjfRl`P{Q_<Mskm;ABA<lgO~CL)0oxAJr+c#h=tv3rtxu@8y*7w+m#j&c&Y7Wv7c znvbUWfgI!YS|xJQ+SzTP@_jsr$51PWmXljED{(s2P5Vp+@g~;s7oKi7zSaivrs9yv zdBi$B+7o0Z6<O4ykoF7ODsVNKN}{87Lq=R^k0YnOvUWp@Ca#u`lZEx*BsckM^LXOE z-NJTrqg*l3E$FTENat*1Xfb+WI+5-B<hf=hQZ)jKwL%gr*wjx^mCz0-j)1)&vNzk< zb2$--!ponhtsuklB(xpO6Wicn%N~nnJ5CkOS#|*F$;m3Bp9FK&;lnt1CJpiAwD5z6 zcRGUOTdZ!Ly@GigY3rcdYcNui+LsMr{TorTeeiq@@=`T2b2o#to#aCHCdyj_zCUGO zx38cH4kKO1cwzu68v`zTg00QkpHx{Kg(C(5TR7UZHkx(~JlYDL>ZbK3iw<jvl;$JP z?GYBIzMf2MWfD0wx8TZbV5&8zMLChC;Z(wJ1uM^y%C|t6A1p+mKW1t^x{Gt-nPl0P z;?s4&aS~39f^YU9r?s_3Q08ZP{kWiOTe~@0VTOGGi*y40RGstDnN(&j&>Hai1^Ol9 z3qED7lk9qS4Z9ogWz@22zMS`cwNIl%Q<0xP6CMZywr=3@yuAbr{6f^KJ@%v(bo_=C z6wo4(qMl%N2xmc+;JL}#QaI}_cOw)aw|P7DQitH!V^C-<BRqn;asW>hJd%-b?Il01 z8o6@$kePJ6Qxv>SqEg~LTIMZM^uex$G!%qK8lV+U!nHlfp6#zS*2<x2qFCp7;M)M! zZ(!l~qC?9uMjLSS1G4-P{ofibP?%WCI{5D+)fZF1L|gcA5qwr0$sGh|R403#4z=K7 zFS$w|&`;;J7;sexI)pM(TI~(crUA1bIE_h9ykV8y1-KvD&5_DQ{ET5mnaTPKC(1IB zl@_yO(bvu4mt1i3Sa`Q9Rg0a`Ydyfnce^4P%rnq3?OAIs?89{^c?4M!tdc##DP1vS z{2|sOz4jK4I|$D{ghscaQYrFMzoYMUXwnbb^<=~(yC59cPOE~9y+l8^$LfV5+fT4_ zI+8dPyak|zr+~*SoK0_V@cV@E&Ox0MjM|=R5}7Rn`nCo25#`{i`Q%{wVh^JkI~)q8 z0?H9^S##EQ*BM#yM0qfq3m&e9#E`mcH(>pP`Pq#emB1=*MAu#dFKg(L@{|ge3DD`N zwuH6bNA7wd857{)Y{*Jy^m;B<;7hg8N3fKPzi}Q88HrBGLbUW(Xchoh9blyAShbeu ziB8B`Rw#R!2;Ek+!hZNVKeJ2rh@0Hf+gR;Y@TFu{ZQ)x%z)~L`Uk%TkXZ%-oBKq_l zxSGtjij&8fkqV-m)MOl^w$DSv>QC(WMeNB3=1c`;`eGq2q6akA`Vj3j3ohTn^Glik z0G77{QgaPH&c>?#gQ5qKleNf_KmGA$@Z2YA8CnC2h0HX<S1*OcL=Z0<1U>5`xBF}# zsBwvieG5G6Ip8TZoPLD&?_k5ylNFzcb*%(^E#abH$$<`p*VBQ8l34i*aBd{H9|s&G z@j!E<BhOL~6$(yvkfkya{O-X1j6qj*L5KJ;N;fQCXJ{L!U4c$hSmi13T?Z`Of;%>Y zfvM>0ok*mImHdYsCUA~Yjc+u-wl+nBWrVvQg5!+n-JAUO0nYDE?rueBcLiNw^7j@- zeS|Ifz}OA2uKmG6A>hf)y0aizx8Q<fP<k);Tmy&h#Ikh2-d2N0<P@en)Xzo5(^Kr1 zn`bxU8_a<FzTv@SW%Zq)O)lj4PyD=Ncn>e&&9dkY7k)xTBy<`amLC|uu>K>!;txe+ zCBva;DeRnut~`z`kW&v&RYi{!V|}TRiafwrAJ}4m?G)1X*6xU2ybg`iU>zTzonyg> zKNuN_jhfF&GQ#nTv2csQMRD+yiSIo}!xaSHC~$F-aSn3x+B3YK!pu|+D*TA1zYAaX zMtd(szH8vWyO1a^I%x$S?L#=FDG(|6b~T*-0xrmhCI|yNOZi45RR{AqQE0|f58;*9 z&?7JS$&0=^i|1(Zc}q^ZiXeAW*=sFDzxu*A8j$<5iaOx0Eu7bZl>|^5@CTOm5I9L< zm*vCv(twFKXp~pL>OtFO2b*Qk8Uff6oxh5*nq1(lD*Ch{ewYtjS%wwYL5DU&H{~ZI zVkfJrk2kXl`5%w&D~P0rv2*#G)u+`OGJj(*T@KxLk-5LvE#Q*ucs=u==_O_<!`kX0 z5qYo>JHhWjtjYs)W&$*M0p((Wxh(ka4IB+QA8Cx7WJcPfk^Ce4yr-7t2DsY<{vYsH z7Wk+Ot9S)Y&qLj}RN92VBPROiE0D)fixbAkF4lPn**MJmB71evso&5{?a<k$`LrC= zDhDP$z@4v|?KE0v3)<is-}mGF)Ih|Bj}fEc@L5#+ZbyR}@P0Pr`5l_h1$N)T*&-ha z=m?W~vYx;Z3f^OR|0+7@8XD;{Yr2hZbDP&)e)po2LVzGA92|xHxyt+@Nb@r6w$zdQ z%xZn{7la>DWAVzvo6i~RJTv()e?>4_8=mk*E=)W%@n`4YxsQMrwfVFdoKY3Y>EYPa zSp1HD=%^lOh0kzyGrr%N8S>yg24W|(!e67&WIr&A1~$&&acx8zZ?e`1W<3qpA7buX zKw`1`sRJ$Zvht631h3I+{%}xPR%xIMS0TyU(CP<~$!qW(_bs5K|3r2o(J7H&HWSd) zXLY&2a3Fp~88k#=Y)C;cwhcS{7x>A|Xqlna4J^ZU#*m0XW4N*^u;)PT`e2=Z1=7Mu z=4Y@ZITm?<sW<Q!N4l;;#UrdP1EUJH@<RCzaAh~Rt17FnhF6{w3Ah7vcc5S*R85P# zXJ$O{rZV#L)`9#kl>NdtUSc_e7`p_cSx_My4!a8vhaf?Dc`gt=kcpo(aEuqt)=cZi zjG?SB4U)SKjvIvj-UR<<KyMX6i^bs`oQ1FUpgWK9dm{3gmXY${gJpyFOgQ)gaO^<R zBH*<EWb-v^+Ktv&2BvQF{USh81^Ru5_dc=G=e&E1IUcaKH+E*EsRwe^6zMApy}m&G zFHqnk5|@k=m4@P>NVtZl^b(kEL9u&a@)JK_;Ij<8(nF<Ge8UB7`H_~|=-%o;kel}{ zsDBH-ILlLU;39@~9z-kbz^49-)$oT8tAObM{LNM9rE^%{a!_aho<>(JdM$V`7x;S1 zTD`0`7w}Wl2;ID_t{{3m7uYDn_nM#sTR2*#CKyf4%sSuA4g|HBA+sZEk6FbvIOZ|9 z6q;t>$xvo5%eS(j32wlBFMvCZ<EwlJN4v1|bFk1c==falRa)%SbGSZ|5k9ciG{{E* zhvp^uKM>C(HC$7e=U*ZnYq1l*L%T<4fe>($8~O(VYexRh!oMzH`3BXB!F$4Qxxu3k z&sPC|A}ys@R}pxp0FY)wQ)lG&V!U6FwPb`pq(b91Tr83k2}j?912a3HremFVu;|<1 zg|n>KbUZ+R)|-YEYWPJDfk{Ii-}6)?SP^{qvqtfDZ=jQ(V?%PF`3v)2FtY{mBc8I? z;lcvQNCjZ}0xlxJ#XICL1K$%l$^#$8FkS?oy@E@=K&>l`cmr9Fb#zk|AQa2_54!#+ z-+IajxA?Ay5mQq!FIMh7ILpLX#o&jc%<W<Jth_u(^J~Xfh+@_xXqA%{ihmLYo%RCl zGboszcZFAy(Dq;8+$gB^mDhKm5}v5Ws~FghhU1PxsdIcocWC2-q<rC<A6f5NWcWGy zESMD(g9?S9lURtn(87<=gIG^qc&I+|Q=ZX2Fv?T7GZDW#7weV3<Iv*;c<LuOEidrp zg`?{uBjxx_EbKD}FS6qFz~;}oi-Xy6Jg<Q76;%3+r4dTx2OGKgw;1a$0hNm~^AEfV zFq0d~SZJtpP@oXs6)lsBm%+~b1l~_1ynK(DZo!K$fa#t?GZU`P0Vn#vEwA|W47fOi zExdq)yaxkZqQn0Wpj{XgybPAYfhY-k;{z2QIFx(I3dK4X2CC+0lhW}17ofTa72kpF z5LOZgR-W+ll)0n%HwtN{p&wFxj~&t-*7T4kK0Ev<x-k)M3Ie)@*zh*Mnws@}fa;&{ zcYPT@1TJ-9{k>R<6bUX5Rmy@L*%^pL6$DGgd9O9Pq$X=B$P*e*d}EGuj3D2OX5PoF zD4x~(U`ZZ8?<2ta0ZuN=D<i!A9iB9JGCjPQ0h;>)O)%rt!h#lplLWu_87ZFc<$xl2 z82vl&-DI3|NWcrQ<p(wLLD5iriE8{`4w_ZtyFrdLX^iP&_D{h7m7f=2B#fu8LXYc= z^O6zVtk(;^;_x73{Xwino{0yZc;1bJ<8^eweKhSE=Dmn+|HykuJd*&<0^ypn$Xt17 z{fcj#;`2D3@C7cBsUSE-gKBS~*k^PFe*l?aSaz_&D`Mv#!z17E=7Pbqc!T0e2e67L zD0susF~Wxym`KfdzWgp0GX#znZPAK7T@Q401)fd|-wQ2b;fhP}=UHZX&Px5zfF;p- zxsZf6%y`$C(SQ>9cx7T-7yg#`&f<^VLH9+oUYqAq@tGge9?gjFz)2#!VFKe#bj(I< z%^`4dh3~)P+d-_p2J7jAwf_k!`r@U$Vw|+-+Dgox2VP0d9ABMr62YMt3V6VIAuw2m z&;7v6N7ifb&7yEhCg!)`X_1IXaP|rQ)#3Vw;Oq;}8t_CM{CgY9UIpp^N1NNM&;>Qq z@VV^&vNBQ`)|MZ>N(+>JXak#XzhvA9WKwjIFLZ2$RQwEQH^nQe3NIFc^Zc-0LTNu% zB(}lJ`d%>mb6`lzY@#=^Gv+&1ne6bB2G6GkDhpg$Jm(Kho}(YG0>i`q$!G%W^8@1s z-}7;>9u216ff*mxEA~fL?gKVn@_qt%lKs6G_%ef&%y3FpsGpY~f9y;Ie0Pzt<H61s zU^>U&SKzL<;3@>T%dkeVGC6^$A~I4Ld<3#S;d)=j3gMNV|AjXq!N&zgjAFFU4u&4G z`nRl%qH*y5g7-v=%ct+qEsyzIq$I^F2zIQmc-KYXxNJ~V{AaP?*`bHTs{MIi;vW_G zBtMjocOd-8^8q}Y0l2?0x)=QTv&M|bL3;2I3;qscb9bOe#i!R<Z6Rg}M1MU7){Ct8 z9uyGmRv1nz0#^sae`0Y`R{IRdMDicN$*;lbGh{$?_D6Wd7kZ_F9&V&lq`)68@$gO- zFzse;*{MgPuix^dcxd04U;NbEtRNR_5Nlw=vpUecX5^QA!;jB%0DngCEKh!gH~jgg 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�?OR-8>9Jvus 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ͶO}TuBQIciWkzR)^S@~8I@q^gp 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%0AT7ELek^ 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 A4yw~=ec!@Y^=*x|wR|0eIy88V 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¬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 EdLJjWV&2m{sYw1HQ+1t<U3L|>5!N# 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 ZEG4j%z)}KB2`nYBl)zE~|L02J{{m|uu;u^& diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Right.wav b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Right.wav deleted file mode 100644 index 0fa355d33f9a8c5c24b7d46a8ed08c48b3c9c453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720044 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%0AhABVkeXSKd% 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≺ymE(rn%8vbH1ry5`Tz2rLmGv z^a_*tJ!~d(F3>aJ4@3qHtd&*sGla#WO^lYNOJ~845^;{$N$e{26o&(~n3TEzV*Dbh zJv0(FAmfl*h#aktvdCoQEPM~zB-IhM!gl@;&<#!rZgDEq6<!W6gEzx#;IZ&vcn~=I z-=WD+GpG+V5=>K8NpHZNzX((b5kd#ysW4h3q*u~OXc-&|ro+j|L7+8Xm1;=1^i$j{ zE)s8vN@*N8-w1RE+6w;#^NBlPZZaBDNz=gRbW#chx55;VVm=Pk?i@4&s+5u;ACwEn zq5ZK3=m%(vu$ybeGR$h`ey}beAdZE*fhi&;R$;Ur*uJJb6m;(M3x5_@vut*6=kk$C z>Z0nh?ug!{y{x>AKW7g(XH@Jf`j}fUXGGqsB2&d2$4videiWp~6tYdqx9Y2!|7m)u z2GCD{2M6Z`|7TA$AnKgsf{=+E3rK~CE(1)mqcmm8o(h33m!-;T(iF&@fYp`S`i2f6 z4?{W_dl<DLwe==#kxHq2E!WDev{}AEzC+PXWz>Ao{?G?QWah7-N5gVM$D2m!2dQA$ z1+=$#JGjhm^~U<H`OBGQTr2T2v>O?OCZQr+B8?DA+0)DzzY-+bBs*om5yjb}Y`3i6 ztQTx?ppv-ms^Ou%cF#F?M`xSLZk9IXPs%owYb{M|f*o;R^ltYr3e*iG`WyS+dY5>M zJ$5(mN_RE(VE)d*PJ9n36%p}aR1x5{tibNTUZ7R&f?9wM`8@U>Z$SFN{OcjU344wW zBi2z9K_1=z>sD<QljS$)FS3hNKAB7{m3^g0$p^?|fLHc4olG~CDX9lU6g~`<z<t*k zjs}ylw}=kZv<28iY&qB*Tmv<hPKl4fR@!`MFpMB;ko(AVa0br<XU$u&ju<Hp6#I!~ zz=>8*h!t%77QQV%mgo4_!YnaD$_2ObH|PwcgA%1Tpnjdm-T(;(SA#~j1E&$*i{GVa zh=v|XEy4NhE`Af{2t&an#VB?b9|$}7ZJ;0Cz;)%-!VO`N7$sSxeNYK>7~HBxuw$!* zUPG(lrO0Kp6f4CC5lSK+x1g_)Q*cY@g*Zn@<%{{B!VPeeTT2V2b<%rj1auO*1;xN# zPyv^t!?2n_i7Y{4kd5#OXo@sRED&mlvm_Dv22T7x_%NIgDZ&3_<L7fxTsNK<Zz5fZ zPt<Q2DSLw3#dzNp%j^8jX-Pkxe`)!x<)4JSBzuMcydR;*<Azib5){!Z4a11rfmv2_ zp(pdyzajtnWbio=#oMecJj2-o@KD(*O>N_b(74daA!pPJsA<p&Cf&8Ya;q)Rp6a>F zlIT%-i-rh^G`9`SF%37&(5zOL(NSO<C=_f3=gEEQD|(r+ooT0Oqj9fcvhJ_i3pS}z zWcy^RWE^!K+{eRdwPLNRoi@TS&U7p+H)2KP_wd!G{@VBSENr+qH`v4P_CE5>W2*8Q zk`}!Pyb4XJ5^@L88jFHmLNjh9GuL<7eb3p>VYL6KY-%59UvJ;(h;yBFXM0|GTl@O^ zVtos|-`(w<k1G*dwDm98hj|0C$D7$nC+8aAneX}Np5{L2zUbcI&UHt4Ek1YPf9y<Q zzEm6BO;I3UIf35@XzmjO-I>8`D?l}PidGV}Wbb9&WqYYN<ToOj7z{ESM*$DYS^Oj3 z3Cy<6qgAjOcp^DemMRCE+DfOg7<d;e6!*Z!bRF3asvD)F?vV?~E#wvQ5V?%(LS7@T z;CHZC>^|BEeGj%KhN0ouRICy92Cag2LYl!HpdC_MFl8$PPJu~q2JpEy0W^?Z$SAPE zRTB<E6#NO&LSKMKJDt1Ajt|-cZ~XCouWtuPI=B_oa_#vg!bx$abX<a@a{|u4W{ZPy z!86PQreW|-upwIkW-~P3i66s{;}7t-@LkYJYoPrwhFIZ|@HD8iWEJM|Q@C2(Ti`mo z2GoXcV83xc(9EjiKCBzqCL4>Dfj#9bph{8WeXy&*iFOe9$LAns1V%<891;oAsu#gI zP#5UBG)uY){B)O~J#b5u!c%bxe5NU=2Kgw(ikJEOtjJ7e?lVNNLGWAfHG7c@5%khA z$tw&6?B+Rc&U&V_TVZ7Gne6*{b<1YD7m7_~jP7F?6?H3ob;vXMDY1%cYsuoA^o%hX zbFwDnpD0`BSQf|=pQ01VGjcsh2rXA0Rs^WQ=sw{Gqwy61*LGv4&vS=?#nvF-_MZB# zezmcesh6>?Ay#7tIzNI{!VBR^=yx(vRbe<5%7qUC84+~oQA4sOO7WbUMV!IU6XU6N zvaa+o#W?kM-E(7&Fg9XL^yrvHQNd8$@KEs%n<3-_c2Tmo)H^(I3uGrW!8522@<qzG z$^(igvN!m0I7WEN6na~_A2@NR$$8Ov!u8vo>Z#)W1SYxb{Hy&2|54vFZ!^z&m(MW~ zC>OVE(<;x{S;r37Pq!KHxcYi8c}?ENz<+ha72zs#8e9uqN_QPV=^6%-SV99Ieak)V zUA>%{&f0Ff2MZAVcQ}IVCcmM)qC6shNyQK^(fRObDMOeg3>Ax{hH!Ia3ECZ>Ms|}` z&{q@*s#Pkj>J(7Wo6FZzzwktGH~mJhVt_P8-H>I|Me<LIX3EEkM0p972BtRx*x*qS zZlI2P<kOX@s^01p)g#4Fx}5BXzd%x;zS3VYPt-^qrH#^Wa96H|R>DqXGMFEK#^>Qz zu+``n_`I}5NabDxO9L5zR@^Dz4(w%E1`oah9dhpfk#rVtQXEYi@19vX$L(-;C%C(7 z2<}dBhu|+3T!Op1ySux)2j_Ce$?nc{fB(HN_k#epH_~15RMk_}37wcRGXyTfA8~)j zHH-fp9j)f+=$+&%Z}qmSQ(dd#d+t5!ec*lPed7)DJ@hrPZPih<k|D-)<6omWb-PLM zCBI26(u$UPi%O|J*;Q2z-5ai4V>5>{#9cUGCi;5IHO^7k_@EcrvwRu7Q$5wZZtJdn zQGb@x%)5@o&M@b1W=6R~N5KTyr8=v+s-XI82QwL4+qvvV))De7$&6FxKaN$-eVhn6 z+I7bfY~};SPn7?Nt7@gU%dh<rW52wApYZC<^G`3Xz3&y##(U3oKjpkkC9`kJIy8O$ z(DS-R%+Ajr-kf`R^<{_Gh2Q`0%hUe?;=(*`Ympvc-glmJDfesqZXR>LozjySHzf8f z6CoxiOtG_=mjh;mtw}X3ZKkxDQir4*lB`#-a*c5;bqsT@4=53QJlUW$Q!+$^U*p`P zf71Py>P6^)z(cM%oRrmFZZJ|i2e?-R)(%;m>`lsEX^NyPlc8G1q8Tft-^n@mg#z1| zPwj`E5{a!717SeL!3c_SW^gZbrze9y+uhk2&h(RpT3cy-M?J?9KP9wJSefuDv81;Z zUiP4;jyJXUWMYYg7V(jBUE=!xDipgbI!{#b$WD<=O^C@6JCq3mb>jj!@upmCyXXc{ z_ahHR9*TSrnKx=<RKw^RF*UH?uVQM&K8y<@Gd<gv))(*TMeb=zT#aApWB10ajja@4 z+*?XjkpDCHIoG=X3i#<h;qqdqMmbkGgIzt~46bq2be{?65@ZK$3ECA@KllZ`2v0*6 zhQ`2&eHKz8<Xmvs;1%>)E)TpHSdOlRslkQm+5Q}6hh7fp8oWO6G8~@POb3c^Wg^b_ z+a2z{?)+h9Gv<nWDzDw#T5ip;m#NWYAx4R;<N+3`TdIn#tu?Z;QFQ@P1lg^qDNpoP z^SnzOjQlqB)wRmnpY3F7HV9)9GlTahc0vBlgf<DY6J8{&OFZQ1>YeJH=q>Nv<oV50 z+4F)L_$OZ#tG*R$9ka*U=d3U*2Ylkqo;RLd-jlw=#Dl?lHj|{nsA?v6+Ro#yJFY2w zHFo8320Q*|{)aDlBCE?%@||35nC2rhv-61aIrYz(uEBH({G_j<wumOTywh%J3;U4W z9KO>g(0RDg-l%GBaLjWQ17R)}jrC|%$4+B;sP?Diw5(me^$D@D8KX*kfA#Oj_tx7h z@1}pr7F$&XxplGw={ANROkXNxq}#9#M-~0r_v7&Q;(fu7yS^^`ukf$d-b?DWcxU`{ z1_s^<8XffBJ<{<;RPt4d)6uh|zC>P&772Zsw%WrT6e5zzWK)^a77{enmEK%0o665( zfqdln5iljhonm2{_vtF8-;i#0n%`2)4gSlu$8d<(YOi)0*BlGn*Me4sElU}kc5eEV z;oHLNhVMy#HqGf2k3;&oM;h-`6g%iv+2uROKLJHT=7+_G^$I%@+BGC=&=L1Z=Q6XL z9H;B6FV<>b3EyFuSIz94YM&aS?%M6`cfR|H&iLWK=EtUutsZ+bHa2z_Q!#eO#>58v z8UVZdVf2#dpHWpKzy7@c{rtDP-xhqo@#9UzkErUu47f0DJu4G4#IKB*6!ko+badOO zc2SLDKEY*wlMt5pF`;SVN>8G<fwk8@uUhNP$k!$jD9Xe7PN&-$XB;b-^|3v;X=t0! zZXrE`2L)XZnCB|zEbR=36>-$j$Mrm5b5P&ljPMgflXXgVCTvvL*|5Q3G0cUX4(>i0 zln^*0Ff^!Z(Bi;*0TTlI2S<mfkXj*kLFUH-!`;GJ(-G|W!#rk`FgrU!oo5`W97o6q zS1?M5C8`Z*e1Y=VJMDFLS-ZY9%2%3c*mt}>PiId(Pd?9IiAxjmB-Be7kPw#8KE7o9 zhWO9S!wyUg^KA3n@Z9!1^;|}-UnVq-uNQaw*SBBq<8CDU;kB$9`lpDZ>e53F)5^Nz zt>r0_*fXJdLeIno-f~u2<q+$n8&openc7v<^~ib8(bFt#bdl4=6unxFQI&Kpc>Ilw z3Fc*LBa7X2IWzrWK<j|N+|6B&98NPW%*;=AIa^y}t#IPjC{8D=?&#`T<^Ipz&mH25 zGkeNes*+X7m(e%N_sc4%3&>2y9l1`|^lgq?ANliJicd%0&whX6Q-g@&@qg=pKyUJY z)6_`UHFcX%x8t4n_t;qx?Y=p_Jp4T4>(n39BNJj9CyerRu)c}?&W{0{3mDuvxKZE+ z$7OXl@weDgk=g!x9$63`{B&!p?B%@dz7de<cDmX*rkUS339gh;(ox6Vg>I^hA+18s zhCU3<8rCFidFZ3y2Z6l<db)eLb~w8^x5Gu<A8<Ly8Tvihs8kozeob#>7#RLAL&J1U zQl(1vC1^D~hRR}-t{~dUT;@&Y1eXZz9<o2=Y{<2cVOY4+f#m}7!Lu%AZWoi)1SYCa zNQ{jSj=vEX9-lYiMq;S9sW;K{+EbTq)=J*8o<50r67MHGjPDiqHnwj}=IE?Zn<5uQ zj)+VfnITd~rixx4eJ$DrGvj3JqF=e=R>pme+ZDItSGm}pF&|@se`Six5g#94FyVdt zm3S-uUi{a%o4?j`rgDYE;@-o)0`@z#Nqm#djS@z6GR{ZMca9IvGA`zSJM%ghI#aqD zy7s#q0gnRP1+NI%P0cthjNu!>y@N^wb_u8za4Vp9;IqJrLFa>J1kVbY9BPDxhB4AO zY-Q-~kQ>24!3BfT2WASG>@Mnl>RRS!le?R{N4qDw`!mh!oa?*uh@-MOM?TQ4Rc-sU zwa(gQJ+SiF2Z;Qhaz?-mb%K0HHD5LF8c%)?BlHq+@Sdx527IPdZVs%b>2Z7F+JRy+ zCGJj4NDT7CP=lY9m@%<$!rk~~@sHwrCgi1RJ<?OdJHofcI&5E1J9RNpS@`q@-CE~@ z74leb5p~FQe3G}R`_GkwWJ6g{CWxJ)G2W%MI4Oc;Cv5n5xK)!(!*R&b5G)nV^pQbE zCYe(FK{oKS{lzL~O|rsO3Xx0Zkujn=@#Yv~t8v)4V7xUtnK>L29a$aC%`==hxZmh+ zT$Q<rGqM`5j9pCm`^Q^9VfC-lF=?aP{TKi9;?FUW$A9hd7<Mwz(orYyWk?%NcAxDm zDg2f{b8J=WGHbsz`f=>P?J+;&4kuhl)ZP_pkZfoCZj3WV8vW!zUDwX<+t2A@597wg zzfI`xZKsYIzqxV*tO>{#ki{L##ELdd;caRBFmE|~y0ZnQ4gLeqd?45zvNWVa$h=@H z=zdV|pay|2+*e)YT`t!M*MIIhNc@Ck15%VrRUpmLv>(#eP4idEhRK3Lb_UFMmNWm7 zxy3d;S1dMOFe`dTz^tIqkgH4$%NEi+xJA(8fEljk<`$7jMfj3?ZzldoD4WnEVO8Q# zqLF*P@xG?MG``Z_9rP65h-(lxBd$dJv-pw;B@^z%hjPw9{I5K}4#o_KP8U5S`Vd{? z`=Y1E?2K(o=K6VD#)L_UpFQ)v+dbtI8vjz!i=tdnQ=>k^)H@tEBC&(7q&>k-u!dN{ z);IX%H|(40hHfY~8|RHN@|Yf|oN77KWt7pt`N)-#X<Feyg@bklz6b~jxZ)lh@L%Ab z;NZ~fF!G9qgu+J1?!FFlGlTo8yKjIaFd{HxaJrDSArC?#LVkp74dGO^;5>AaR-<R) ztvsy@fj9oO->PIHudHdDpkkTP9T-q4;GX+{>!c$UXAfktTl&6xGJ6seYkDqt26%h> zc3Q9OiRv$MEbr`>_GbH=^)F21!QRYX>22h7`pz@Cd#d%BEO>dVh);MQPyul!oQyxf zIUN!4H4-i)Oi26(^is?!ZpYb+RD#N=1NAUf%0BE{;{D~B>?!1F<7wtS=SywZPz$MR z-zOv94dh<MENC1NLv?_jOD{=n`9|(z0@P_oW9KwySLc3g<o^s|Y=c*wh0LnUSYVt% zk`K#|Vwjjkj%6}gog?~|ZXrs`Iz|rq2<n=>%~|H}=4WH7QOMXY17tN~l*Z(FqU|ok z20>(p>igWjT)zIkp}tRev$US7i9Hft#aB!ip7<Lq#0>hpJZIkKbWV@?KRLzzl=$LT zxtR7aVb;e^iW{3S$n(?t!FSx6X`5UxfQsoMm0s7=J#>3me|6Oiy8xBZ7iye%A!ir^ z(YD!QyuOM*t)Px5Aw05$<GX89pfhB6sDi8L=dhLw$rEfbf#taCrX!j8f*k8-PXBD; zSm>%pr$(o+PRTE&D4ud$3I`RBdLc1^d)@KQ+YZjAr|-t*y=R%F9VwmPU>P=czjPM} z$Q-cNeblwoIS4$rNk-}^aL4ai1+0y}YQDGLZr*g>7T%ZMLcRhpDsOs6dJ{YoJcB(p z{XIv0o!IH}c5Zu&Rm-=RtjW2!kFjTC=EelZzK#`f|BJ7c80+Z_MyhM~wSQSHtr*`| zUmj~VKlRCKVYTEef_<K@o-&^5o|~MZvC_(?+Uly}rBKuplZ&(ZEnMGwqPILM>&jxn zt!t^b_H4VJ-QTW5N6|&O-|X*<aQWOF19Atfa$97-PdXbopE|NQs+e1_Z-vdb=0rzE z=Uv`*y1PZd3m8Td`Q%jB4Ch(07$aGcW5ygZ7IlrD##-Z+5oM$_4RROR<Qm;qUAC9m ztFZUq?Plt^YOW{gwmMkvQiaqKJHVcR&NhOjTF)Ec^?0(v#_#JZXkD<1asEf5-CnI$ zyVVYLO5IkA$VM9WC~Kuv#J*yOD~FnCr{_HisXY2Myn@kkEH(CCMqYUiet%Qdmkj1p zJ1@~dZ|ku&jAzJXZ?`Jq4R=##{bZEkxmy|2<Y^&94ZT}UQrp#JIBH|9hvX&?*fn)e zQAmE5>x{H!QS+R!3?G(9{bLVRp`s@F)Zb(c@l_49TVi+4TGS(97?!2;;7`3wol}SP zQBhYeqqm_q^8j|po<ge^wq=D{f%v)$p1z)%o+X~?u*^H!PJKfZG<FaZY?K@6P6$%c z9?agZuyWX2;F)h$!LS=+)MFK(=j*1Tu=L5s#%1o63;ypQYrikTmmM2)RQzq^a%6Yr zayE9v^Jd+}WBr5-{#x-F9!?qYoviFSkwYF~rRvZD^v-lTDw9XLMg`)Lai2;=7xM%~ z!xZ3B2i|XyS=)4&ad34{nspt!9WhkY);q5`4?7n-2a~nS?F@8Yb`*7VG<O-z!B)XW zX)*-1nbR5QTJDnW!S2WISMHkbWUdA1MJ{8MRAL%<`>4J|#rwGq(>}YZT^QMzN*=l{ zIp8v~nl$7<F^+E2j`kU=k@dkh-S>yDtnY`ng15G(ZQ`ATrwOAIchXT?&|afzu`Z+3 zBJymNef_-U=uF$@ec=uARq(a;we;2Ub@c7?<+Zk9Cy&4tE~y^bf7ngQF{ITuby`tR z^b>#ZJg4<V-AT-r=Z#8mtNY52%+(pfoxfOL)pZd<?J*X-o@kCVpPM00P4=y*W3urN z6PO<fhgd?rJhh%rCFr<i*#=CfW%9hEviqxRA~VAy$!ZT(r|r>dsrX_1=4jyfZiblO z=~HfI3Hz?PtXJywx+5L7)yW}6+c|W7q^N}9F;bYz;dYibOyh=pCfm!S`m<f!Zeh2^ z4p7Tsy3k@-MY_l|_SfUob2uU2?Cz>RvGFLov8qAMXEHhRYdS&wvQk+!?QUwGUEUgP z4aZw<vNBozsOzllR=M;bm^Ss1m>5x7H?l8!w<P{AF`Ku&FRQPp&tYFz|El+D0x{(e zvk<%ZLvD~6#lLoKYlP3sITMw<SG=99;VP@BEIVQwCmWB&I^9J#(Xr@33H@GcR_Ll; zFaD6T$-~aaqGTY;xlLZCer4GQEgN3vQ>&DEr<Y1$UNNK0kLERI6z4WgGu%{0Q=<yC z-T&!tYJxhf=ILpomi)<y&biI`%rO?ougiQO=ZIzagT<<onxYK71YY|aY)vLjT?>y< zgubJfnyyPx06xPLxmxyO^^!>^QSW_O9BlkZ7MC4FKfPA9!rn{-+dsx?dSy$aw(*wg z+fRNr5Pn1su|b%!fUGa4QG1LgvbtytLo$w2HJ^Y69~Cck0rFy{*onXGY1pcK#C0k3 z9e6;|@{AE`rl+oy!MuXMY$hv<3_4u(w59#Qa@$?WU@TCB^jI-h{%s64D-(4tKojr5 zlV3_@CW5}HLv~3!!un_#b~Bs*R4UH9j=;Z{Fxz3LP8nfFRXG;TZ;Y1@)tN!S9rZa_ zNH5??-_@yM;q`=rTTBj-!(=<zKvtEh<PMQR>|@P_>pa?`kMFepN&og{W=vhw1Gq{t ze%8|eGB?uSw^A0S$sN{og_^~Vj8yaRvzOFq<(HHPOiai}&F27bJW#vDBlPMs6VtY_ z+DE8cMstmd`nc*!HFS}>uas(_f9TcXoA@Yxh%~aIY%V*<-(_aGUARPB{Z3uxUYFES z^-`tOxnXjr)rE9QCNtz$QYGj28fp-^gXiive>z7VXBgF{&aC7z+Y1lzv<lQ^sDQ>3 zU3bO;x3rVlq2w2f+vV*J_I|s7I-`1MuO1;{#Zb88>4*?Z(<wFwTh(2x(Wg|1I%VIq zv#5nCgbv9sx*9pDN!YOq$a4^=XA6kjNtL*}&^m^9d4b2Zbb$Em*K7To&ZhJ0R(hHK zr7L5Dzmk<7$I5iny;<P~Vld2~$K-NL>NnW=HN35x?z0%ZP^6P>;X1@2b>FBW8~Ubl z=<T|#cp|dkd$P$-*zy6QtC%X@iGk8>3^z_0kBrO4BD`8|L(>WOQYOk2h9$4a`BVXa zmxbjoaa}wW1>sLL#aH$=H(}!&m{C+k@)`$a9ln213>DScr$(X&Xm1}3pyKj>@*Y(U zxA9QUK<>|r2I7J4Ntfp}H5~@q2y$~xk*s3;<T`N<<nfC>3OAh;Q;4ok^T}jnz$UBS zoO;-f3Sb^kTvl+~ICeD+>#zdGMQT{0#e`Fw1J#96f1Hn0O+(kef^0kKJ*-_gb)^9A zI}j_-76dcX9$-(gkJ*8$4?7sc-sC_o>*(KEtLdCMUrR@-rK%Ef+j>5?%zk7SRhv{H zswgI$&lC8KkyP)u^JS`)sxsR7hj=TR$yM@#yd^KOLL22;EZsq3#!uMaU2?drAboJ6 zc8N12&i;`_jq65TbDlZdY+`-^C8wZ6I<GO<c#0-Aqx&E^{H_T|(qx%I-Y3>PESy-3 z5YWIVqq|X=?;Pcv`b_wcnN;(OitKda-iI&f(%V_5ylByIv||HIf#c#0E1MEzun&nJ zh^1IyjkNwpB>ja*nt3|*Qmp@Z`-h!E6;U-+Yt<3PL0a(A8Bo*!dx*UWL(yG5RCV-j z9f|LKi5{oX>s2)s&gZwPoZyPr+Q}0{py{3A!=6$DsRCQ}16T!D>`1#3yHQ_%)1$!> zxnxdx1zQ-1|4w6%w2Hz*9B$pm$K0}eDybL4BbX-c;?J)moq4e=MfDMOt)Qx+wx~9` zJT^F$@s-&Nzszu^eC{>VnRSfjvXz*uZK@loV2l-EuFEDl+URJOb^LI2hY2{{SrVSn zSF@&h+$hhyhL+gw`_zh`i{vmPw#rvBK_*9c+pxla81;=N#L5j>=lmoTcE}dsii4s9 zZ+HV%#$+VLqYkRMSmvW}Cgu~-qz54vWM`TfF?@QWSfux>C~WLk>pEGj^4N+>>IP4* z^*QEvgitMCWy~_lfWykl<>D88&p)v?=aJb$L|3WA8W4DH^d+y%DC6N<^bv(%`W-<w zyW$(mBd-BE8qfMdJ>h4<b#>%7C01a$Dh*y}Wfz1A+rl1gAGKp_sa~>^73~=7ytT=i zhwmO~wWao0#j0!lY3;YN+6SpVMXPRlo4$;-|3^1Nj&>sjAHls~RO;``$&D`~a+-q# z6b1V<K*!r+L8ge+Xl)$K*P(RLcE<}Q@b@j^tg!gE!RWv<8OZr(jg5AoygICDKVu?s zR!QTv9F6ZdCl-q(=tP(thc|3W%(&B7V+^Giz{1mx$L{zu<i%w<{$H2OOFJ}anY;+H zcHpZ5xXL_P1bJ!$KAnNyR?vfpFv}zLh2<!4_HwxZ_DdTXhG!js1$Bz^*iNV3pz5n& z^%IY2Va0o?D^v)!@opJJF5;e#dL2FOu|yApRCaaJZfA$t*Q{A&38q>{U>+=lqxDSn z(XVuA(N}aKt{n+SrWBd_N_M1m%X(skfumBRGb?pNaY-cNAD)Yw=>Iw5;02<E@ahFR z9F6=-&1MH1f-ZWAS75i1au(}2h(3sM<eUPGdd4v0Z)3dCfWDIjNW&S?Ntjr=?fR7d zNXJqSaSeSKf%JJ~RV>C%?D#2iNS%zASovmRp8g0EBhh|hzvc9=QAq1qy;uyAg^X>+ zYvS{I#u9l+#39kwv6?N={W)-X^5SJ~;Dsu~;#mM<SubY8>dA+GpCvE06sx-)O@G7N zuM@T?2eYUHzbaDI+si69rsn(y_Iwo+mL7>1kqJ*UR&J5k$r!wr*W^0c7Y}_7ebTUr zMi9}p*Aw-9U6K1l<DZI>`ASBA;tclU7~f5)UtoRvsB$U`w!b2=*;=xHf%x-+IxikF zH8u8+SeTK>emq#cKdh6C$p1{+08d<H+EcJj<o{E#Nl)xq>}Df$qZ^Yh_uB8l^F@jF zXW~!3t4J`#a-u&UQ<s~v=aH7iMs~GNzyaBUzZszSVd)Y$LoJM5_@+-{aSI_Q7l|^@ z;Cm<Hi?-k)SAzVi8GjPdRxwi2H}0j6yNJ;UEhvO1{ESDuB5#0ZVO`6#$a;Tc9~JvX zc+?1Z2){Y16Im4`I{rdN@sm;97z=N!ICcCM+^vB=pnn$`Sj)*qtdS2qc#pXC2b!`S zIh?3N^iiyDAr))if&Km57OYuW@X}mx=}Yw)ncN6|N=sxtg;=1g-Q6B(FS7UW=@_D% zHh9lNSfVo^qMcy0x%l28pyI|@gBGmja$@N~q-8p>VR>T181(FS;)|*>rF@T<S_Qi4 zE&dcsk@pOs<6(HMabS_c<aQ#l${)pd`Z|<w$mC>+vdgr1#YcF>iReU$BrpA5AH)Jq z13y02fubs1_y_O?kHiC{X)d1%6}OSTDS8you#4TuNKe3HGD>4Xi6`VvY)%L{oK#58 z1l=87pUj>`=|<>DBfN7eEKecq#&tPR+G3orvEB_psMW9@ww@sVBM#}y_ZrDi5NCV* zYH~cj)}PRa(;(VM+6T5@1P8W^?84awf5;TDo=S*&bdOF#r}u;4l8csN8M^*KM1V>k zq7yS<%a#StB<FtdIwcc`I*AElh1iVk8^F%SVs|(2Mpd-b=fF1ARR-l!f%v?E$ZbZv z!z3*4RBV3+d|?N6G!oA`*Y0Dtq2HmZT^YMmim#UTV*8U_o?UyW;?);+x}@4=7qTxC zxmB|AVecnlzaq$wjAy^IsG%V4lB~chrXb`KnZyUy%%T5B&U2OB1<6=zhk<YMFts}` zI~s$g4+q&?mj7azGBXn)5wx>aE`nh=4Xu7I3xH^!8yU@dW<Sn}nPBz>-Be;?$nWMr zu+CvP+7CDtVVub{9`h2`s)3OYtoc+PCK{cD73+@&>4G#hki}#g8BOMC1D-FJc*AUw z_F#^eXxe3TKT)Ma6Y{ZI$C2zrdj&dO(oToQhT19ZocOwyc5nMHSYwauAXOgpxET9z z71_PU|5srNdVwW5rU;DJ11Z0UjYt8i%g@=ym9aSg(?@ljE{hFYfoyIU)2YN7;yS+n z9}xIaFnU_7*Cu2<9$c0lKV60hr4nAM2=ee2_IooC0#3SuG`K`V^dy$7&pdQKN;+A$ z%zQC_-}uhFi5arCv;=uo<RA=$5iW{|3Rutqczu(MMtA(=0<7mjxlgWu&Dl!kmr=;n zP|g!Az^6lz^}OKUqWmozcm0X~+sBixCsw+Nv=$NV(4kqp!(hC2dhtpx2UXYPP4j`Q z8o?%APkjBa_K@G{%sbsfN56o>kC3%ZEjCjHsYyJ(2D$Bxb_^#n2sgrwI3@{=#4pE- z+k(0A@bCTsv+TkGoWak%K~_8<`DnaDa+zA1<baQ287kuUt{_dDvHOScVSnr9AdSPS zJIM5rebIhJW^SN5tA3Gt2qAi#t#YXYR0nTZgRN532MbsoK``;;9@b;I)8Pvmv5$q7 zo7ilZJ>4E|53<K#_m{Hso6wL5ELuZ+><;AS4!e98d4GZxjD$DX1?v&7D~S>8@isiq zbo_V?R=y_M`xmjxdl3R=A1Jqj;4^_-1{jNty~ZKX$!L&FS)+iF$w+1dV$a>!_yR^% zqZwJu{(P<@f6m5t66Je*-T^SsBJ`s_8J}#d*G*)4D!bPO+}@N4BW?IoU!LM`q+}N> zIfH*oBd)PW3FvVJbn%D%A6}|Da+-`4i_^9Fd@J^5FMGHHtbY!aUW{yJHoFEgf0~%2 z74|z1K71>CJ4EMXDo;<=Xdj-jp54SAXWzCf5Mw7N${&H<T21UefqgDPv|kLKM0+}q zW+FikU<m!r>b%E;*TTxz!D4^s8T+$JIk6WNk(Wi-w@}upC30CG`OgPl&47e9C2D*C z&MgOyZqIs^q%v@p)yyHki1TRFN->WJaV%dG_|tJDy*)C1TV4g-HOD8+!&WY39#E+E zlDDi(R1mA{@vj$?BK@c6#&n+I3eouiWFQEn`jU)qDOM~{FG7-+6MH7-NzzIwAM%vV zv2OpN54%Axb9mqFAenb~>rNomv^@PNctPW_ZauksNqp5S>Uyh))w^SV#_%V<HUB7X zi4*+$WjchO5${Da2d*@zv=;B37jLo!4ZhBL7XXj^QXcY1Y0;gTtfMK?@#W?T?&00$ z5hE1?gWe_oQ4%ZfRAE^38frYY&817TD=k5vWxzdevEV(xl^IlOG@&YXY#A}a8)bt3 zOX0KXvO<Nq3l0hnRXrvs{f;;5O3a%DdAcU9B2D=~i><Nh4?sANl#huALs*56>}_fA zU18)XfVD1&#c2g<YlXFFi)G1+*GnNvve*77K8#FZ1aG|+6qt?qd|GEp$^@-L&ufqi z8bvHxgEeqr`_AE~?~AYazQ_2t?s&al;OY?WHJ+6dM1KWg6dUphI@c@7wr^)oHtG}j z)<~}G5{Y2JWypU$qMC-h&3I&V1-^9x@q2H+`hxMt;1MU`+oxl{8te2R#5J%D1~F5m zKUnS-Sgk4Yzk!J9AhOewsX<xsoypOuH)MN$^8FfIZ884(BGLN;aKuM^{8zAD5IdDo zWM<v!p_OaI6@0h^kEWKvWH|h>_$+L5bKbuO=zF4=gDfB9-+zHz8?Y9CW6>voA!>m` zF7wU}i8{*idnd9jZTPv`$ZcV+UYgqR<fKUHAvu`0*oAFetrPoD3R#uJGao_NZ+NB{ ztT==&P|SC78Il;rpz07rOdrOd1xS=L4EVdj--7rP&HsEa3)0wx{hNTb`5(5t8<s7M z_;rr%1)k{3n%-eoDv5z$_!}UzFKF^Uo}ijYAQI|;ggMYXCqA(|tC$8<w}q_LF(QFl z_?Q{^-*0%+Yw81M3YS2_W`K{rfqhDH*Uo&^7rBK8WO0tYT}!m`88jEp%BCk<n2oQ@ z_$~iayLeY0IkW&|p(6NhEI#PC*pKAaM$!&~xl2;<`GM`esy-p*{Xt>ru%9>3zRIj} z0lep7*7cJfO+@t!lzR>AQvpl)kf-tQ(QsCw9loy;F?1*x=PVv*9@lA&zVt<cw(^YE z>3rC%|6*n8AsKa&Fu-B`fu}0Lo3BF(&JzhWMk}84xdCWrGO}tpkgTKNxqdvsTlC~R zHsU7MrYV{I!{}Kfv~d7$e}#RFW<p3heDrU86=iqg!SOwaU$pu`ho-<H3}yu#e76}Z zSb~-LN?vS_9*cbEC)$r!aoDyZSm&AS$1@}$2rc#dg8A%>-+%py=c>s&rcIK9T*z5N zqV!5=U?Mo=F~43RQ$LXLbgb73(2E;f-T=OFXVx*;pHb)2il<%9N(=#y&cjE(#Fh*N zf#(KU?;vhDi)F8jP3=IAawM4SE}rBv&)*!Y;^GOGVt4)%L0Dcx-sY*QW1McHiBrf- zc0~5ZVttPz)p^;M(`0UaLW7R(phdm05m`V$0lYy`kbfhdvK{X?5}6o}WR63M+wz1t zkeMjn<ucm4jjz3|+YR0>n%tD)_xIS3OZqT!w-mg#P9I|({rde5i8#f(^(BX#5$TR5 zbMhH1;6|2PB0c}`wr9|a7s&B1^ev7n-R4RsK~hV=gkzAYb?o<j|I{1ysXaFKB$iGQ z4ctRUIv^cauu}uLS~V<lE8cZGI$NIS-^ZGi!8**L2W=dlQp&AZ+3#p!C3f}>(jB7; z^Z7@tOHbC~Cf79h)DQ0PmncWvaF6$7LJd+ffL{a2Y_`yUu%`dRHtxZSeIP2$%~MrH zKWnq<<?zuKZ?lzr*mx}E0;K*t*zg_wJK074q?NXi1s|Ea6zF4Vo~If9z7^721_a{a z$-l5qFS+x5u5$qk?O*3-+$oZuNzE1VBd6ujvASq(cI?n6?yv}{uEvUHCo(TgMy3PL zI}DsLiIv|+Md>+~APz|h!Cu9&l3%$?G|%D1!@oi|HxvDhW{-Me=|{5eXZU^)dtQd8 z8_ddFVPf+$Q0HknNai9H!&tBO$VC^ld<bhbT`c5N>-k#FpL?+q>Cm-r$bB4EG?2gL zM!E`PW1X!3eeQS|EV`eaT8q3aBpO-*BJw}!XC0P=#mloc#rdg}NLL(~(eKY9lm7G# z`Pe|zKOb4N$cv2tA!H%jG(`3$8<GId>4L?3hGs0o?k+?6B6Y5$_n6Mpt;M2@L2KKv zf+f(~0!a~~n`rQTlBRy;3BK|ZF|5Ef5coLOqz899#Lgtgex}3DC$K+fdHS8$gu9^l zZ+!13@yR(p|2I+e3f}HE*RhZe3I2FVzWf=#Zt%oc+1dB#OkQ?;7;Cv1Ec66Bc3<p3 z<4ck4+0H$O^5oY*3%&8|&ZJCSMk4(U*t`nJ%@3@_7Vffw`>kWu9<V+c@SKydh}S^^ zYmogG$i{!%Z#&h>m8|j_)_Ded`zJPdw4Tk+9p(;ik;L?@LoM{a5fWS+c{+uh7Xc}~ zN{ZSRk$pIb|4s?+nS{ko!*h@44qMsrF8G$S*hWqEVj8$=DSqI)%8ZW8WPKue{+wL9 z25a9kNmjZc=@mpC_B56&tzczK>r})dVW8z|{A~_eAER@#H}lZl)4a)kGL`<_ya#F+ zjBJiZp3fn_*?HRj*r-48dEHp0?)=^cEzFLu@gu8Tc+@}H>+ARi1AJUdHUmpjyCcGV z%GDd<1tW9>8c_m-Fo!#R1#jgelFSMY{Y5Nw7I_|qcBW$$?_i@Av3^_8`QzAhoBR85 zTxINHMebAuJt>HXH9=i|t@?#TydYQe4jKB)pDrM;ldu{CvF&@Y%MnOYA@E6gzDgqr zLE=4E9uJPJ1i~y2iW-51eXElZVb<dMIf&pMap&zs7HfHmW9-~b{=N!y_9sZ8AC_hl zauv^Y!&%)J_I(X9+l@Ud$Mx#t0jBc&+xf}k{QLr}({i5V8tBW#)oZW@16awrtVT|3 zjKI?WL<`<0VWEH7Ny#3RMyo6Fu8oiYzpbmmdi(KMeGqIPY{G2TbvCGH2zaU?Z&nPu zSd$&^jfb0$*3IDmqxqVK^c(`y?_-50ffO2oUNW+FehvD-`URu^Em->nSod{Y(f?$< z`THpLyMNLyXTyfwVo#PLXH&ou%hAPac$-Kx&R-F6v1eELZdX<_14uoEHt{<@l?{s^ zuP%;#?1GkVO|r~a(cx9d)$io;^XPOSi~ul(6Pe6L1k{5&Y`~K2MO!X$kF%`b5%y{o zx-^kHFW}zmd6Kj2&lm0=#ji;AArMQK2bstV@^ax36dG?6?fcPWR1zjB%<8qoQjWr2 z&P`gM<sjNySlK7|wQHch3s~K2NbmzXJKum4&tM@Iv(Ekbslohz25Ykd6tbOv-vvgz z4Wj)FrhLz*pYXGLvBvXQ?~X`NZsZ+e3wxUzAJv2%Yt1h8L2v4@;~p&2D&(&R2&^-D zHWjP66VG#wuTvnVbx9I43yZr7e|98k-R>cQSNP0YR$?4g=pJZ&(<Hw$5!pM7-2cCf zS4KnfvL_xS>KVIofc4zOH6EhrVXRO!r0EZEViBG&8l5?dJ=>mSS^fCU2Wl$B6IVmx zs_`fP<lCdzv#H>uq3D!9U#Zc?8sLDgT!&dV;swv>&qB84X?laH7IU{J%x%nq2P%mF zObudiaj)k*{~mnL81!cVyXn`6%lLpeuw?<Bx*<rYSrURR%o=4uM$_PnULglZc#E^V zO$@SH5PUk2b>0bPIKvM5*L)I|yc4#g1go79yO0CBT7@gM!fTG8db5~aJC23f!@dti zqATE6-1tks#yw+Y9-{|-pYk1T@M~U0-fb%SumJ7q$8|G_FFg4ekVqY3-I^fY{z&^_ zbmCv+ECXxlw<~_%nTT9&=9BG+>FR?PJ7Zba;+rDD*lBsERA|yo_G1RS-ioW0C%d0N zDax%6p6baeFJw24W5Mq5<{!{8f1YbDIJE=2-GG`^Z}ws>D{=+@76Hm}bI&MNI~np{ z8oQVase8}5?nO^F^80o6v=sPq1=#)-_$;27^*M3HX;yF!TJE>yy?9H%ly_onnz3sA zc>DE8bOKra2E_jPq>#_CACs^>S-AfHV}n?<-$X*PV_9n<Rqc@P(X94VbgVP0Rsi(# z9n7|#wOWr(AK|SYvSNv>nMC^h5mJ8EE;sue%D+S)e@}Std-!j^C47RG9L4W0!A~t< zRWGm}UNk)j&5lXZdp}Nzz=}QLXP#hN<9Qw@lK&2ra0A)D0Iu>gm!9!+nX#oE$)fki zb9KZ!wnQsyvtHS_w-AxYLKL<vBf3)*J6f723*zY?vHo}2i3pzBM)G}p>J516277uR z9Pp5@CrQ5NF8g|scifQ_32x!e&ycA&o+uRgH@Ma{e9YgV#Qvaysl3r9wEcY&X7NAs zclP=*U$4>RDC}1VdXt7#638hhH*+Qb+j_YkM+C510-Xv&j!R<m>m%!Ruy19P5T6^o z#Ni}7Z8&dIo$s|y@(F9um>bx)tNc0#4w{G#m*QHVc#mt?oqb5l30CbfQN&N4AU$i5 zk30BnNd(sR4bS!tExw2@Y{LVbXRjWz^0)cA#@|kGg*Di$*?8S~yy*lo7`^d?-O+;1 zAo-41h}QgnAognlQNToGeFL`q5bNNV_OE<>;4U9om3v%&F;`lG*EqpSM}ULMA!AL@ z>mpc(Z0LAFw5|pc`xkYHogj)!*n{mb1^(o7)!5mJSc>-S_Gs!4yYPTJ(EbsugkMS* z;1hQxRmNW;=i9I$e!EbGy)VK~R>2YtBf?$DubE)Gjz~&5?pBh!rb6Q^q~RAU9LsZk z;%Ptd>n%?&&;>unC<Ka0WUU^erN_|c<w)>!Fu+`XO~N{iK+i|8I(?CazwnGRk%pD5 z-b3)a!W!n}D=oI~DO%%?D0`s){#@k=wE2FLynWzqe$Smf$>IfIU0)%8XUHV%XD9E1 z*g~-c#gXHZ*oAaRV9F#9nH#(k2BMZA9Ep5o<UZ+ntNdtdK2|jaZx_bD7Qh-$0MBg! z5iG#_)!{QKxJnANHV^NYk82vB%6G`iF?8%9D-eY&$0H{%k)XTCgx{+EWQ`J7sh2$4 z0Y3K_z17Gtlr$n{zg&Ib$)6yBeq@{u`K^N$>dP**M4B@q<v;kuCq9`0d{cpat;<(= z-Yq>(pBx<x#>#~97CG6wYG9@2{HlrE=R-cqv6H{y70M?4JuBBs$2x>1y+<hdm`F7A zCAxfxr}fKU96D|!?c7Ct@Ca;pQR=V7@w8);ywx3^*KfQ0Io9>;TpN5rJy73YNxM6n zU0lV#FGB|wW21Lrf1aW*kFf-Ak?N29{t{bpmmNBi<oRMjCZVjUKSvb6pVFZ7$&=Rg z7m-Xx_O=9X+Y0&fM}1w9=Neer2H5D<SlE8-%g7{*)`h?Mb6~TG5tdS;_#5f{gVoB< z`v!2mfFvJPgOzE_zBc44`B*pqZvDp_{bF?$(PuXBbt|-^Z;~eDKoVkE`*(aov1fiu z`vK|mqq1l0YG!t540oJE#-bzZ8w~I71o}K5Nu7?~9$;OcBMtujr!@oVc+G0OWUp`F z%l)YCaFXO4#AYl*F9zY^;03d?zd$m1c=k-}lYgxraNRvz?+TXDpVJwS9xp;FXYr&3 znG@X)M$8&DfEw;AH3jy~GMIkL%u<|69$~&QTFZmFsp?@n?W{0>7O5Ehr<`fzg~wab zoNLsAGul^;x35xjS!J!Ylj$L14h)Tb#&Wp2`D9j+SvOD*sU;NU>T_6!!XUVE<j1Np zdHg(8y7!=5ChhaaHOaS>PO@`FU{>v-!u~Iv3#VZx?^E^Bfjy!HJh8IGJH25DoM1{$ z1opVMSg2>y3s9YU-X42`S`7#CFdVyT)D)5%HDwvjZR!I)`wYvexa?^(G_P{vy3;Y< z{M~pgi2JCSyrZTB%TQ-SE~Zn}`j>q^$(o<0C;5s@W2A=he;+1kR?ZmuVgCg(|D=1% zZdB(=$$99=|FmtFphJGDhaRkixrx`knbjKk-to$vHfUDRoq+SsCB`A0(!S~K=4tBb zLr-WCdy9G_3c$V$bL@jvS;fc%-}RJr$ogs}x3Af$sblnzhm5CY4@W1*S+g~Lt1a|t zRh-V{BWfmb=Ob9!`-oOnqd!}*4ztm>zmbrURLzsgZTOxA`WO{p+rF%-v9>+%tK{^V zRI%S~p+@NGSo<Qp<vMI=LB3lU@3tJt?SSptPwwj$akLA|F&w?AjjtPvzdVcmJdB1a zeNyzNZl$P)Tw;nX)9>X<kl8|{uru}PjKqa^bsvz@3HZ9HjqGw2yvr1H%j`6INv-Bu zPrZ#jKbe=9#@kX=H&?hf2i*?-JE*WbqZy@Yd%wm7{(2Wz&ihhD81G!~0y%Xzpp+}C z!)2V(f7pe6M?6_Q#W>p`g%zPg92c0wyxm>I^@ka$o7&l}i@qMd4!(2NR9)A2W6p5= zbewjCn`OlbdovueH&zw(8*BSrRM0)_bk=0wT3<QqPy3`kV3<s&PT?x!EMg`Tm#ntl z%%10on>;;z!|dOfmoiz#z}_56eXbach3`nVw4eLpd~>Ol7ltGBr`{w#nNJ-VnTA=y zSSQ-6%T`ZjH?*+E+Qr39xnCUD`<QliNY_<+)N^JnOcLXacFZ|Tpcar^PSEXCbsYkS z=_|T=UG_BB8>K{Ub;WK#AHpL}w0rIOsY>v^P2DvDiUjU+|BrLDdaI^r&pB#$BlS*v z^fxrUiO5Jr*ey$mNL7V1KFe4OklG^plh|kmaY9o|XM*ueRMDlGrI+YUZI9Pfz~~P6 zN`<nS$g7?*W3DW<@+wSgFDxF)wZ=<hw=qxNrsw4d{d7;M`#-TS5uI*@|M6B|q4qwB zC-|&lVLY|d%Y;wfGo~34;+6Vf_fv!L4KrZCc-1yt9E-DAZDju9V@`8gsMp)I?6ayR zh-xX-g_cwX-SDv<kY~=KYr&`OMcu2rx~<E=5mT_e&WnbuUrFxsS|_7RAq`y<X<@#+ z5e;BgrjyU92~X55(MmsCsug^XYI3AFK=eg6QJ&)`vZ1&C$SGp1{)A;YOuZl<x>HWH zr-EKfT!s@_8V}nKeei&K^59iW@s0^dSM97~xRKgyf=wJL+R$AbXLo`pVA6Fs$9}F9 z@nLJ&2S3Ouox!dZ1Et)?9?oM%@CviP8E;fJ7cw!rJhMK+$trJBU+v=RjIKgwU}wC? zIwqw(Fn1fJr3YU9YAd7fzITAn<NN44>2uk!I*VD14*6q_bY^nnJypvLdNB9Rrs2xK zBN}5=G@H^_c-@?CM8mVVExPIL?ENh7XHPe8dy8tOG1^hgS-?5aQPp%C+r%+-$(mr5 zWNklSLnhE6(43!hNfU1U0J^m2$f9Be43jfz0v=+qebfrEU%*g&32#cknYgLSfkX?k z@@wf27z2B`E_gML4zVcjQEQjp2aje8wcHxwlIp@Nwk2=~+o&j=nfzc+B8HB5+h^oD zwyJchp#9QntZK=B%|VV3bCSGHPH3zeNBurlEe6xB61!!2SZ*oJ^=2w_k*orDG7EKW zAD!s4&HtDj)l(jz>-`Np%|k>fsnE`vXj2ZO3bT4rn>FF`d=vw9XLSOJPA#j7Nt}H* zMFrEL_MJpSKbeo2G7IUEnrp|Y<KiXyu#yV(9kMy;!GSLM2)WFwi>PgCyg!G-6X&w- z`Z`+U?253eyTREX4{n$PBlU{BNQY8y`p+jL9Y?7(4p(JBXM1!v<o={OBKpW#Vm6t? zC-CV0B(Hx_zlLA^J9)e*;IO~M9=RWuXtdZ(p64*0GQV18cT{dVf&Y?wsU8UWcdFSL zRFF(GlRH;CN|@(Fb^D~}enRKO``*&3l#$xiKj80xN3K*3r);ZcaJE@P-zr~LH2sO+ zzQdl+Le$U!W{g+G>6#*jvw$<Qqw(SrJ!;#X*<4YMxkevRORrMfumgQnE;2o@#SfX= zk;R$P+@)9AneB%5RP|ouFhd+`%ysb33W^kZJ{-K_y1dlJ9V0>b^MaA$9CiEh;y<<2 zK2Aqjv|UTLBlmNej8F(Y2<OcrW@RRd+~Bl}K%}TDS*;3Ky_@hA{^7)km+F2}HKGf+ zc?3~^H&IHC5dQwIQMwGV$_O;KiSb2-h*oIi7^>k%?M2o}tF5{Yy56X>$+IwN^3iwU z=Q;nQ?_k*qsxCyv<3Yto<Ui&#M_I>U^978rnj)>rZNG-)+}v8^4fl<(cj}CCmC=%! z^X(l>6`<es9&;1t`(F9h+ROBD`nROfk|~vQWFLJ2dE5-Mc9)%#9nCI7>D+n6oUPo3 zA*a)Wk&E6SNiR$b`k$tmMT}%JGYsdPY7LB}G*(q#H(z6`nmtS17IVy1&d<(1jta&t z{OboS&{Va-_F4rk!^&d6SCQbnarpWN#w$l^=MpnQoU>~(XMex1uf0?i#c#v7G(zB4 z#d1bzcP7H-mD6-u?0t9Nb32U6(Nd6MK9$9nEAdl&GA8l=)KeWD0#*c_4k{9O-Brdh zLw-@!>2-)yy+sT&sUOhGmQP+%zgbs38JH_l)i+b`HWG|$q9Zu%Pd!@JF`GIUxSIrc zoDbzA*o5J5;C_e<FeQFR-Z$ERc-qFditm*8%G=G(De^M;W3sEAbC#LMSSF5wtXkMB z?Xoa$K5*KJPYq&cs>{i`Cw$J7pq`@kR$quOn_W@Xbfk6I@{HbVud{aBHN+kxnd7Nr zg)_?e)v?34CuZps_GnMqgn#2-Cd~GDtkT8-rm0qU^<tXQYV(@$w+K`{tgAl7sS^j( z8Ij$r;r!jzp00euu~ojL!uM3K;Jk=4o@AbX6Ek>S_I43rW^k=@4R`KGO4ee1YrsB@ zBGOHzuh<W*b5>V+1alC5<|cMRo4}i&bPp;42g%&t0-d!7v5zDl)RLL--Hp?nIk^bi zR$Fv3wi^T4ndbH-Umfd$N`&3J4JJunv5K1MV^vYyGU_^WxQ;r$$g=cfhr!66%6Vo@ zjFQ-CA94R>`;ylU8cODyspfLJO&k+M);ph?3*~Wj(WgC?I03DY-CtKX);V@M+dH#5 z>KZZnmUWI9OIu=#$9+!RVoxyYyF|b(ceJaYGly}?9^u{SxxozjEPAU<=h)`F;e6ou z+q^F69Pu?vJd|)cakBTl6(&lUUpd7k)-}}K%b8iuwHA58Js-SB>@H%1ang~^mCCh> zyIs-m;TD?AWDB=URgW&p>3HpS<{)!{Y=tH5$BAMY&C_NJBZK&*)~lX&I^R=IOW$Gj zP~I{l=-Q2-<9(34r=#scR!v`RUqRpR-fZ5q*55j(8OkYThP#mSnXy#tR0H5RPO)=v zLQN;NhlvF5<zD*ZPtidW3vXwEn619S&Mv|EHfen?t>og3(bw?@6Fg^e(oasO$MMh{ zjmAw=jje3HXzw9!eQ#dh4ZELsDq(b)e=tw$xlvwhgoU%7696mNb@e^0VhD(NptvaS zqj3&{NZ7jX$;LdSL|<Jk<Owj@TWU+3Q7VrZGmZQ*f;>Yk{@@37sQR!3y9z_6v_5)f zdw1J8WVl(&TuisvLHU<hOK!72@zY)v%o?RJd&p_xvfN?zrSm>fJO>Bu2G_O4%4H#P zDJ)E8AT)vJCg?v(sSn7(=0L|9=NZ>HcQ1Dy=Pu#0I(h2S6I|FntWU~P%sZ`MR&{hW z!{uxB*{bM$82{+kqWBiRT4KASc;I<b1Ahe;a~#p-Y=^bgTZian9TRtdQ`JRlBZXtT zW0kp776<)>>-KhkdPN@C+thr{_vr(_r5U`}!g&9Rc(IMLp`)5}ySYL<va4GMe8+rQ zti4t(yOy$bkg>(A1&jHC(L`p$F1d^#qn;S2lwA%!(_=dq?9+KnCF?0mib}*6p+xYn z@Sd6I{9a&9vGWu4UL<}U2a-C#wZ=PgJ5M<t8>6|#WzH!Y<^AOO?Agf)j|1&qI-fDb z5$^2oD9ePxJED+|r#CbiEZ9Y25@++BF=M0`9{2$GaxM7x)WY9`zS3APvxqcYZJiw| z*2ouF?J){ItdXAi4J+y8S#IQ{KRt!<f|-X~VZ>&IaSTJ0&fT<jV?9P5Hqszj_r)02 z;xsv|s#Fjq%#f3031{gTFnoU|jaHHK;j{UBX10JKQ>&NOR_m0Vhup$h(F^|6Z}0+E za~8)z<GAc0E~?b_4LX}o`O4TUbRomTgq4P7f*4Mwp(qHtt%O5DmtcOCAFT4bRZJ}w z>5PR&GBb-~zhkL6h<7qT6W?H!wWiOix2mktt7rB{`@5Pap35ch7f*=GWS_lAV0U|% zDk&<0JDK-Mobj4&u}C$8^9s((a@;4SzD>8pQgu~-f$jBx?8A04bw%}e)r^|=2Qe7_ zZdF-8R3jR{Ayyb0$Ss@}q58I6%*y8*=-XqRQLAMuM=$3R$19_n`~h0ZX(zWs6*V4e zqN8PMqo{F8gb?ebp$0oeWdb`*rw2MU{D<VQ3$GAaWYhn`?rLmz_sgQHEccp=oz-0* zol_ktjO@C#70wj9lb$cWIx3uZNlV0272C2&ZpM}uB4cEbg&9tN$aDP*{}Ur^`Ibuk zdNO7ih?P&NKE&uP>}#rx*e_4B`(=#;ozp((duTP+wc$HgHs;dxmV$1r+{R@v-euNv zpw-(K?fYuS>B90jeI{kZU2+?%RSmLdHMnms5Z@=VPqWGHE=MjlscE{MoNcT(x)_fo z`F`t}_opX~cbM<7J(u$XzL--S#~p{v(XtxYJBB#FAWZC~c22cWXNT$Zll=HzIFaq? z)=5o8Zj&r*rgc0sR*Abz;@kvl)B)a~CGygf840#71xI24y&;1|Uv<oC=xgD<?2WWm z>m9@+5$Jevvo0L$A@F%K%jNo^-N;(#d*e%OZ&t(L%1y-r1;MYJXZN*gSvT#PVzNOm zwkxx%pyRHr$o#g>DxH0lIhYx(V|I4>FfF;&n8e9??O?84B#*jAoo6CdIx-p+=^WfZ zhtDv1l>A#KI0mOUH!6a7t(=Ip_gW=D>;uS&T_Gzzl6?3Huyvx^NLH=CXk`?qBcdep zkLyVxKB%m!jGfmiWMxtt!Jn1nDC&#-K_UgkGkC;N_7ydYe_sV(>9RCIewpFtR+Ec# z3iZmK19q7}#x5@wb&|*m+Y_D$J5vYrnG2r55&9&*>RYVsSx{&P7|5r|u}l?Zjmc)T z`N7=C{H28=!R}yfXX?g#Ja9+rz15F6euzFJ^3#>p6rc8myLRQukEnKq>%Y}nx=|wS zXw`=IJ4MvE1+L^2ES;b$+Y4@vvbX5`Xu&r6Il7x}v%2vV&T%E9i>$+Q<kPYCMQf4O z*)GHLM5>2+1FWes@Nu7!zw7{C?H*IPzstVHYNLz!C;R#Z%$`ve(O;}YZx&APdhaEl zVpIF$`Gn)3xy5)We!vJ$K}Sa!ywp=X&l+Qdky4Hzv-FQjrCQtl?A+>qa3x>sX!LLh z`D7<O(tU`C`_OsboBgX|hB}+O9IpS&8)B^;@6GEmJ%_xt!OnSPK5SWI$4N&g^R`gL z`afZ3U!e266*#J`yh+qt&+N;-Gy~n|6vyoV=6PqJE3qQ7S6Fo5jGe>S%megn#;DxH z8F}c8S#7iv15_uwK3#1;`L&5@3LU|S+3A)UYi2R(i2kYo=Y`E8U-_0f%C%HY{hMei zpKx+XUq?6d2L5cdYG6C;lgv84fj2uZPRg6|Gy0z$e!_a>v<lVjSTw0Go;wR`yH4Fy zLE?AvlC_C49_S08xT3IrJMxROh`@8>zyQ6-vu#up?RwTvANf+1PMnvSh-Whp&pV|; zEB^uy{7!b;r-#CIn@$DeU)`RBc?<dwQwkg2@)lU?ADCL_rDN=0PJ+u}<RI?o&%f6O z3r<Imf6xPvj-5C~zGWdS_9E~Ex{yyFi@wC@=6Is+<^WE4`zmUyf!1eVF3W4pQd2|_ z^EHYZ#dwa%bQUI(3s6aHhSDON{s6oFwRM|w0H!hdc{<(1)p**RWTM~W4F|zcnMtMC zgU-w&uRVgCdv5aJEBWL^{+~tgWLV~TDvgS^6>R&uaIsg}9=kPuD#j@080=VV);E5` zS~SC7byxdUe|*LTb~rgcs3^#{i2d4kfe9^@$Ql(O%D)I3dmJ<UOByT4$R(rqEk>>r zjr0U~-rLn7U4m@mDL9|QuzB;<9V-{p`tEvD+J(d!BaNe$;|cR9#xWtRHyqq4%nUe( ztq+$^RBJ1%Z?5m7RaRvsd(#O9XH(GoOfg;7L-I2i%h9KgFh5pcv&IuKKP3X$3X=N8 z?3<0|I&+T^CZniGCDX~VrE`7heQU6ksdaj}+t_ZVc0`+_&DZqhJ|+&`0B1h~C~^tC zf;Y)JwBvnOBQtqmKi8n6peQz}5;3HguBtTjRh^*6XEm9S#>Nxo0Jbp>FnxA8anliN zvz6CAYmdMiE)%_(8I_)1ens@*=MT4ola!qtSO7Vd*;F<o)HnG53+yfSZd=>U>5B-X z$9^2y+F)2mQPg+xlNalNgzXmF<v6A`Uy|>rljY;o=^JD^L)1JS&IHnS#u(X;T91c% zMlEtUPPK#UWnd0gQKJ_#`d2tcat`n;qk!C{JCVQ4%xsh$_A%unlUIYj<{HLDF^#-) zDy)1~`4Wk#tjA$f?%B1;6(w3tRJ1Nd9{;J)#;jpZ<xI=9<k@qpSZkDZ*_vU`ByUwz zwlF>#dzeA~Suep3pCV!!N<QvBnm=DX;k?W}NXlSNh3!PG=RVx3CFHn&r=RX5?*#7F z+sLSQVA`|`KGhT1)%XwO@-JDeqOgfC(?{M93pYfa*AK|*^rSOyDfW6l{O}Xx3|%l? z(#cq`$$07!lgZ)5ka^JTMN_pMn{tY7$wG8X_hByjRdluu)rx0iJlZqqp|s46PXEcd zFL}8~SNiYDlbxMpjHTE68vWd%Vwq}1#_gvy%?@C?dqF)zR5I3bc3lqUf5po7%zCL# z7Uzjti%(AvHr!5k6g_irE9y`;YX>JMg05SCZ%#`(JMJ*oM_aG$9eA$4^>&fQC`OOf z3GxFWW-)NERw<Yv73N**8R1=QRn!CIRihv49%>XJ+WCdnw#61UrWUoEH@HM)X*KoF zY_gv*6si8rF~fWyhwF;=DPNrThPSKlqP0>D6p!Rm<DPMsFN1kTmU)CTl$yzOWQj_u zLrfyMr;f5tb@-Y|Z%0FFI}#L^S$sw&ThYgo9dwbOjN2-@S+;{92O3L_6LKp(?0NM< zx)b-&nO>6o@m#u>H>e))YNFZ24(Lr`X^?w9X5Y6~lbcV#2OOa1dmSu~iddwlO!pWh z_tT5rgN*k^GJE~;Atli22KcqM#PRXGU02vmk>IP`aw`3(o9Rec%X=@tKBnPcd+}5G z$wJ;?vUoClP^h>`4eJ*7Y(YoSb=8n{o(ebR8d>rASn+S71h(du9LWrv^yFx}$}3=v zOJJte)+l<~i-87rk&WDpbe5!Zs*aq<GnJ!TJDA-0Tk4qws7{Tf_C68rR0f`Z3f(kC z>9%=EMRG6pbp~0IpUn1H4H`N{r$K#s<!aDtv4MJDCs+_0uuE;}yT7B}B5kLT5reCA zme=5rr^biPBOBS9=y903OrKjLDoW3&Q8c0Yi%p=$-<W3`E`O47y9C?ZV2Xz(zp3b@ zjkQ}6KkTO-uz)IMcB<aRc{Yb!LOrQ8+`KJhKXUTqM1P_UXAKuK@?fv$$#cwl`^1X( z!Xwn9uJC~?RG<RCP>jQhdC1J(p;Mv|y1Ix;Y*)P#OV|$NypCVNRG0=57kNZOGS#E0 z%Iv4+MNbUV3$oku?B(iT?Zg+}<9m@*SQEiN$FZM>b$)nE*Qgsh$*Q%X<Ln0bI|JWO zK|QP?7UCP0q5w0NyjYWa)cX9>Ll)CV(1QsL&&ekgLITHNOM4SL`I6pxB^BA*R9&;f z=g+0zCshEB6AL}Vj;^CBc2f5fMd5Q_z%w?4DUnC?gcHA<+__8CW8YkKkDswCGi9xk zjsgR~X~OIGz#Djw=1#^lvgk|5X%D0Se>b(Grz#gXq#~KYoybHGCtlB>_WL)r@oGH( z8M2)FsHc1tDX{xvIhE}Yy=7ftif-eb+cDjF3H`f6uuQ+`=FLbq?;%x-OsGjG{4(S& zhRp0M>Qs~EOrokNa(F*r;g6%vd(iGl26GJ7%A+z0FTSQX{M6Y*O<VB%+t7t*I5SO= z(#h-?F^$a3(+5z|s6`d_2hx>M<)nLj7QNYbRXt?-xtK<d<`n&qm0>CrLqbl&x6B6v z>ppCP{K#HvItct6{{7_9K7u&@1b_Qy4*Wpo;?yy{lDb?ex<p$sb6v{pVhDXcPno&U z7io^7&go(5#wc{T1iSs1h|~i*?y4qId)BHB*PAVxVZDEW0e-NfWssEJ*!9)q{Gakh z6X7rv!P=w;O}$fLRFR&NX=w<aixu<f`P<FRfIeLLCGY-(n12~-UXvJk7pP|{$o(+V zJqX#ZNC)bERgpaQTTaEePNgYaUIpRoAm;4GGes!{W`D--6TrTwIFn;95t)B=zri=^ zOCIqS`G8k;Z?#T)s7_>I9?S!txupESUN3~b5JY5MSaqNyJ=%Vv_Rz~bA12uZSUp}C zIz>fyutFlUNZ#3p)e9nlf0(_O(|E<x&OnZX^q)xKYcSa;RRJzX8nVNuklUZ&Fh2vR zACb@nr0ko%Db~w(V6Vr>atv?%5x$LwUAd^nl6jA(cGeTdP89sB1U%$0BJ;nf!5zYO zbd?EUk=xX#U$7g^iTj!`bzlHLH=bVGrRs&6s5{U_xQR(KMU78*$Od$AKg4nj!Qy%7 z5<LKO;1IZTEGVIYodv%s=~g?X7r>`)Pw!+WCI)Q8Rt3OS>rLfmIlU{>$%H(l*S-+h zv~}3N66z+sjT4aj>P&PS3+{6=1z{=-y<XVJC*apZqBBu{DzZ6G(4T7L=HA=+?C(|@ zekuc9IB&rBf3XIesj;0VS9C#H)I7IfkNh0cKk-2$$bQ8kx&CV4a6DKQx{X?q^=SZ4 z_XYjMH_%{{zO_-*Y73!V3#e;OBXWOAMWhI_bP5l?pRCpa5PLXmqn~7eIv`uKiHcK^ zky!{!E*<Fl6#UKEe5V*SDnCDOB(|&ynCAwacFTCSj4%ck!|jNH*CCUbJn7ljec<$2 ztZORr#~WdPj3Hb72qsG)yV4!K-3NEEJxJmRQNvVt#tC@ftw?A+bo?|n<|+3Nr^9?J zb67U8W2vx<TE=2K9I^wxc`|&S^VF2iU_}<;F$W_X;Y>LCVJ}SbttDW|jD$nXlutT_ zGLt79LH}zg9iW|<qf$psz?0U*TI`3BQitd>1UWfLc6}&Fvnm*FFrQuvPEJF2;A$-K zT<&y<Yc)XPR>ANr0ehi7@4lT`5b4prtXPuk*rEvbtgYOMr(VRTdcwnNimmU%G=PP8 z(V6VmO>(kpc<0V^rg*3e2eUdpeMk%=s``u{`G_4!i9I?%{v-oCFR%>l@%kT`yEGTe zh2#+Dtz}g&P@mZbbI;IonX=<0=GmaSq7ws%1-B!Yz3>$;=_qK6G)ruYPi5z>2Vh54 z#2cL>Uv>aC)-kZ0ts?l|D(dEk(WPqCM3T$P=zBWsWqNi$B~vtq%Iu(pqeLC|*rzgN zu-2oQ0Wcc-!_)i7?2m@@o+pw4>B$}!LyG#rgNlS<wGBqcYwYU^-Y6XJ5=xvHMfXWK zy8SVUd31}n*$o4!4~Wu$akB!>&`p?l{fLG0f;!5BFPp&fiUd^z5M$nixpIPTtzbTT zp8fd;x!nqqiXd0Dg1g_O7pW(@a7ULUGG33TD8%%hVsxJF!X}%<s;|lS9mP(*W>?o? zds@P)^0N`^!Lo0Nlo!W8<Up<-!XG<@Ze<|vxJ6}y;Tnv6sLHxEK_{Bv!-LSBqA*vk z6VIl>;(EzkR>E7hq-S;n+0F*k;42ej_h;|UgR6?c!pgv%YVcEq-~i2~izqW$S4~BE zBh}iD<Vn{fPv=;TDDWIp60zY6kcxDifmD*|E@z3+ZV-n%nObuLp4kI9Hx1!24@bwM z=_B_u&N{)TDN4OR1G=0Xc0o?ws3iBx&A<FWx3c3k{=_m4MCwa$wT7VMd3>!0?L5V+ z{)^V^fW0-Fy<N)HG&?j%cV*?e!H66JKeQYC@FnP~e;Qpme85F|4&Sh*Tahd#@F6c# zsFNq)A9B!(+!>^EmamVT)ZQ3N-WREC0xz!&sL)bw@&_|PKxOEB_=|fUz@Ie6^K8e? zEGG*800-$3@0bWrU@gdE8Q5$u7VaC;P=seXqziyRqp6_#yHp<Y`~q+9LYGdELD_)~ zyTY%PATb|^Gaq{Yn2PvWFv(eUlRy8UKc@%C4Wz`|D)e<f)^e@vLzMguo!H2_Y~|N* zH0m6gv^cUP<yA5!-?jrO`RH)ZuEWSqm&GnU<5?yliJh78k&>Bv|5w#{z*$*c{hFco zHk4uLy$ro6SP%pWD3BnwphjafN)!u5O`<UxjU};>Ye9pR*boJ*sEG6;(xvwfLmg)5 zFyHg+<=pRH&u_-zob&E?@3mL?ud>%Wn9fZ<VKp|Q_l|;}Di=P3wmwN$x0=Ke#v<QW zC-jzwHhYtG_a`zr3dH=&j2_%QE2ADh!G#$Eh(Wag7e5EO`hDS6dIR=4TZv3GIZLp{ znX`9OC;4cxTF`7hvGPAqN!F4+d)I)lA3)1*BcIU~j_62L_;_fq_dS)Wln>C{k8nom zO;B-5*7YnpWiR!P_2KUapjZYSkNU%#`BWWbfe%J7;&VvsaJc0mFj#FQ?T^S+CK~2i zWMel7uNze{mx3njJF*>Gmc#08Wgq^H7QF{K`45_OF6jL#EY9PcCTR%mE+%8~6;~fX z`#yy=_yrvDF?F8(;N?4z%!<tW40xeEoYsw4c11MDJnYMGr0ibw&@?1{6DX`Eyp~0s zW=*)f7ImphnC(z@<x1*u%b^!nVZ-}?k-Okgk418tp^xh@=KaiR72Zd0cDEnVi#cbP z6K}o(T)iIdZbI$$L-6DVD)YC4>OECklUngy;+6g2so_|%OTk#%&~g8T-h+_R4rE_` z3AIKtyH)7-l2rfBMqca`QvyzS4cR)MsO){LekYlswtRL3o!AbUwf5IpS>t~_8fF98 zk-N}^PcuRWGJGDI$}@WBA(zjxOV$!DqE`Gy>UBTljyI!eOHwI9&X5SrXVCB4q~o`< z%e%q<HK6yabR75>64RRcljCss{j9wzJF*V`-A;AqF*M{vvj3MCc4Kdw5sSN-(-1d9 z@!Pp}PvKzn{2}yjd3a+UwK-3sp<V-34~Op#Vq-izGziJOhxz<IRg*u?UWfsXv&w<2 zZ3vq7HmL9^_`Co<Dd2q0B=}-7nshz8Av*pH8dfjdi-)w8{M;CLU;x<XHt2mNn)4Fw z_79};MXNK&h<D+NUVL&BV;6F_p7=l2nEyS=y8IjNy#Q|Oz<fTU68bdUashn$G*b5^ zw&O?k{~qvWdpPF+GIIxfQ;*&0#i}3Uq}x+a;~!Y=$@mB-zzENv&DT*)whd3{b~vdx z_dH47U@5ya73}l~a@~&}7DM6X=b+_$YK&Kru|Ex#ZN;63uzR<m?|#Mpv`bv;x%uPd z)wb}x<@kD@>3JS+avq59T9DYIXu)du7hj<7=0L|z?D#|M;&bTO+gW+>Vl&|)Phfq; zDT%@C>4Q+~GB|SwXm2dDcpE&j3xwdwopR{}Rt4-=A-dy7tpEMU@=Mr);@G!`kXU;p zeZzgPhSNIm>cKtay{=g2`XHPWaO@d4@&xNH%{x7bv0TC&??M0l3Aw!`)rZ%IE4NY| zJO(P>%O2dr{9a)u@36W!k#q}sU=p~t0du~GwLFY`orPB(;M@06mH$5UoC#GI@cTVx z_%c_IV<+B5?sv1APVAcJg@>WNyRo)v<a>6a^A5trN8sZbWU8!mwx_~zR+q)M20;G- zNZ`5f%`iBz8`n&M+M~&u7l0bBV%5K3<O+Cb@3Q-!a-|ijufpqN;kof3tkGEPOOe-n zcI$g~_*HzDzq9Z66Wg<M$y>Z%f%}XGV{9hMQ^;BLlUS!W;m}stg2mkNYq)6>RBTV( z_r>hWZr1$}9Qr%x^gN&MWtShs_IwDQ`v+eA)lk0*Rj^yZKy%0fECL083T^KO_n(K( zxg7a?98K{keDDx+7{%XTfVR4zNnb_QCNRncXsVaUkX{dcALo9np-U#acMGyG7XADL z^UEo=654k~f~tbRhNXIys&MKJ%;A3Q;GY?95VS6fmdyvR&wyLMVovtgsE3{D#a&v! zk!#@9mzc?I)Pen;ecyuwzl6^E5$-CMQ4Y`lYes6zejh^XoMLyX@h?xuUWH~I#yE|s zaX*D+SjgTCM-Tmqm3_-@bVHwyg+J#q+Oue{gRJv)xOfuutjVtajyb*xa$3bV-T?*v z2K`VG%IzT=xr#W=9KQKJyEYXn9z`b&V_km-eR!^61afm1EByoXJ{JU)&vzzZ4gL!+ zyq%=-Y4-YQe3uFE;FtKK@ALCEk*WK!H9gQAH-OOBA-DaI+DXjvRU|l@b9(Qh4SGP+ z0<cRy`N$zi!zb{jCo>Azhmx${^XTQEZC~a*5;?jNoz@5W%7eb|B1N}D&4(C&HlA}i z_^%-mo?OlV>;V0p<(-P0z1qtvbBTR4fyW24wqdN~1~B9=iIsI?AN#Z4S)3hM!OqQK zb({G93Ut&WveMh|2+Qzkb9O?+n9cZSv09b*D+dkG7o9SUIbDH-biq>DQFk%ae*@}& z1kZj4S5IbD)2tDIj_-mcx1rrXLAoztK7F~aFLUS#FV{m3maq%s*p0>LksL-H#eTjE zihdbB8-k>i!yEb%Z1Ny$e~tSrfliIk(>2g5@5A|*;mKWvhxrk!utUU5@aI|3_<k(l z_ekG0$kk4G<{dQPC~)UBT=Re6%LS}>CF|Y}rB1Tqif~#XJ5U$i{S9*R0T$t2X7~fT z^WX69^UUBbu6=-e{gwTHoq11U*Plg-#vq4>nbjp&?1#`16IsENcnEFSwOR1R9Z2+j z+;t*4Y$5yTS>?5GaZT)HOK4acIvj=%i$mqQ@Z7bm!!B86@x=cNmn}v|wBh}Z>~=N2 zQ<*FBSnndL52rAbzhPrXGQVfog9-5VdNf}>_USJ4sVA>y;#p1SuaW4w-grp0S?K|E z;{xVA2R*d`jk1;hf5B@005yMyHrojve}<iFoiP}n_9kAxCX!Q=jvG&7A@b2Xp8x)o zxo!Esy4G`NZ$XoZ%<MSzs`kUpO8n@FG0*(lb>R>zJqEv@`1y2HIcjvrff=sDH=tr1 zJAD-z>}y7~2gh0Xd@1{-H5>zH&4UA$^Uf?}cO?|FFUs4*Q+FWiAG6+T;VXOW{s(&e zg*i@uBelN!iOjc$@A@#OOsv*!IQ=O8Z5QY)hPwvdyA=NR?78UYN#=7gSoC_d`d56j zGZJ(+-)zfz*0O&;CK)Th0%l`No<hs-rSr;s^k+|Y^Bb&NUwqfraNHOqtOT;y2Kng% z{RbrZYlq!$$vd9R9EyBi4)^46nr0=t@FCh}H2nGj+PNmu_9#f{Pw<vqRXoM>1w8p0 z9Q|KjlUUt>6fyiGSm0Ss-k!(qE=8^v@OvrLTE<#4lCD0=uGqiF^IRL@AJ07Pg;&%Y z)j)t}(T}TG+YDmZ6IsI#Nk-PNcRP4(VBH(xlLOfM#@yxC*ru^?*96e#ll-d{)?g=N zdt&_rT4XP>wTihuik|C^-uopx@+CXp0ct-47d-(={UiGAB4|?{ZM2TNEn~hb)6CRO z@1q~@#B$t$T^-MO?TKnUg)RILKXp33-Cf|4z3k4L&|^HZum_Imh?W}yoeJQY$B@`R z!UOZMO9QY7?|}3_V}v0{z+QON-V=+VK}q(o4V-Z$JJAz5tUwN~V)w5C^L+;&Hbj>0 z!*Y!S<vs|f^x*mec*?VWn^{pN2*U37ddv5Nk+x$St^#{@26>M_?!V%jE1}|cu9*!* zJS#ODie|!be`VZP@G2gMk1s~gpW$08nALKqu#5el$Q(vsQN)q6Io;G5UimA!X)4I` zO*rEZ*vj5m+p^feJdmHAV;iuO)1X`{Vmmv@&>tp8|0LtuN${W8xqCp2x5FuSU?;CY z-&vJZ45?^^b?`)5Ddc-AbNCkS`ViS12PaNOS1f0DH$sm}$kDy5bsRhYI`kaHIKPH= zm%z<k`D`HQU<g*+v*H8L0#(7FQ$Yd`qB-AzkFuEaGhF>DnCdrByf*mDQ;92htwB<= z(_UQ8?;P}eKAi07t>~e%5SqxlD?nXep#5f{!G3_cp8G4wu53obe#5*!<=s=@ry<Pi zVz|PNK4;PNr`WIE@Yyu3_B`zu%<LP!Jqh0YjytVILmfm;JOgQmtCNhpk?${MW^1_5 zS}3!fz4Mf0ImRr3w5vOPO@kAkM=O5EeLUNF4zxWdVbUt#wn8-70c5Qb8oUrG^t|pO z^xS9Ac_u$o;gVf&aO~eI*7h#i^c`sbHGGqgzu656UyKfEiXCW-)HKEZH%ESMXD_}4 zRgptR9v?<eRO77na^~?FYg>vuW}|cNfOl_)rWMhSBETEaY~QiUUvMU13SO5HobTC_ zk?cri?8|mIb|+G|lbw;K_D6dRdD7C1g%@{m8s#D+_!W5Ic_jMx%&i6UYKu<pggmuo zz8CY2uF$>&=ku3C-TBG>&4E&%prPMJ{`Mh#HIct6d`J7&kSneQjoym3y&ufd6^U5D zz2D;X22%bVBamHSgwY`FL7?6qAk}VYm%qWQOVB*c(Ey{+FE8UAUC+IbVrxpk--nR& zUHp9-jVI-2A&0NPRWI?<tC);V&trG$pqD+#d<XjUGxCXhsjAK|wi7RL5?p&dYb%cq z{)}s$=jvBM9&_MEPg$>oT2!0D@0HmBJ7`{lwBCfLHv$Q{l6~m}qBy~KC$pN-V8~|} z<pZd46zfzRJNPm0-GR;dEw)RHmy1N##3%I}ZABu(;<Ag`#TU>3<MDm(1mAUo<`sxA ztU^M+go~y_qj{{e9a1<L>C0s0OZnt|^w3Yt(2j09;A*2PMk9?S^g(j#GKL<-94PGB zV9&#@;2lrV&u1<xn9T|Jw<K~_oIBQKuNuOwIjpla<49pos~&{DCy=0naE?}g5hKn= zn=InBhIh-N<yvF?a=3E~UODi~xy+#l=&&F1dIgjkhSUz={c4Q47;E$nbbgK9pU2qs zq3ZQ;#?|n&Ju(h3>JnzRiuoR4rz`SaWoT9p%84M(An%@E-jY_nncvRx5PF~_->ZT4 z$zrcs!FR*pykDcUI&*af)YyRx?BUyXhgy?3_eXef9)H;rqdYw8NpmY4)eHI+8(4WJ z5-<b~{2MmodRA45{u|LPXENV#76t5TZR9r#-$v<Lg$6l;mFWd$^tuO_M^8An40G7X zoj0KGJeBOJ+?mMHI{v+lYgVvZ;}i1!fPG)W$a(~A&~{xJYfz%(74Se0_Ubev*{}Nr z@N0Aso58B|IBLKlWs~Myf^IE<z88UWMlzETU><w98Fi}(5-$!d?E<wI{Z<k>H)YrQ zvTHefdKzk}JBzcs=V2p9VrSmON=*Zu-H%16MeJe>5_>5q?~Y^>*D*@Dq_cOxT`%+Q zl|<cc<+Ig1({dEjwuCA;aqDf^lv*H!jnI8JSJ`RSz9qGoyS=A2z}ZiL*DfXAG6HG- z3E!&=JbeN4E{0dV6?)0>cHYWncGrTYo@3k>&{|hRo7M1^xc6$JJr95vK0z<7W$*Qh z?9Vce{iEub9q-Hz-3OAm3%fOhmA7ODa>_pVy#ll>2Zi>*4PP?Ks5GOCnA4xo<SW2n z?V;w~*z70S<GauZL)n?8@JDfGX~(#2tYicCIm{Xhp=4S3vNPO%S)y`JY)Ko|T$PpE z@2m$>(*@Ztg#>JcOSGOVnDb#ItU1zi19Ke8cS@0c9gXK=7wSi_b9=EQZQzfgaOW^a z$s+FL8ULMVgi?&&n7iFeR^>I&q^PqSn%OQiQ`x0?@c%+Ma3l2G0*!v+x?JwK2fJ%u zh$A4a95|2DeF+UchW0z3JDlbldfrR1%JcbuF7&d$*bFSmC~|2n=}D9gO1uF+ScVQh z2dmVND?2lqF(fm+S?p#DG)^Yo&vB@<9*Ovl^}GdI`y2Z5VWM>6z>nFjPmql5T$2N? z{xdWA4(m7<Zkz~uwAa}!tjj*5qW*s9qN@1N^U&#^fC)aw-cChU=E8@$po*G|atZ5r z1bzD&um4~p|A}=N$orMKP7e8)*N5EwWjIMR`U?C146m2aT=sjIjqY2`-mZrNvlx2; zGHkD{)@YmS&^gzGgRh2PtCQVZ!m2)Cj5pw-Ezq+A`_Z4z%sSia=RNMXjCr-^s;996 zQ^;LU1V!Eeb&heDnP`cxxQAMNHgqt0Hj7bLbNAionVO8)pPjek(Qv3R5MGe8>T>t0 zNOdXDiQND;an-x%i${qh-OSF6Vs%p(<uLMR)a~*_!2xhsJ9L@d8uHM7Rr%K?d~!29 z@CVk`4}Lny-mii0P9yJiSVs<AZ}%XjHzVPv#c;(BjBQu)mgt|WkWo8{*e|GN^2`q) zRmSLU2AAh>GP5DRl|IEEp;K4|vufuf5jo7p3_w*zFO%$M751qtc6UA0P@3Ojx9m@q zM;zQP*S*j$`l{kJJ;dI;*MnDA)_Fek8Oo1c$+F<YT&VgHI_ha&uO>dT)68PlcYr8D ztz_GbMYl$F%fYF&xvmB8X2ZFyxkpFVUI)7*3dv)=c2KPh^(ykpgeKM4!_COmGNemP zTa%qJd)I+6>=aRfZ)G#45^_0vXve|dL+u;+YanAEM5e~UJ@3JHvyjqKX;&*Tlat)- zBr>jcDZ@CGS&#h{H$nGxNPhu3J)7MelvdjU>y`)2zk$AXMR^&@t-{vrM*6>J-5+s> zv2e#z<ka5ap1T;+9&@7pfzYsPnlE8K_^B*Z$VQ87hf;Q1dxI<AWQ?DfOG#+ff_?7A zYHmly{s~V%3aYf*(FpL3k&xS1TR+ye4{!cKwCYeItRv9azelS*i^MK~Vn@)IdNAjq z`L5yW`|xt^#**q`{sNw;#!BtF^Z~xv-|-87hqduJ9ewc7AAuiMGC~z--JkD|N*?#i z_?c6PP>x3r-odIafEP>S;m&0RPjTmKna6NuaX)jI#99ua;VZz?by#gZq<|AlNPsK& z3)bd+5c)*4;;nGEQO(_G0<pxmAkQa=4&4GTcO~1>h@W=EL9R-iy$YMt4IOnK-tr6R zpO^UkBvg8kQN@(MMK4_qZQ8>*W!U>=P<1q3)}7${dzhuqEHm=an3ajfe+6xR$7oM8 z)*GzvBW(2ZjCL#U_vKp$&@a!SOYcO^ZenfsFpG!TVPoTC(JI>P%E(u5<TH9w*)eT6 z;|@k%FXer6=Xx;J*>B?t)zK#F@UqNJ+>MPN#rR*raof<(hgqF7lb3&)xaI=*uLC<> z6+EI%S`LM#;+_3BY1CJc+=+1Yq9k#mCc8dqCre{@^Vz|}XqjDTZDVQGnMao-*KL_q zcV6w8S9z$k2r7+DW6eOy3h~u?Lc;;9;Tm}DUUvK1G@Cxif}M(TKvj+5=Pbr7&d!N7 zH*@!`NX-s@yYm^Wvosu7AL_K>zIvRskS}HIB-&v%k~D#PzK%su`z+zwlS$jzZ?hWI zI>K1n(Fv8{o(8-er(>dLZS;;P*N#?e69THljM_n~^SDzBs3jujfF=BAuNtE%>bn23 zZ;!zZ55u7!K}(U7QMp0z_y{=X3OJ%IYsvtB*tP34v|E-un<tTp2f;$d6hGj;X095d z3;RQ-zFgIVxn*;&D)4#^@7Wj5UYSPA?P)ig_3g&jF2k$}LE4A-mtDZz&F|5cxvcy` zIOrc()A2-0pMZxtqXqNXKYJG1A64JBCA?4${A^E<*U-0b!3&Gfv}!dGeq+9u!H(|c zI{Rsr;9tdANd<nNVw|)5<ijPKna><JNBlAy`#uqRe8}(bd1nsVYc_K;uF(ok=%1|D z2+-4@WC!eN*$ry9fOgH0vt#W4w6vGwn9Uq$R-3ionqsZbgLSXuyXC=z>yy{C1}fMa zvnv#91TUOr2R}ud+7<N)G|@B6WCeP@C4AN&%G&$C4XZoLeB`c!tSJi)sn69~lIFY` zKq-m~nQsGl`a<q*@5w=E&>>*Oe(Zx4bL#UN>AEKDa!>f%Jit&sZwIIB;I2O)?PfIo z17(e8&w<D6#aM?C%=X#Gt2)%3h3{y0{?Yu5Lu0LE&Bg_`L02;md-yR@kcS*pWWP$n z@!Qy^`B2*)Z_|+Y3Gk6o_wB5wE|#!WT1gIf(pt7-C$r$=s{C#Mm77EB2JEkv(*DP5 z;LAmzh*MbXR&ZZ$_M{8nJqV_920OU7n129NxCBnhMjM`B=MV9zI(8brS1_mjXa>7{ z`=8x-jR=Tj_o7G2L9HzKDVzH%cP;pTTj-!iIut!H6#dqn8I=Nk<|Us{q^+b@VK)vl zb}r)?C0dKd+sLT9!9x|<^Xja)5j5Y(O#Z{Z{{w9{ne}XAlmk#?1@Di8wl888?V_X? zS&^OVjI3P=RvpRDFX5m}ETElJUjTdj3k>omyz@2ExjpgEK&-*-$n_tv4G+SNqmixG zuo!=bH!nl0>M5^A_7-ESjD43#Ix~-*Q#KYuhe9~YE@a)%ep-pYrHq&n!um+&BCOo& z_;3^WYbUEc1SQKdsu|uX%>F^F#iMY_5~x!Rt<VL2t<TEKl5t$b_?sEO9Vqo**uu#~ z|Ng;zFX21(Ml-r>)_VzB;^5B`yMjIY9xObQ_jj>7W_@}=hhM>&S<Gh*+HfvfZWd#2 zg8rwVLTUEB7}{?OSK5d3&&=wd(CIr?T%3I>$KI`HL?i4UakrDyehvmDyofjW4BpOl zjBUhmGn87*9oDly<>A&|>_lHIcL#R!472$GX&KLtoePyvsit?5js8&@_CSM^c!VvG zwj00zcSFx1TwNx~-5lg@B3j@p_;M*TGZvH2|7SDio7jg>nC~)HRF8eQ4qJ31R_V7~ ze=&S-zcf2<iRenfclrxoW9RKL{tDdn9^=l$K1J`jE_}Z~oO>N3JVLa7628J`WRyp< z<{O}XW3=S9qz8<Je#C1MQfmHgB38<Oea&c#pl1f_>xCrT0hJynUOk%s4`ugGush~b zKW0rckodW1_=(KpiR6(ziM1cc4i$A(?t`VbZ>c^*GhTLp>(34hK#O%l+8RTBV-XwB zG1~s`kc_E}thSzloS3W2#135#r;o&kzK7RsXzF2HUx(|~Lycu=@9dcPJ+v5)ygUo? zxRU6=75x7tIOZ^Q)X|mxQZ#30xakb<1um}3JT8IO1JD7LiCTV(C-*0^t~Zc5^l1fD z<io{RvZsFniM@<JIR*^%F0a?%phwXEw<km-p6Lo-9DqB`(LV+~{t7RSg}Mvjpc8mv zr_egbQWQ>EAHW`uWZV&;`Qh-59pLt}8arf4h3}#7tYp2$F^_+dcl--h`c-ylH6yh| zJ6RXgC&^tCIIlZWZ!GP4MjVN?AIN)!=q5XMj)N{%yxZB)?vRVnSbLCY`-zu=9^&X> zQ1$^LB-UnM4mFGb8ROf?ie@sa&yldlpviT-Zcb6*r<hIT+csgH^nAK7j(*t?_Wc6> z?#?>9VT<gNd?EW?2{dIT#2e_e7vSJA@b47XsJ7V0T#hqNdAPkTBiZ$F2&=gn8mZqN zf){Usi-*I9Vzl~L5A&Lv&~MA3n-N(f&OagzRyHjFh596#w^_fj-qYk%2ZBMY>llw@ zj0X|FKyKx?%(E&x?-L`QLxbEz{;Cg%ygwXp7jyiYxn*!SJHg+|ES?43bE=*w!;AP0 zK8^W8B(x6bNUt-G*-U0#PoatajOKq49Xg4*L}qR?a$go5*%s;yh2DQB?(#GU^tbGt zdD=7RlBL{nESgnJJ{-T`1~B<(#$3*Rl|kdQU~hVZS$+#`jGPXGN@ia!h4StByezox z0Fq%eU>2|GXr1Ydx(9u1Ot~hnOy=7F4Xf93Ipf?0jc;X4HC|)ZaSR*t6T3bMN&FZp zzRHT;#G+4vFPA_M@jx!za{>%(x5sM9jv7(0dVoSjq-z8BT*^KeHChR3J^~euH5Bky zE}w2i7Ak^t+A?bqdk^T?2RS$&uIa+e8nG*OBsq-rG5b;$UC|sFI|ptxl28(Axz07r z=MZ;vCRGw1(Iy<_n&?Jt56RNVmb270mqE(xhq)F_7?Hw5tmAaDh7G`Cc33TsO)$$d z1D*XfNZx*wYnb&3(2^edxln2_^cseJx(a>$8~%R*?^na#n2|C9z7Crp9zDa%YeQ{) z{VI&z8Gh@<I*ry}#M+zlsa^8((Yi*J?TGh268j#qH4*9khB>ICKW87UeB2NH!uL7K z_(t#=APt?^IsGWDgucEQq$PY=3kq&!%rDqUvtP!#=5wbr(BAJgf}U5PF+5@OELL$0 zzyHE|dc#S3ka{yQuOJsMAV*W+<7MpSS~T;IaK}{Ext?9D!W!%rJsjz}840}s`!f(a z+V}VexX`?-nV@CR#yTx=`YHHvGxOMu+-nc*KU^=Z!)HWTZ?+{-;={ys)1k{jcCjw} zk_lJXVcG7cW%*m&XHQZ&N*z)%=`){oQ!9OQKl{9qPmDY?g@5edc{3}va<Dri7BUl~ z?LL7+T<DW+ieXzevD&F{yzwKub(@=M!p>d8wRb?Fe$2&Mq3_wF$^6WP7V@FEQXFLc zkv@>s3rpd+^~|AcLNymMN*8FB#SRqbUZvpXs$6AeqB?6Y&&ya+DSj#@iEjse2O_EV z8$B0k(bvr6J7?iBduH1$JCC_rp=SsDChWalc^2QQns|Zpw(v-2IKl|FS8awve_|i? zlV<Xo!#+)g)9my<51JK%uv>E9-u(1PGTDj!smneYkF~46nTo*U>(DThxbkc0ag2Dg z{>NY_JQ5@{3f*#T;-}-ttCde@(PKV8&OXm(JR;_9N9q}Hmc3=|A*+{P2yblR9`-1m z&0JSA>pk4zB&&4>=C8hDz7yD`cbWS_K9vFuS?Q&4<6Z2Q^&jShma<cJQ{I;Lu{FHV z2#(8w9%gH+BAxc#wZn1;cISNL^J>;0Dma|1$q$JK^ue0(ot99!1pbJfkr(p&Bv`sJ zceN|AF^$HIX%u`#(*0IR<if9&+2cxyFBX9kUPZ3{lV-gG?re$n8^T?CCjDbH<qYqZ zgA0t#?m_1s;4UShiy5!7pkDQtd5&Z7Y<cujJ?3N&USoeJp>iQ~^m$Bukj+8-gimuG zyBHA$x!xxbSuvv*v!1)0fPal@y3eN=eF;>X!S}X8al4C`gnLS{h6?=uApC8$$T8Ml zmlfA#7I{#~8o7^IpHFEpD&H2YW8ddn63%JO{Es4OUb~Yy*5b<M@MR0;Um1BgfyU2e zRmVXBEzpoY^LHRpdlA%a0xuUsFIkK6Bm8?1PEuz#Wj@vo>4EzGUi3=^zN-gdOoHb= z^U_MyV{Ptw6;@#cdmTLg9+=Ob&tsVPRHzVsP7SD84^HxlbC)ywTd}y;@mCM#TO;Xm zt&KGUC9s!USoi!itHp5ZCRUcq=tt4jW*_&ZzYju1pMoOR@yRIBVc4uCkEu(PJ<0pU z;Ced&=b_imz^f52j@Wi>_O~pboAq>;8t{|F-vz9A2mD}E*QjQ1IQJJIFKgb5WA9cW z-%9qE{Qn2&Zsmv;^ep!|z*XjccP2z!4F2(%1ebv*uH<Enl(Av;aoF>ppz(AN>Q{{R zIkYpr^$pr%1u~`vvaYidlx~6zH_Gc1$V6?PwGm&~zq}X}JHS2HFthbgYXfxIz#YsV zFG*C~0Oj<jE=nVe03+SU>(9JKVs*Pfl}+6BJ>>p%UgNNs@1p@;2XDPV6zoN2r53YK zycrN91)=rt#DjPsVcaWOWk-0n6x8#XCDQ#UJL3~ewlk--tamQ-lK<_JT>|c`#rKU0 znQ^GfPE>(E+A&HC_#q!Dna20cozF)Pu0pe!_wxB@CDE8#?bGZ|1Gv>_M>TflG}JnR z)EP?=OJySm?U0v{hAOO5UA+~K(mt)>n|bW8`mYc@C(jrGlp8BCpE~esBW7b{;4YA< z8FR6zI;R}76$4obuD#PDZD5^wXp|bPDvL3ypeY-mhjO^4F5fIfhn$8sTUgC}sHuIJ zinTDtGX;K{0v}jCu#B0xd)wgvUpt`t5?;%=hj`@_lB_o$SjU{{L8xr>a|@qqnSJ(M zog|sHkyiWbORYm(Yp4AKe0x8?jVj71E8#T}Wj=dSp4n$}t#TR}8)acVvlY93$u|%2 zt!jMU4C+*7O=d5x=*frPHF>u?{@>+f9DdF3e#ujH?MihqXjPnRvXFQ&pPjzdMwf%# z`>+~gWmW;KU{?E)=N9n$0OAH0Fs2yR{_RbnW*0P9L&i~0XwMcxxlfRq&!Om=G?VIF zD^FSbQ4?wy3vGv{@$8wAYVYe41ukSB<?%7a*5AVYuY*mj!nHblbJCi-`2Q-nWg%m` zM^=dVoVgXeZwy}KzCFpD&$KB6Z@SCH;WPiGB@|Pgh8wNvI0FV~%YCnbqi(@VxRJG= z!wgn~1|LWn=078EA99BuxaTUymbyl2)PY*=Rq%l5%V*mt>%M39N$<Nf`%(}4bQ!e2 z8htY)c{5gmSV!fPW!v!k9B5z+dLW<Phz@uJ9dH{n^2vH_n6H`3Si6{JHTPbSZ0>T_ zyp&nRGa=S9H}mHHOO$P$%NBT`5@YmBy1|a__kvfhW=5HbPpq9egrtSlwnx5_tgcoo z+nMMT>k|8jKg<Ka&Ypb5Za4$=fblG4W-9-m0Z%SOdW=ra;O;*A*82J8aENPd4WF3f z?+V4umo|WBj6P{UeA+}IQk0n_B{BtF`F2-yd@p#Bo;t{lakVv!{|cU`Pce7_J!rMl zn53h>g&v2Yc`feL<7WytWke;YEjG^DrCUJ8QuchlQw@Z%k~J8E5PNMvSCmG}nDNqg z%t;vOMm&ediS7AhqubcI4y?!u1#9T!z)1-SOoQsyiJk=k%U@y$Gr#9D6JzB@U$fx9 zW6;wRG3Gsd@<KT@mipN`Q!VFm_U)&{JyPT}99))pW;2`4$i_LyjM-+NR#OEGq{dK( z<fGdwGUs;O=^Vaie-NKX;ZsQS7<C~#Gm9OX#T={f?)lifw#=sxiHT>?96;yN`Vy_= zeMQecML?gnH0$lkI@%!LhtLI|K=UW@{@-A<T=usq`&)-u9_L?1&5b^9W!zo7_Miu? z(LKTZMEX9-p;bZ`r}$KTx(j-U>#f2v_hOd20z7yoy(32U?*dkt%h<-`bD5i&s>AS$ z*u>`v<{}~1GA?Bo<w`3Atm^Re*J<#V=qra;RPr_BK4z7&;lJ#3zjFL5i+cy+@QDc3 zx$}O;T*khr-$koOn8hjbJRRVz^Pz4t_U;txJA;hXL%X$LzdJywcxH#_!yKBi0{1b4 zb+}7ee77z?YEE--by&AmU80~YsN557zW^I&tYi;sn2v8Y5&84EWQ$m7d9E?HP@L?u zHo%HXtJaT@&$<-s@EB3Mhe0FOb+2a6C!oEIYG@~{7u^q^>$5H5YM(*jbM4%-UF?J2 z)me7qAe^P2X(qcpbMk&Qnc;E1yBR7QEt|_Y#}fYb*>ZuRj1gr}QDEiFajIh5BfaOL z*)HSrUhrK*R%>jg2CKJv+-LEa`!E*Wopl{&USBiY$;kKuW@#Q{7x!6)#tB>}t}GAz zT5)AZMiejmbRcWBtTHw~qdXhUGsgO1LQOu^?K?i*#nnEs?i^-pwa~42P(Jm;QA)x| zW}u9FyE6^g536sDkyw9XY+^eU@)?@OQwO83m9lsOjy|n=$LAqg<6*?Ziq+{@sJDo1 zK87ds4x?C)yAf{P!Cb8QHDj*jil->b0p`W@+iJjF#gSfdx1QO4G>a9OYD4XBE52JA z4JMX5$X=PL?TYoflZfA6;e%_KpWi%(9T<exyM@orW2Me(HFy1vReg^<`%E=sPge1k z0-5YevYXG&nl<Xd?ui+ifEbQ47cGvJrk`RTUrV_31GsZ4GhD@M0sAzE9q>GePfPQO zFAR?KIKH}FDXR;8Mb3lZik{G{IcsUjnzLE6Hpl1InlY`;zkM2!&qSIDUrcAVfwsgh zrI011xDI31;Jek4BBL6j{beBMkI5Flo215U=uECQ?(aFeeQ=fd*Aqq=T;BuA{00l% zm$?|<^C@n{7}I?o3V-<2rgPzla@e0Z&A2jgLSR|_>}*!$m3i#rade_}eAd30WjDKb zDR&rz&QNQMl#MLPYd(F&yoWX1Mtpq#c*1-YSdEyj3)Jt+9yVtDu*Z9no(pUnPs1xZ zXK5wYxA6VvXbdA+yP;t-c;ftovU(zKR*+U><T9+q%%r$7lNnhTGZk9B$IB;P&Vxtu z;i;;8s{M>w1n21UheTKh*;_O8W~F`lWjv8-3i9?I{O}Dt;JJs5i93Bx&@|pN_Mt!P zQ^}gcTSi{aLBrH$M%so}toB@9o#3{r?60+%dVSm3HJ^YrgHb)5P?8x{VfLOC(_U2N zcT+UYAbi+6k?6tfTtvp=$)v_UM7WV{ZpAJ)<MRw6;)|fumvDwP_<PwAYm%#S_fAmF zx~ptv7SDk8=|x7qJk6$+^n{uyeFJ};f{Tp5R)M<K%2+jNjMB=m9>`#S^xvR_o8x&| z=J@@_8P;-;)k!6NBcI8Y2Yq*7dCfbC1dKlH=ToawU59&NW_CZjyAG|e9I0E)_k7~d zO4gxfHaEPAUD6kGkM+kI!fBqwE`fw-Ki487A{Mhx;xeB?<*C?CyxOuS#*U2Wir0-O zWU_9br(-1RZEXKXaGA*4vkJ>tfmOvmL8vif^+eAYBMKjTAUY_Axm#CkR&*u2vH<ST z@*IQa`Y1korw(f?WDG65RjuuqNt>jF5$i-xtwwY1PzPFQ$M!ORkyKRAm?aDCAb-?O z++;McDYI|Lbyj6}VPDT-M+PI+W)-YMZ4F)2Y(Ft4E5qeg{r=D3<uSY_@Xp?}vTn%Y z<y<*{ak80#Ps*Fcx2Goi@ENg{_o2%Kw9XqzGpc_kpeetGb60{Bw1@J;03sI`G9#a3 zYJ}RTy}ClbyB(DCnVVw0mdN}`_+u@1+5yiM<Gb!*DdbnQ;29r1PNO~A4WF}B3?4d- zX7M>ro^7@kN8MD7mwseJ?qfv7>U^=wVRpsNZEA#S%)(tTK6M1H*7vRqt$oQi>P=(W zdJXwVzo%snuv>@uS7=ou3;yhdV{5RQCfw25pG<atcS5*pq4XZEaNm_A>kjmtoQEU% z)a2^SQNO4yBWT?{;ibJ4pXi$?0oMHM<IGN4LBwp0{s~6W_cNdOC7R6rm<;`Av#-`x z>1X@ow9U{op4%<Y6d@mNpHa+HXz)hRt{3~%o4qz}Cnl^3_1eSDmmtyBS6byifC$o6 z@RPN4Mkz$E`ca-HFgwwd|7W6We0H12#k%}XTqh3>#pYazeYK0S^-|V;tYr2FS*1_# zb1ZRkcm~!%$2nH(Cw&gx#r$^vJvZYMU9HphRCypMpY5qvvn=s+oK#uIPF3XlMt^(p z@>#G(=Zur7#j5j}Sh+pYQVZTw6U|K;Wp=Xb_B>Kvn=-<M@aaXYqcii|$33P(=}!}G za|H$5=@5J2(-r42Cv)DO-7ycUpK3J9noad<F%Zd0_VG((X$9Po4|jMbL)2g_C6ARG zQ@7T(E%*He$YvnB5YOao!2QefZLLuiW^IL91HNgL*ptWB%9etM^l!|8$<^+W6=GT< zSFCm{3$4|vJ~!JZGe)M?=(1;wJ>8)t^_iQs)7VE?-8R0N$GB&Zp@UqlA1jLVRF-G6 z^@KcIP>~%r>Mn-x31`N}$B@N;5e+dt?YO?LRj^H1$p$E{?)f(e>vOd9-lPvZ!(-<& zhxW|IN|a3YCzrYEom6H8b|A8LMZ~xa%@ij{jDYQ7el-|bOj|8Uq7e$8#H&ZOl^wCZ zBjnbztk!3BfVzFr<IY(b^h}6W<|p{T7~phvbQb^Gg6xW+tbFJQbuLD)nw2ouD*n{I zyBF4z_>|Z4n7yksu3L+7PqHuK3K5r;MQSK@bvyW~D<kS7H0Qgu`LrZ^W(-sMdP2cH zItktNAkDal1I#bEll#~kt1XS)?Sf~mh#ZK#-Na8fzM*I3b7*}Q<n-hR`K-KUtW4i= zCTsJQ=~*JH&bk{^w??H*icGC!-BwI$Ju7j?`iyP|6XODUqFcG6xjQ|+W6(2JXbh?t zE0*(Ih1{6&Gk=<!sgQKNnf?`wzm74E!4qO&pC4!(%Xq)puA-NDsx!>Nkxs&I<_N_C zYq{1FVl|;(e~^dx-CSXDX1|VgEkO#6-WqdNFM6ugXP^e!hze#Ax_MmB=XGPp>N5{x zXO)xmlu2Hq(K93YYUL8FNNE#c7~?RLV=g6rjE3*$KAy|p$!?us&Uyvr0QEPu0(%lS ziuSC13_st9zuMX}?OGbqvFP0IM|NHtCU)`!NZ=N$*L==n%uTB6Tk9*-N|IZKIq8ju zb+cN)DuK@Ia7%bkOIm|(SUGY!A$emj`gJ}RJE}y@N}l2+Rx!?3f?ZL6ALl*u4QfqK z2bgK73;%aVPa1F0^2*6t<Cu$2RXy|b`h99)E~~ZHZZ*4MWPTR<d^NmeeAir0ZKTos zaGdNnM^&2pmf+u2`79zB+IFi0tc};N$cGoy#b#TiiWTf}SLMz~w3Oe-Yd1DDV($fM z4J(i!<DEzNp5BVN))MfL=kh+ox{l|!wXeId***)q1uJaGZ!wzqu_jcHxJDVYlB?Rm zc)PiucHXCc8Z|QFy_`{$DD!2dptfC1hV!}%{ZWtE8cny7!SgtkpkW<2C!g!46P5JI zuj9~0E8w~caDg2edZRnEY?ax0^Ge2vtlBN$zE=3jcVZ~{Q*Q8?n6;UE6MjUyKDW~f z34P&xTvMJq=D-0yad;?qXph8aF^ag!+R}c^)Ke#&S-DTsJj`6xJxf@Tl~H0EElqv? zFDDuS^2wlPB&?I(1&2!&HG-!LBGZ}8Xliv&dPKIsiVdHDyEf@;@lwcAKJs8JPz<#P zimKH;3GdlO&nc~B9_v82)7Y`8N!x|)H$SnS(R?EH4^Y!nHS3tmQLLmj$3EBmM4FR2 z*XIF?*rl4eTkDwg5{wP0q0|CutW4H;miZXnvjWC-_-s_4m9DMzY;1YfF1>5>msr-^ zfi)lIBh-$@c$&cpK4IRIE6tdVy3R8n`pE}ayY-0X!7pORFJMosWEH!LQ9ZG*&!lEG z3vW!*cWS_&?f7nYcB?0UtI@@aX4&-w*YYhhO=8|k%&CAi6j{pMNhcT^_eX>#h0H8S z5%rn*g*rcTe-`U9w-mCaUNe{NNmbELtW%D(!o`<p$S7nrW}C|{7$>rVK`i?{R+lFn zfEqq!mYxy!Nzclq`Bc|w1kvbW_e8DEtSl=@m&hrDnTXZRT&jn)bDoDa7tWJg_$kKc z?t!^~G3{XNhG*5RTk^b832c*3AQq+P@lyMm1rz<8M*B*4yKGrE+K9c<wuevCk}<mR z>cCz$=M%F)X6vfM1+}1-y+4dQY0>SO<9S>??y7ty0ya~m2WMpHENeNyT~{SUxr{k@ z+QRu+A!PQg3E#`$M9WgBWxPip+8D5PTxR;LPBeR45^9?@FP(VL9J*TgIOB^DjjJ2! zGS6-WxG{S9!BfyBkZt1`vr@)s8*?s98BhI{_HcP))+JUchGvT_e?A-=r#Q?EnWHji zw3<5{U{<15s}RiCcs5zjcr)KO7EufCZi<X~o*^<~X5Os<^300)KrNmgo7E!Dy%>Cu z4MmKoiCCK;MS3OG_)gT?7za@|TgfKR6hcKan}@izI@ftxz*uZcC~75wPvF)5dh*#P zKwEz#x0Hu|dS>Qn?KNY?hS3kBagCUj6=vcR5s%W5!B}R3jpta&WWC5vM)Pd7Rodbo zwTk;=?#XD1n7IqQ6DKq5XCn{uD{-3|Q8_BAIyE|PTyHb{?J0wN<|g{^zP`j9B^cHC zyFRH_M1Ofdw6~sZ9<Mp<falb#U^dQV_SF7Ddh9(|RkdVA?4?kZPeiDmz;U;wgc!6U zbN4yZ+SoYps(&Bn=aq=4U{UXv!X}D2H^OBrp@`3dF5teotizd$jkV%t&s~+@Qz!VG zbgf!YUw_yAI{+n0z)SizX6@9K+I_Fz&j{+Do&4WZ;v!Pt4U}ab#@c>A)%!UJor<#) z)@PXOv|eE`{Hi59!n>ZaugDJUWKJRmZB}?*b)kj0u_IJ5Po-C7jKj!++-7dAMZ%Q& z)$O3J^-pqzu_JTjt+4mK(dSmy_DHnVUdkOtp<2KVp3hd>cZ9dqm1;J5uQc@5CKcyj z)-8CN#H>#F6x%TeF9tHJAtv9)x<oy4qSkLc^x2!%?{Cj`TDK?NwVGzn>?LK@?GCPv zicsSL+3cth$V`6gLAvMaiyD09nvG8zK{Li`ZHy6TQJ1@8w8B1Ao)_K8Jgik)gbr{o z3!t;Q&=|M)z%%vpu>uSEzdon7FRYIBWyYje!AYJI)AM!)`n~RlkybOWt<e>p0kP&d zD()i+sb6fxwpCX?Yh7$>1W8`fr#4Pp8%e4C^KWshy4~6~k#uQRY38dwdytW0M0&+q zm>*cp24*TIaF>d+&Ro{Gkh$()2gHE#t8}u`PYqEL-i<hvF%2WO#%k@lypugyoIJC| z?2p%LIV<y>u5e6$(AQ<is2%%^DR<;bZBQljg}uYJ^ZkSTWu3`fEa->iV%{NMF`K#Q zznWoHA5=|RO%Fq)tW6hj9OHg-@fAM+XTHO=)_u)q)B><%4esK}EqSvWw$mPb+PXGL z4%$F1D|{n=DM#%`s@z-aKaOzk%}~jD6QkuD_`CqFRfBg#6Pvqfixi2c!UC5`)G~u& z{hH^9^BLn9vz4bp<EV#?;Ta+Gg!*zQ7k0`WR;PAMyl^g~cSVPF;@>$?**v7(4^Je? z-v^iJL8}X`UG;hQ!3BB&R`ZraB8_MEC5}3fwb#VrMRaX@qPHHsSzodCDRy2YGdKC% z_TQO=u3g3V3fM!nMk{7=KCiCOP8(`wHJ8sfF$Yg3ijVE6XEm47YsPXtV|rH68nO!9 z-+HW$&`w#b1}CXGMb-9*vJ#^PbToo5HLW=^Vy><Al&iMZ(|KYPF={5)n+KI|jE_cr zof1+SF1IezbN@3EGF!?#tWvaESx-znV}42;Ba&~#E1MC`37PHDJGGKw9e0<HwPNDQ zkc9B}oo8)k(jLC*p72u(=wy7>2tXDTv)hPxM~}>Nh!Kgll5sossWx=9+CqxfMW(GK zHCte8LF^$XT5Y6W`Id~&XGEGj)gP5kajs0wuIC>0E_#FF1bZ5)-K-2e$^6B%?vdPW z?=3Nih@&zy)z7gqT<z03Nwe}SX4C!}85Kp>W;Gqq?0wKo7c%FLe79Mmn%=Ib1ar8; z97IX{a^nG7sX#ns*|`RcC`t;<E{+xT*Gc1hRzSR}{~JA0v{vRK#p%Y*-7Qgod!f|J z>-KYr{IYr^DpA)VM;nulHM*fTF>|vP+G`=q)vRM~_7mF+Cy1-{In1Q{EK4cwUYBBa z(UIT;pLkN;thH#|>l`=Y;o4>+T>IELtMZ+5L^;JsdN{7ict{!6V$?#;6z3EnuD~QB zUVV4#-|QDvJaLZ}$+Ll0JY+(-K)_;ayA~U}(I2P<*M`hzvqSc_v3fWsX?wA|naqPp zk83AtKu`Cp?$3I}Xt!uHBFf?E87D1ZbnQl2W}*kI<rX6v*Vl{Kg<kj($(n|SP_pDj z;}2F*xH_ZNMwXqaXPnIUT4$p7s7GW~NO`Db#6IdOtYQ^S84oea?a5#>P5K-DHs;Br zet7B6+qd=@)GdHkdhMR*>J28b@0BNpJbPkPN}VJkI+pGz59wVUW?q}o<bfcgs>OV_ zn7bBNTMZ&I6Zh)5xq7{Kt%6w&PlAZ=L=K{xq6mekMSB_5Nl|mxlKB{qD~_hq=NH}S z?`h4o-s%}~o)W5MvBJizgmLViXa_rFSmi9I8YR-|NA;2wH+FM~?4;<>mvhr&k;C-) z^qInw757$V^y*3Kj6juy8sb?`J=nKGoTElm%UKJlCexBwX>YZs$jy3TQLVT+D$xRI zi8G9fM7_MHU5&HJEn@yWemo&y&50*RjDZ+EG!mkf*vM}964Cjdm63sl#Z8`ww9|}r z_nu`~nK({aHCtpwll!b*Gp;XhRfMzjbF2|Fo@4Grxe_ZFKXd-BUEf;E?8?;UqGqp* z>g-z3!R((sV4?=b9<xR|%&Bxmj`SJSj3Nnbv{7^Ih?+ODhSof2>C|{pxg_GVA) zqpB#X&5OKtakkM@&kXAk8UK@FdHl{}w&7hFPY`36=g{J5OAkU_`Pynw>twC5-U!9k z^CKel)JsGctb3J@#RB?yo*XtyVZ0zb2%~xC2(`?{fQ^Xh-|O?J2OP(!t{F)AOa!Tx z3Lmx_6tu3wDjj2R`t{OZUa@~&$W2+k-x%3#g@!jD)BwtPT|HK0w8h=9GE}Zq0+eYH zbbg{qG1ebAK)q=<DdpBG2%|`PPwsDUzkYgPe=&5_>KR9NzWO9~LNZt6Icg(GVGE?T z8C5AIN>Q6h4P%3`HfsdT6&QgsI=dNKipTu1^PJ~dj0ac&YHz2|fqIN~MA5qmU(OhZ zwP;q{i}erjiM3LCHJ;jw7_ZjM)kpN>0JAot9$7{^+zx~<&4M&ytya(~eMYY2#j{)| zU+GJzjjj9J$KB$bk~IZJlC&OTdXe%)AaybOU@Bw!CA)9DwmN&EEScfat9Sf}-nzq{ z^f1TdXx2YQ&l#iF($H9_@h9U3(Hlk{vO}Jo(u|tOf6*IMZDn*x92n>zxL3Vw6iN$a z%*J?vCkKpAM>b7uVJ-g}^hMMf=wm7$;j25Fh>*m2r^rXeNhh(AR!hzAE3BZI6t%=L z?iIeKUH9S)khP!gUGyY3k70MW$WUmd<VW|}IIrth_mqc9dV8%wRMu`q98U~sbgVWb z$nRy7JV}A_$c>U?L^gU0MaSl&jA?a+>lXE$MN*VYqa0?}<iSnc-}lAV(m*s|eBbII z<NIoQC9f8{qFl=@ddgNx1v+s&?XmJNt+IL5<wp!G`iN|v@n9no`pn`gb(OW%#um(g zY4anxBqH)mq>&yivYj%NSmP=pdH<!<T8Sc!mAJ5zab`2JOwM09(sF9&HzXg;E-f1v zMQkLx6g?V8?u4dLN2rVSj@34Hw-DPJ5iq-@O;!_lvQqCbvT5oo_g3rcX&x(%+a{e= zmv!w;8bjPDM~Vc+J4RsCjp`2dv0dP;jxjqUo)+(liHy68s@-*?AQ4{`=cteDniS{M zq^CI|qn~#0)G~?!#jws<DKt}KELJ;iRh~U1?Dw+}e{Ln5cZP3>3X1(K1;&qzuZp=m zxoB?%`Nn<)p_8qvl6&ou>X{Pru%F|>EQj9OaKEirX7nVJyO&{?j9(hvl2?tqg#Vzl zt0SD5cT{@>s<IQHk&39rvns$mtr*UTi&pOdzr}-Miz<w$-&v7Q)j$4-i_Gbr;a?Hk zH<O^OTGMPS(MpOASX*nL?G&2DZ0v(&p2-g5Y8kV1@_lW7jE&agFISbxXXZ*pUhbIK z)o7+VEKV;s=G)rwSeJgeI@hefTxrf|HI~>)rD;i%drsIBbGgjW`C7B4O&3iXqttf} zWMs{#Xh?hP{iTO-eQ9FfZta}$l`5>QGd$T0j#i4}ENVoUeAa@#Y(D#IZcoq0zRHd( zzlWBIS_yM+@>t}3<rEQ~G8*2n+^1}d1MOic>X6^e4H!F8tLxKwI#vy#S79#|y<saz zL=X+I^?He(5Y#4xCf9Pf9?vL?PsPv135+tBxeDqUHPo)@b9-_yFG;?=V8kzWXw*&^ z5!R!KN;Z+DIrJ@Q=d4uJW82AlMmc7IkgP@4MsMI<t&es}$_Ms|yjn!rV%$PTGCqD3 ze@)#d4diq&o!zw?rP<0$Mud#?n*p%ypd4JOKCr`wJRl-Fkt&t#r=<UHZHnA3&COVe z3Z!bC#Ji$OpPQkl<q7<@=rt{dH7jCKJA@oULm9=88$FZV3cKwYA@y}mvgqdEtYlK} zDTAVYqakwQF-DL>^3XqW(Jm-w*G123=z$w$Fdv{?dTP%8vqmedR`7(i{pHv3`x|Ow zR;F1hJE9FE<D2+w3Ho^xoEN!rtC`*HsCV21J=AwvB|nKuk*aAP`f^r-d75nxv{&}c z#g##GTYF`HWD%Mg(M-Q*V~w5aLk0$vchv}X%d*>!+-a{L&(T_S<H@S%wqoC<mV9DN z$VveHZZoD<^sBv%bw`DtQEV#{>>XePRITLBiI?^HJf~w{Uh^jQUJlPjo)je-F>~f- zLZqv|jr_-11a~0pkzBJ2iW`3_%b04n(0JN%dvJ<#w38WpR+>9ou^iP?a*?`L-E2*P zG_#gV`)pJ|i4Qbrq*q*NJ}j4al}T;6HdpOqMoFGAyHkY0!Xwc$x8tA`t<5*|1k9b3 zW}aT@S@xiZNZGyB3Oh%mLDoiy&dtOcGqFy{m)?(=VC#%pApufQs~V9l<4MM-8u6Ju zvh*=dK|K+Kc))rtBidFW##w*QREoaUu0{bptE@MpHkUrm!k!dScWoX^yQ-d#ETp#6 zXugO}Z&7LSOq3C|JpOHEe?w;FjEvoSzErQr98&@MM6K(2V!J<W;Ya<eF153*XR5WQ zO00-P^e5&K^;tu!KGNdLFV+sNL=NmeY#wqWpNq3Zi6Rv}TXnGrz{rrO$C}9I%q&h} zxW7iW&3EqMZ|S3K>|^{mNpIHLI##Q}x)bv|ABm8^^-!Ff-f7@DQC~y?L}+?J#vs&d zm6N>KtGRXZjIHLj(!-h6L!UL~-(suC+m?mOcFyxDe)W0Je3M$pYGQjiX?;CM?)gzO zkVcsTT}ABMtg(FN_!&f6%*~p;wxU_gZA8j?0k0KX=~Jp198<JycE{X~XOp5^NKrQ} zBbl4|)V;QfFd~z3x6&6GNPS*o`R<V(b9DXC*ET;VM@HmX&)t4|yAplfCD(5}MPEu@ zQ2QGzG;*h>ZLOr*+!OfH!s-;`abBsPQHM3kamHSaJWJV*KSz!97SshI87-*V$gFS{ z+RZu-dyI%X?VBb?D_>R&gkNA}*yx<-T`VoiSKrm=>gIf=KWSFouJU@8>eoYXkY|+i z(mgj8xpXOF9Mt@|CnA(WDQ5=FY?3Ho4_BJu^~|z8?~P)GG>fUto?89lIhd2FUS7U7 zJ|*5c&bxM>oyzr|*EX_fyiOk1r?3~ey@s@8d!Vm%2%dfR+<Hr>&<G02nQ_)4Vl|E+ zq745?kHILpUY-5o)WY_R4?m!7Lh#Xj)jd$+j34WN7)LUSW(?4t{n2g2JgPA?b?Yf| zN$Nwbj9Jo}%&Jw|nfm-~+|ct}#%7Kq*XG5I2wQ<E4labU#??GkumH>J`CI8~L`x6K z+9Lg3D+)aedzgLJw(3Wkt%@ogHN4#nt$y+Bjk%iW$7>Wt|4|-L^XcCjH8g8uG(@eX z-4Jc486tjIhHn~I7u`j4Za1T7hxAVa&C82wQZ<OYZy!r(CYM?DVVp7MV0=~#8or8B zZXQW0XvfX$%B#`&!ThE?E~=NRdVFeiJq&TbddB!gU|Hwwzl|2lmB!$$&MlSXPP}E* zPOYk6WW3tbL)JzbMKXgQu~%bK+7xw|ceK{o8AsQQU2wLM%lwq<j-LAF!mVIYr+Zq? zSe`K@BhaE2EAc(S=c$*qe9O3#Ho=U(=N&x-u@vOB3HoZw)GKOpvnSSc`JLrl=M(4T z!J29A@`N29B4TJiM9-0!6*m8AY+laMtJ804h>kFN?b&~QPUAA#bNk&`UETr98+{AJ zt;)1}?B4jCh=!~~{SmPXy(Ldi=nt65kjwpsxKl(>BXPa8$@aW7t}1sLIW|`=5~#wp zA~tPU_+##w9ShEKTF^VjDN*@U`y}qLeoH<w;usNlyNE@dMC5UtwX4><x8Htr%kWC$ zD0=N`Su?ePGL2AsighW}^|ZZLdS1a3vPzl#5$sK_b&P1UUfVu2&qn4N+17|STkj<j z%jd3+XzzlkIuk7^2lB7lO|Qgx9ft}=JljEeHBakA4|&G=A^BDh*i%<=dOqrT)xHsB z(`%HABEzg_W$xX0l2=5vrPkQ}``_v#JsI;q#>ee((lNye%@el8>#%#C9StI46y0*v z1CirWgGS}CGNu2o-Z9!D_SDZb(qZ&i2@L!jeM;;eV22W=O3zSKtkmj*8}IXUn;J+& zrQfIogiQLEUaRL(b}@p{Z%_a0`)XC>a?!03Yb7wSmDTm?Ir+u>h#q~BOa&${1r_YN z;VCU`fEMC^V-N18Jlzy(82`7rS^Z~(*4lJ)IX(H^5n72*+y(3H^}LK~SUo4E2)u55 z)eMSSvB)DfJ|SAR^5ZD)8+8>eilpttYjoVouYJ(O(-9FR)0b5z_+zb=)HYtJR9dMQ zwWww|J)`DRmb9BvHsalSZu%-lR6T)XE+TBXF>)i+W@YSol?z=XuP356%4Ehzq^Sk6 z7Dnz2k2C7h;%Qt_scK$NUrDr~*Xvp%E@MBD=yf9UQH#4fdJpDBL(^)@96{?8F(xZ( z!fH21TI{53MYkTAC`kS8UYQ5ghc{Dh)qM0W(JM3#WOl_n71@5Vj-z@_)Y2NQ*8|gs z^BFt#wR0qOd1P|6g3?pFss-1INPFd8Ut7Gb|7U%K^$kkealS9lT7PH-p7mSCskB4J zDI-FlS0S3Pf;ckLX4%A=>I(Cv;!sgpQT@2_!q5d#!KvMi+CTX*Vys32Jtb%i(~2)E zfJArZ<;8WPI`fO>hUFwPh3XDz8hJx)uG-5;UU)<LXU1Cf1+3pOu4aERvmItZloNHZ zcv&e|0zHwYrHIPYz*5#HTT5yEx0xcls92{J(a}I5&cRron#Kr~9HqysB{2uAC6C;s zQWSDwep<RHQ)(jlyU0(o{xRrluF;BRkwYFd(r1$ndK}7<=RK`p5c3#?ifUbJtVLGQ zaX~9!9ig29qastBpr5TK30ai-T4|$idirL9%--pfyKkP%wI*A?$m$7EqIfP&qRIcp zC)8oaHng$k)wO48aOn}AV$|E4V>81a@q8mAt<dUr5!c^#7RD$e(&BuKE|?RwHbyOK zBtUP=>|`-MaYptRFb^!2l?Sx)VmoV-d_qE5bc1^y7FsS8Wg7bvSw>}ecnH>3NJ(qF zqT0)E7v<@c3^`vuHv%pPo5fT6iL3lP;-vO`lq=!{omn7lw)rSeVQMV{U#fqlh>;7c zZhR_=p0M~qnH3p{TGcc~_+6{49@e)kWFJMhdYKW=w6mezuf$ODl+j05Wz<$()`(Yh zc=w5;=KhSksLP`M#VDfQgcS(JAFb9gj;%MZ|0A`HOL=-zt~bLUwXH@T%(tp1%#qkF zQ!h>3V2!;#r&$HDlzZvl(*7t?AeXr3#xM0sw3S9u{GR*m%cz9jp0;>>vI5(os#r}l zZ%)B|P--IE6i<0E2c?b_tr)5BM2G&YGU~d`1*w5N-52r|d#2uu*@SJd)>}=lmCze9 zN~gCV>WY|zC|BKWwq46nKHWj-H-;UajQU=^WW|i<4eX}p_oTls5k=HUn9(u2scwsB zc53mpQcAEnRqdPSA&cT$`Wi~3Plt0wf#70SBBmalNBq?IfV|<ij3^l`)sOa7bk<Qz zDo+{V3QZr8C#!Aj!=}EK3huxCa`nEAG};5s@4Es~uDcy)gzeg49yFp^YTh`@8K=F> z?wGGr?wqyU9sQWZBt`;?ETJ_F#yGXbe#@*v%qRM%sPnCd6CbG!teDfY@QiqL+H+mj z8(6DjU5%(l>s@3i<VACNT4triQ={^Vr=^S&>GK@JyOIXhhq^=24Z*#R4&BaC&t1;c z(kM^zwTLfr4x$5}32Y68kqh(4dsuUvK~Mtps6|9}deTqUJ8+hjxz281MK$T-QKi}J zoN*@gyY|TlqW9BA{V%r~i!~>)o4wVajy$O~O6EAlb0R3ml5e6`-f<&4;5hm!R$pl^ z%nyYXG8d`6FiK>kM6{_ME0U0?P1a(%H-0D1I*Ca`6Y3o(4X(#~dz#&E)!=0nveYwr z5#1iOSdOW#mkZT->fz|?r=P0a$w@{B<UuQ{L@e4;Gho#j+j)v}wbW_|BQW~*VlpwD z{ou?dtAo^*k%?0(?Lj1utJCz$<a2Y-(#Ke*`bcYT<-YMYxlZ)qNLny`gUI(7WAv)1 zMT@+FGgrE`p-O(77?9KCqj<R^qDUhWu?7)`RaIx1g@5S<MGQh8Mf!!da?kxw{_rIt hi{C}>dab)3pZnSW`=8&BSJ8Of@c;X-=-ct;{{R_Sf^Gl+ diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Right44100.wav b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Right44100.wav deleted file mode 100644 index 1366b7485999a441595c6f61fb214222f8c254da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661578 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�JP&O90hrw54kmJF~WL11S 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 -tSt%1CSYBENH4EQkt;hpZ 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�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 HdH??cDn32A diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Stereo44100.wav b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/testdata/Stereo44100.wav deleted file mode 100644 index 3e158689ea58e1c3b6837aebf25acee5c64f5871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323078 zcmb^4dGuG)8~^=}1`X0Y&m$?6l1L#DnT1RtnTH~hDO5rz^Gx3qLdMLLS(yrHp67W^ zgi`n872WH%?zQgwue-ILoqhIrUDv+OKKtym&->H4Q^$^nHLqB3X8SHjU)rO0-LeG* z1-lg#Dmd!(f`YQ63l$V8C|htsr_)ZaF22)A9Z&9bTF28%3!iXdpG#XEwEqFE_CKI` zi-L<U?0w;%%_@rj|NggQM?pdO|MTB&D*Jz<(0^(FXM4$;f4gMab^JH>-?|Dr2`T^o zWLNp^^w`BV;jQ@lzhlmmmVf_e`IP<VzkGi>{`G&5^VE@lyY$&5e`HLZsXwHS<SB*{ zD1|-#3m0`vxyWAxyJJ_r;=)PaC5K=^;?kpKkUCN>a{Pvk*n~f@tKA$U_b&N!OnOLs z<lLp>uJc{CQ1$=a|H-#2J#9vZa)<{;rpO&xqeJ9P{>T+uM8CwRoy6^`KWV$<OZ+a9 z9vf8nkLa26l8F8CZ<ih^pZ3yz?2<B7PzkY7WJ~*LEAs!2ElBy0^Vlu++l<&Ha;CnJ za*1D!g_!-{ah+rGMdw|4bBvz5`f``dyJU#0yZR>eM()VAt9;5OKKiGgJ&~)lGNMzC z(JA?pcUS$%8=cl-71m%q5*M2${(HQGuMi(;s>~U<3}<6s#16^#4dx;3)I%fGM2-K> z6ITuC|JXbI65Y~vY_tTiXY`KzDOU&e(GV${evI6)UwkEP$EJ}vx<$|ETooD3qI>F# z?DH`fD-b;sm%fa=ktc1Y{?xmx?-mHpK+5fsEk2UE(@uOR{gM9J<qIhv`65r!@-J<~ zA4B9xA0#dMr>zZ$Po-@1OM3E!)D@rE)kb7b{tz7!pT19fA-<5hVwdz`jv@UUe@tA; zM)$N+9_f=@n`tX@rM~z;@`SXXf6*iP;$zVz_DY+{vrDFg6PLO}%0#B<85z>gvF9{Q z#!M{6uKq~gUFFlCku7cIU#`XUbx1gQ(?)!0*LD7Xwi`Vn*D@@^a>QPdJ3bO0OTR~_ zUA9i!DHok{O#YOQpQi48&<gt@evtl3p4fPoU+wD4)D^j6*Vr>Uu0(7QpN~wbJ96b1 z5<dgek@(mx<x*#C8$U~YY!?4d{k72)2jf_riqml-j>Ms8^WX7s$1b=Uy>P{U=P7p> zqF3q*x%P729^G&Y2H`H;fUZd0xqjkXk$WB@bFPziNc~Ua8%)E`7=!0<6V5_M9EZy> z6thvCBc6&Ia5wtnN}Pz6sER_^An!8F$7FnsQMeDO?<iy(iVY{>13ZFLuxWciK_4vr zhaR|NTS38ut!#zae-{+Ij+gKa3X3}mU2zbmiaQmb{Z&xV7%%@>P;ddR!$J%ecf9mM z@(xEWb$3Hgbj9ho1dm_|&es0#c!@kGkS+atF}Y{p1bTjneGU9iqZG%w1FO-I13ro= zD9+JZp&K5<LLB7+{1DAJ@AD{LyrAG54E&Fa9a~_nv}bW1+Tl3#!3Wq~dS~4EAE!J1 zE&fK#Q};3WSX;;8A98$+XK))XLOc9U*1@QN2k7u8eNMs4^vgJU7kvwm{#efr*WovI z>4AmpcQ)3t=LmF1EzDr!r*JAZvH8tdzlCq3FvkAD&oC16aFDpW@FBj%=Xf2D;3o9J z2o$L27Hr2|>MpIVM^Tgvm*E#2ORitgnVest1-aitdpb-&XVuI`Pdes?-4Bb=hW-y> z1!9-MScoIpZa7w=0(&+^YaEEWD2_rXjYc>WN23FpV3Tss;t<SI-<>!ZTeb5G-owK< z2W9aYSuRBh3?t)#h`bNuc*wHzp8gD7`l1Ue<6Ao3hSu0b?>BH8dg8|a!s)y7&=Gqh z{WuyoB0hgJp2Zl%_p8g({=fVU9e2Ze@f%TGxD6h}4)oCO`<RFyF#*%C0IN`vjK||) zj6=r%jM>-YHT;AXC_~>iI1}lk5!ivt+2aj-{2$*rhDXsEr{GB}$6wftx{TEu&*6Nm z7B>VP@wGZ9YVSjGRKsqVM9%&2D1C<D9~|Sn8h#Rf7hUiLKO4pe=WTXB*vL)>yQ|h0 z6pY7L&L8^Sb;UnFV5i~e%}3AYzr%hr#>g{fHCwM@vo-9m?78w+k$<Uri)(8&Ue(UG z%C*wYWy;ofyilHX;%<<p=uTfP&98>?rzQ0J05cIEZX)g~X)BEd50zBs9<Cc~L`^r= zg^q==pR~5vN4TQ+?&y!B_avJEU=I%kU!YJqzKz3hh4Z_mT`FG{<-SsWJ}wphUfe=y zzsmEqy!W7o@MLilrClUn8ROJju8rF<3+IyYN9-rQ4LS>VA^V^Dsjz-}O5Y4*lNqrI z4iLT>yWth~ox~<f*k?C(YR;CE*ts{#=%3;_$H~T-$8am&aK4YU`!~^LBY8LQB@_{U z6<>?rLwX_kuEi@Ts@%1B6&b%4V_)rc!;$#I`Fu1L{suRY=K%dxifn)2O?_K}tWA*n z%ojL<E|bug9=SHE=+k#mkIn<I1Shk>uee#C9<5KCvP(%edmZaB3ElCN_^vn=<1tFy z6n1P-!q~#*b@fdr{2_cb=7_%vZIX@;QCWOb%ojczzv_!K@w0l4#0qsT#TpF94(&9@ zzT}!m#xCTYMUOG`se<q5_B@`(J9q_ku#GJqXOk}M)1953Vy~@i_X7%q+o2_XbN(Uj z!I7A$A8x`KxB<`Ob$pM#rKfL7D0c)NLSuDL#j)DSeSZ$xYPUaL!*+a1mY?-SeCuH{ z7b5?87=mutEbe3ci3gn5CE~qMZNYu?Ekf_cXo<&>appkw_!t|p7yI0r{=j8eAntLD z#OD}=*HBklVK$wDdThNra&3&j9w;xpt$cr~zlLK?yeV86W3`*HFJs^$GJT3l!jb1q zG{B+a&W-GJc#JNO)3*pR#$Sm(I1mM>jni=gcCgL2|M7|AY50WA&O<j0#wh%NrqZUP zuW~<PGfvdj3>>Z9&Zv#TsE++m2W^mX_<YT09-8^%VHk~r$^P(vdVJ-W@qH<BkGxv? z+4A>ScB?jW|M?zwIA1OP33>itpA~G?ll?NL94lN`{4w%mj`t}a*bh5!0C`_f?ge>@ z@cS{Yfs1jJzF4mwLt?>A%A6qY={Qe#uzDiTYwEsIzGWzbeVzX%zAYKAQSNe-63)G6 znz{~>z6x`2G%nQU8RAcs{*ru8qpfgzaZRPYjOS1ZnP)yOy{0<%)&3839*rDpIe!#+ zCTS%-^PP)v5t2W?U0J?c$-aaRqg)f2PnB?7gwFbLinQO@;x73z&gMEEDlT)qi<K#k z%(3e^?;!qO>A6PkSNE4VA8$L~D*ke0?$8TYh?^qq5VG$_w;NF&b(~KV-(UJo@)biT zlyzQL{F&swQ=SXu{Sq&r2{J$EEA2{ou8}wQh9|KC&pIC<{(9+YZ#bSp`eUrPy%9S# z#_rhJj^h*f1$mbJ8+jJK4+kS-L2Nu8f8lCzhRcE{Fah@=&!go~Rr)^UxSM@0#dzH6 z{1ox&qaSd%{N2zLS*JM%>!im{v3UpN`s{)9*?Q!8mf3gS8?Iu50XPHk>A&bU7t>JK zd2bZwD-U1`F5x?ia29_Xh7a*Aw&6r$%>R(Fy*dBQc>kMlD;y~OB;|fq$CoH4JPfVH z-;cAAXPs-MwbN#v1LN;`R(cVc^WBR0>Wg&99H%#(GMCKtR0T6Bm9h8(e1y!g#^NqS z;RE<vNB(&)Uu}T8$g{vc;x?g=^jlB~{hhCrb|JR94@|~yXzTn&JciL&hnDhoMsqB6 z{wR({iT}9I@jhu^t9J%Do*`>tve&>I;d7Daj$!y4ne)9VZ806Y5Iy~|54)^GJvPcb z?JT^`PJ3Z*<oV+eX`iuU5q6(|ipHOLj_r|o(%;hZoN+(8h^r?3B`n8u<QcFSo|bk2 z4nxMFiSj>+o6#5jk^1`JBJ72+>TZj7$j}0l$Tt*E;eE`<-<X4Y(FnQc9EV@&m+P<v zGH+>(OYjIXhGiZ<o*lAg(-7ye%a`nvd&^d~%2+cA6EO^}@gO^X!rn94y%^5d2b=WY zd^8dM26?{Byt=f!C9#iiZ}FMuonr2`yZPTd^SH{wgT;L-e|c@@`W{1`Q!$t<e<*u~ zv_a}_gCXi@BJOHwuaZ5_@w3?GaCUmy@kr-+?#Mm%M(ink5qmU|wn3gw`rsezz}4uh z5AGA6=f^KlUwAXth#xIIi(WrC)<+9*HKdi2uYq=Ys5f)qZ)0Z^bAC2*-%p?Xh;wnD zwA0Blk#23sy@Cy^VHrL0JY0d^nJa&XgXC#|e!>@u|3{uYyANlBL(mteIKNW-70PBT zu88}Ehl;yT+Dq~rhV;S5&aaZzUVWdaH}|?GC?cFbzFwJ)@*RYSP|^7v;!l%jExA9U zXU3y3j`itMjvh^v&DziXsH@(L9Vd%#EIrRU*UJAt9FO;%XFM7tEzj@=A#<?ju@-sO zz8-n*?uzmlC;ma)id!%QA0qeoM$$9SPQO>jC~=W<h4$Yeb8oU-LZ(m2_7V;hzChd} zX_<dDl)og_$nQ|_zC5?kc^uu>^Q{_=@zo#2<=MHcvRN~&A@3l^Th(`__-olTzFFXS z4>DdpBJEju;=8%m9EG=?m&QnG@8US&ZsI@I{%!=w{3mmZy>O!N?qqyUdhRuOrs{yl zahCJ$;(IF>J-)$vs0L#1yvM#rhK6J*L9V;$@ElqT*A`b++7uk7u7j~N>^$>^a(Gd` z%o#i2NF0NXI1ZU}oQkAnjc?a_-fhC~U=#LN$4SWeFw6NNxK#Uhu;&W|{KvJM=dL}4 zGd_GLKF?iy$zPWok$pV6;bn0@DPIOJ%9F9CXTsw5BKr$$v4GA$vBhQde-*DF^T|;t z!;WKcH=CZs2Xp_t)^+<dGQOUQHaH7oagOV{mg{>RUUR+IH)#lY<|>a%#m|=KZrp&E zv4^-G_#cMj7SzQsX=RbNPDj?6PQY<!g4JZX7Zva<`I;l^0a<IBjH#H7MgN7fHqs6m zUwU9WowK$(nf`kr*WMyFxfXfuZiKezg7kIzIpb<kw)==3Ph|J)`k^RpFzz0Uu6PKu zv5)u*&;w_o8D@!3zP_I0?l)eKFm`V;cE5`f!o|crC+(h;Q-9V#e$`*4wE3LlXy@;W zFN54KUc)AFpGhA}#>eUL51r!ESp#|zhhnR^JSU}3zhZ;NY}T6%&tl)tF#?rvlDLdF zSx3DS?VX=3zQ6vsR{#BjBKq?d$D74v?o>^l2J+s*{#j4#gWa6xIq-OCKcYas9GfC- zXKwHqS$dIcq~x|Z2)Wivi|db1@Cvd<`=0n&`sWWiW*mA;KU{<(&=O6N`Qu7<cp7c7 zhP^Vk%J`Fc*GtGaJq?*-X05w7-V?uGo)fSeT44qL5r3$BS82CP+Q%|HfkyaL{LQ!$ z!$7T_?<Go*H*@%fs7l8?*PVpx@dj3+H2o`~C^k4>hOFb2bKVkNaT9LD$tZ*o(lZZ9 zo%PWRS^vwpJ{B)vFPtgvSZy~UPws)w(;?3rS*yI%d1LY4p{P9HIO@)wYXP|r<$juR z<URUlo;MCz!`NHgVaPr9c$|S-Fb*x0dlrk3_0cW(0RylvmdcZLhwZq`dF=iwS$dMC zuC|9`En+v9z|MQmX^wd}bs6T%dopq#YKJZADeibZ8i>!cO76$)l{p5V3FrR*kn}F{ z=2`An*T{VI7Vaf3^1d!l)|K;KtEzH&_xS;O;1J~bJ?o|WBhU1?ZzL__#NGHGenw?w zFTvYb3YYKBd0=<P+0xr!khZ33GyXbP`<Xju9+)+vVThm2Lhi5c;0vUU%q^03zC2^) ze*l?_Kag_b*GNB{-A>o%8?mSUALn=&a{Xl8;0k<*Bg9QYD|s$J7i69>TijhZ3MqF7 zW*}+ZaUU{vX6^oB<o(HO(le(YtX`t*?87G=7a;G*@~ry_PLntDjSxQ`DsGbWO1N9z zV{tvGQt*Me%cbXD-UpeFr0rUWe5<5Kmx`cvK~2Zg@E~5p6Ue$;eCaaGl&Kr4W4i`^ z!#uo%Bk&r*^IqTp+|4hlVjCZ6<TwD^k#}WJ;b>g$ypHrY-E;GPXXqdN3401>-riVR z);*tBZ`Rjd!A#)`#eE@dps{*)oR1;S&lBHEo}OgQx_{<gnNwx$r#9{p*9sZ`mf{z2 zS@Ztc`1+*5rk1fZ@79W7p!1BmS&RD#hY7F2aA~cLy^mrj@{Dz_xV+~XFJCeAS7*kX zJUi!o-pS(LLv?ws!b7+QtHhN;#+<CzQhn$9-M`sawL9m-<;CZHLq~ZoLgrvulQ>ZN zQSv=O-@}o)*ptXwM6RP57=euM86Pr^?~B~`M&MU*Crcl$p6=>98+QrsA?|Q#L-fsM zY}x`vh2K|ZlDa0!b2J%pZG4Vjl)FM)-qXCUT>Afad?s8^U0+CRCEtPU@G_o7Q{=g0 zt+MwcbB0l<EN&1cV<zrFe6$fRR8PjFT>DG3m9cj#E_6O0Crj^-lkmFpH>F)chRpx& zpu<Ug<Vij?2(^TpiMvYL4P@OzzRW>0Z_fPkXX%&9cN#yOs#B^tX5HWe@z+Vuvu6qQ z_dzG*-Z@`fO}r}oQ{=sH+J97f)-alrs~c+JLFc)4^3Lr9T#U>$jubx)o#eR{-N8Ky z?i5!D8K15~*43uqMsbHpkB`j4&FnP|TktpHS4G%*U*z7mJVzB~-Mtu}U5U>)+KuKN zyP1C+fm(RYc{yAv?JIdQCvAo^@iwx?ocZRvcpQ25d`$dT>dmuQ`uJ{b4<!?m?R<AX z(s3MSBI{j);k8b|<#ZTLm+fqod)YR2%RTU2Wd5Hu<B9CKA0E<YyW>ffW<947+TwOB zz=_g^<1O^SVsUlQQs1@JhnY*}{mpUcf;sqF+%M8*$}?Wx+fxp!F%0$ap!ibwR-QS? zJhhPcWmrV6g=EZJ_C0#sMxXuZ^*v6df1U#lVT)^#HMgvBZ4oyb&miMa=8!Ad>^Am0 zlr3koeddHcuseQtewX;_Y+P2JJjYJJ5aH3{R!EyF&(ZpBZ`>t(hqx}%I>^&g-nr_( z2fOZ5d7jJK(gJPg9`PkPcEjQ1&R&Y#5bmc>N9>PQh_7FOGq5Kfr*mmMNdL@n=CQ^1 zScR6(v);Aqe!N<~qRJG)D&a4X_0~Hv2>(NDn0M}(%hb{SW2i!ur%{`1Zz1d2x#zu$ ztY7Yf&%~dFj1yTiT91k1r_paF-7}VF4&DgIJ3mZ(=J1cncMBHaVdv+FFDd<e<UL95 z=Uv4QkRIFU_JTf+t;NM|nOE+OjDxw~)WUW0G{fnbg8t%)NH2#MgqMh`gRFO-fsr`J z`F_%}PS9Dt7PwTntoVo6;yiZAI#+C6#QDX_d?#(1JSWPV_x%-wUld<S`ZRe@z>^rE z%wFO@mcN*MQ&5G>d6wyoxyl`bU!>oUtI-vQV3Tt3g?%thy;-N9iZaeyB5N%f_cI<X z)=r)q252+S3Ax|5M>(u=oxF{#4NYUjE71a32f7n$(No$Y<h{UB$BLNXTI=fCtmYcc zd+wWYuke}T2TRX0T2E~sL5{tV``~zSS%dpSokLJWzP+43EI#w-8uCrYzVr*x@nvKz zy%brO&v^YVKE|7P3c0Sk<0N!K`XFgXsADhoOTRtCu2cEVY<@PxwKpF#kZ>iuCVnuc z;R)w?H+s42bwBS`7nIUx2E-G~xPRd=?B)D<@x`RSBi}05^-nlKcpu|JZSiYyl022r zS$Hq;pUQKJx+`j<uC}_7DbF%LknuaR4kPo;WbYSyu}KGPW}m!Q9u)iGDK^V~so&Ue z1ADK~4|%8B2-oX}Z#J_nI(oqP)U)<eSc`X@e<1!%c{<D61B->nh^sB_Ebqw2t#>b9 zM|Z5i{u{I}euMNy@($J37Hv+@cJ}G~=$LzULvanHoukgexDa<czeL*C<jwoScj=b( zmfY*Ep!d1hEZi4adyentT|?GL|G^UW`I4P(XRj*kHUe$gcMV3dW%ecP#<mwA`x_Fz zLfpI3*2>cXGn9D?A7L$8iOci+N65SKnHY{bI8u6PZ9SvitS9FAb%Z{thCR>~pJOFn z#BBNu)mQcDmS>zd=-CPPp`G)Z`fegJ;UDUldD_iMW4CkJCHJk%kaupG(`A2Co|`g` zpO1{i2O<09{*k^MX9*u8E^CI{wVnG|o`L5e^NY+w^DLBk$4i?29}0wXPa7<)8~bMB z(go)rW9i%CGVjYeSWQfjH{;=}ScKdoAH;Oz**xz*vv!u}r+Ly}$2<598MpGRKOBFf zsQO1c7DmR|67p0gLY`GhAoI{y&{y2G(z13i311*<R{g|hU3Meg^S)*zpL&gN{fKqK zpNY#mrXSfP_oa*vm63IidTezb+iv5VXCv<bZk0b{-v6YXrrsaqU8IdXS53r6X%i=) z1v38LiP&^3dSSNw<&m-NDRrEV$8fImhs9@2>LmI$qx+@E{e2{TT!IC~<vE&cnfqo9 z<|gEwZPq9ElYW4F)8${FT=p1bzgnJ6BgZky-mYxcN?%uQGyW9L7~e|S#qzY4_a9VH z?uL|8-z;g_?{}wsS+{ruS)=|03$XmZa977Xi}c5lI09Msn1Djk{&IXAKWO(|HtfZg znZF&bA2JuO@7Tt9QE7+BmpOQMZI2{ZLvn0%%zN4+#ATcwCH(>XiCNBTNQ)0<eSQGl zKXUD7tuAY<RWVXH`&70|tBq^rD~mF?26e>kCVeh4$NB-82WQ@v=fDZl>mmCzvX^5! z`)t4(OhMj(ZPR|9iOwg>8|3VOz0eNV;#mwvB{U@SICiN^*X)s;ME7^tpa~Aax5)GJ zo9vXi>jq@)`c`CKTu<6CcH7UmTGSYPnlbih%*PJr1En1$&lY(*vw7B~@=hl6xjgF( zP*3LD|Hv~N*$<PkB>j_j%iGxX7;-kI%cIDg|6<fbuETv0zi&+6Pf?!!xpp%@>xPo3 zfUL!RB0ldDvo|SwS>H8Y9%r0A7*7aiJv+}EUrRq5S713ti+fbsCGuqP?QoPt&My<6 zJsA7Qcd)we)hBsRlQE+>ir^dVW}ToB8Rn?sb~f)!ujlBOxoHjI%yq7kHjpk^ODKv4 z!q14$T($^%ea0@W(GNGW&jxXiE31i}>oHkNak}%HhA#vzRqhOVvL-kl9fiw?%erBn z^)heETInswyQ7}SefxPVMq_oIhAub))$ynJ&_wtS%s@l!UWoL~LL5o<pKv3c>kw`v zHefXd;3M&wUuSGyt^AuPE}XgIJn^4NKSI94FhaPmxTNPD)KTQl9-hvKUG8?CwZ8kX zSUA`BCwyoKe{AcXKicBbXBt_74(0+~4Pb}y>Cx<wvU$eOv-P`t?@2!UhdgE1IG4Y; z@Qd=_C9S)Bxwo&?$9ZRcxMRk{kF=Zla|3nc9njChd(kKB4;eSFlkX`M!k*5XsUvgb zgB-g#Z>g@c_|SR$Y0e(5OZWfII7aw${?$m@1bO~ZKI=xs`Pyc2H%LFEG`&pXD^)NS zRWu&pSA+WT;+CkRwelsD`Ab`u;ymp=>-<jf$4hUn{PQ?%Prj`E>!syBoM->5>5_fR z?_!2<<_B3*h>gFd<J;o*Wao=q-zT`vo3q`aI7;{@wr|bG8<G8U+npaHt*Cj}KWp6U zR=FlIAA9Sco5eR)?gn{tFMODPFLSKI?xX)J+f`qlD&M)dQTR&rWzStVd0v+Pd@`O( zuB;K}9l<i^S^Hi>&fH@j6VBd;+*cpcKR@!PtWmy$e#lyC=Ga;5-=CdovPExpp35$q z*s2RVO+@<~oo9Y_hV+K=-7Wv8?3;OD#(>O?zhdJ}`sft4y%r6X$ry8l{4=#7xN|>r z*0r-AC->oJ#JxeTdeY}R7RFEFUzDEpw5<1>hEAw}Jadeq+g0?h%3eFzFV8dC^Z7Qi zKO}po7E0eu-d|B)x#^C(W1jd2q#r9^2l+E6c?!jZGat{K_%3<oYa{l&N7+0>XZ)Cl zwP;SZtcB&drYHHcuDgZ&E!pG@wm6TzdB>P<0kUtiFT1@G-)4`e*`*eHw!%E&LvWG! zTcp1rU&h#<l*v3e<Mc1MSlU<k3`gQbaqHEceYx*z?=<Zmrynx!%{7>7E&CF-V34$o zLEG^GGDpuk>P_+tBKLFT|BxP&>9d}0<!~^)Pp1Dd>~J7^9Ku!u*k(Uu9C;4K#kEKF zK|kyKT{e82Z{EYFr}NVvF<7{$_|?*XQqTG7yj|T{3;hfYwRsN~AwHTpWhG=jnCHS( zc%OV3GoSoVr|h%Hy?+3vipzVe+0w^j8@f5qGg<CESu<XXPIS)uzU(7--T8d!xp!u6 zm^pBPaGq~6@A@@mgy(2G-%gY>7M5M9%>`tgO~zUDo=cA<Y`#w2^uJOSv(<eu@*JOM zsOf9?@>222-LcR$woH4T(emt-_m8jZ^BLv-9mhT^tAF%s_5tM`XvWw5)R}&KRowIX zdmKMG-t+5PezQ^8s^V_b|M~VI`-<|6nrn4Y1^rgl{j`R02WzX#<NSh(u5ay}pzJ!n zH4JBI^KoUy7(W|U;T!UAujN?BSY4Z0oPSbD|7$nvm)Yl-xk;|2XR%BlYI^55GF93i z$U634^5h-<x$N*U`(0`L8c6psctd!bv8*irXoK?7UlBimz3yk{am&qZu|oLdwRDkp zEk8Pu550^Z`B)`oj*~WMh5IubSI`&J9k(jeS6%JoIYRp%kgo+>zC)gS$$J_fTrKT5 z?H-_xC8*=PgFgIfEBna1nf<HipX?3JyNS)n^Xviayf<Y(W`{@F`ZRWYL!aEtes3b5 zg7<J<PyFZ7UuEAs^Nzs#&ND84D{T$VM`h=`OUt(@W!dd(ZD+pz0=XY2XVyoL7QUEV zS-0Itm+$G3Id>1VaGv#`?4#;M{x{j?OyvE21^mhO3$Yj*@I8)0uF<^wo5rS%9DhLe zW3^Cb2p+|$$aBH**dhG{$6n&Hu5>zC29kA%e%`@OpOSwWyF9`!6Yw5xKzp2oF?f)k z_p?FPQpO>^9y_%`dmMmrSRwvn+>7I}M46NDvhvk2O<jwzzi{FXlePt^^G@ae!4{-% z8i;#Np1;U;AsN?@^;LHMklY8N8rt9lRK^hf{yo!dq+3&Djj$~4W#{d5&hyj7$h+DL zku{w!k+t=#^<)oS-aTaOx)PaFwnAfZQ}t7Gee@!~Tf0t~Rdicnj9baa*O+6tCNihE zN4}JKo*Y@j{8-)juH^!KmFwVQ`DQz|)hGF$<rI1P((4U2=^C5SySHOIdS@*xdmT=v zbJhr!Vt;;|eTJF4pMeL2r^s_J{omH+4)s0fm^I+5<;`3m--o<~AJlo2^IQk9W7aP+ zXTB-=(Y?51edi;UucG`J^8ALIh3}W%l+5ST`{Q}!n!@%!k$WP)|CPVa;djgF<a*2= z(=F=Bb7uCCt{0a%)1oE%aFKCmscVzXYO_}@GMq}^)#dqnWj<7eA5`${;W}(h)){oW z3ggI}`{t8n)mPCPo_v$!KU=uGxQf#DWshIzocA-so&R0VHBpVMbzGAT%x4<Wr=k9> zudZ5bq>hf-?cuub&F=ZmrhOTC#7$Lq!|KY{G>+m`_54p;W5|_f;OE%t2mM-xP1^B^ zrF6W{@#f9^0w?23aX0Ai2iKY-(f^4Rp0{u$pSfkV=VpF%A75Cm+$Zw?;&`g_<iALs zddrOSY}UZ>dgsT;|CT%#Y4->={uzg}?{;>4TU*_wAEn-!+N$bU*!dOW`?>CO&F`&W zU(lED>(ks<^DZjuElrVo)}P|?4EZHLIg2f-l{O~hLG-70D{;rNYgN3D;^Njxo5ucC z%DWEHoy|{W!`kv@?O>5Qf8z%k|MD(6>!y<&v%etgHoeF+T-%RBckFz2ZZ3TioxY{( zX!cmehOx_CblIPsHnaJabUKh7GOrmfJVgH72gam~eAV%fGAB4rM|<&Y@rm#p@vGH& z9`dbNV{uuVt*Wk-Y?}9wm$FTsfwQ&|yHrE2gR!VD?kaXVh@BeKb155aFH4^C`WeUJ zjB<2khknwUvD2UI^;5}zZM%$JTH+agS_5CGE7$S8_!x;BjH#H5tfS;T*F)HX=TctV zSD-5LjqBCo2P>OrtuPc>zj;X7Ow_>*;___wJRP$3a3J!2Wih)u?0k=rcUQmbn<Z!? zJRf<NF+h6eS9w?8L%q?x6MZtS<lCp~oWCtT&zD*2JV*Yn?3m}<_prM<^6l!6Y`<uQ zYjJ@(W+^w_cs@h?+<))?FS_^ll&=_pULk9qsWT>hp>KZFPc@}KzRq=|p1%6LrF#2m z_dE8lTb0k(R9_8aOci~m4;qjyb2Z63zh%g}MeYrG*O<KrdEc9RVAh(CjK12=JI`)> zFl)g5>5})lW#jMq@+W<|7<2V$HFZy>Z&`UV=goVltQF^7U*;-Tk}Z2k^31$Yp1i+% zpUfTC@Z*K9X}Z7pi+jpMzV(xOe>FC<$&N+*dbNA<2L8)u^X=SV;Y;cL<yz(0V1u~( z$vIrR`9|g~vX!aGPbzzMs$}dc@4iFEY5L_W>G6d;$MoZ`T^VC@1xI;*z_-f1DsDU- zC(E}b;~TqtFMkEPKB2zr*>z2Q*K}k4)l^%!OSnfvV?Z6YV)K>k--g{kRc9^79e7vV zsi-b)p8hDK{h{jbPwuSCE&apX+O?NGiD%NO7#`BMm(jNseG9R}(aZVI67sXlFbo$i z&xf91$HDRzQ%3{+)=7Oe9rJDBm&%V<cB-;hE@cyCo^ssmyovY+)P0$<v$b~|*0AX) z^*yuF{YRcP%lMNvO3B+=+TLWmTHQD3!;GOX(Bb1^{Dh4P@1d{g6<eJ}$4l9^Wcq;4 zcVesX!)$y*dA=`C`}mGB`4*}MGB0`q!}-%y;`?Bb@KeS4hj!{~?`!R5A4cA96n4zK zxFesQF73f0>?hxGj<+~p$+nH9Xa4>PA1Sg$|FX%)bXd&J)9CvQ-P^Iz2zL0E-kHz5 zyi#A%c|KkfK54ak4S&0Z{wK?y_gSNqKUh7#AnPTq)SYiWN|5UsZLZb!6=WDkme={v z`)u?R@{N7gX>K9slhP{Vch^M;$M$#;yGzTS&63Eo*f;nJKOl3QU+_JC!z1#HSKsw) zbQxP+!u~Z~1Lv^so_u+Kd?mbE+;aB*Q~JqR&bFg*7q%<6o!#fCBi|0>`;G<b{2M)m zhocJWIzL8x)3lp8Ro235DBoY*<Fxa<KA+^cRXh3iH@_v2JqG!{;WXiV`<Z8kPvn0E zxtBhv{2kiO_dZ!yc~M^$)5lq7u7&;CGV4`)An$C8v;FKPo)M=RE50{YeZkMhvbkgb z3C7X6?4+Oi8gHJX_dGr~mLI;V-MrVIp^yHSe&%XEi=Wn!TmL<x-F$?1BtKnWo$RjT z%Urj0)p0S|&WarRxR(CDMBl&j2b=2a){3nn_tWZrPMcZ4&EB@AWPgbdY-Ot>wY{h! zoogD;>bnjb{Y%k$#sFi&6>M>de0wW*xVnpwsmdB-C^~O27mv^K;fKkP-$uw@xTok) zZkhYh9KJJ^5By@B`Pq2<tNHm%K5AUOoiC5#uh}1+cj<eoBl}Xi;u~${{oej$Z=i1; zA!9}T*P5+rm1i%u$X=eE>lth|kzC{0z7$#Vo$K{<%`@Rf_BnuVCsg`(zM6Y|TXhxI z|A%0A^|V*tz18?DeM>bVdvo`x1NBWS*H=sTux76BeYD@uSWw&eQT^ZXdns9-B-63# zd`_J|^OM;5Lw3lw>pzgGDE;y*G1u{7eUtT^2g&yXJKZebU5*zy&u>8VkiJg7@$wgP zEJB|f)zOhoQ`qQodGby0^YUe`^(Ft<jg3bvpaVN!!mg*!aBX17EMtziYv;Sx*?P)i ze!JB8hvmxjSYd2a{>t_GN&Ow!JA3G6vgwI?xEJX2Z|JoWjqnpY^`YYkY3HIF@@}~? zZe_=l*?N(Fx=Z=&Q^{U}tQTePN!A>{6Q0C}9+PK){M*!(^_6SNvR^rJU>_`SJ`#iR z82aR>{j70TQEr2}k5}Id?AC{kXR*Z>Y}InTdE#1rv_>DS=BH?hYq1%t#9zd3J8keB z#jZ1y%kL7DVEd2Mb%<-Bn|e!-yAe6_Jae+P9z@2Hr=91W?xQZD_w`%$`)57$OSY@8 zuCw)1zPmqMINxYz-$2&!o+e}7$>v*&E3}h2+GOp_RbQT$SJ0^<-Dcr$HW}!ADjQ}F zw=vhMGFf9jOq-``JJ;cT{A~6f!pd|}=1b@Akvn_qHfXDcb_Zxb-~4^2>`BVir$gT7 zU#U#yMXlI+B<@8eT+Pnew^1u;xXk(6u8TgEjKfuo*H!s`Wn;Uz$J8-In}3q!YVBs8 zU6w9G$h1k>yX3hSUDPp<e0jh1Eq&IJ?|u4ABGXcopi>ie&z`63!(1bM8`+;*>sndp z-ZRa8Xrj5u59)H9?)>s4#vFFmjRp6z)!$^v{ox66e9gvxZX&nxMf7)`vpVUIyr0cJ zvLDFOldhTfUqQ}?*`qzVo*_$f?RM2~EAT42Wn6D9ZHIE_lm8lhQi`6{$@vpGd*O95 z<hzKg>7AF|o7m~_ny$&({Lb+z=ed6J&EgO8XPsym!3UGA3ZI;gqGT+*Q9E>cQQJk) zoDLi4&|#(Lv!(ofk^2UFOmW=q{Ge6rsN7rfy)S>>_rDUE_5Iku4yV%jT5XmhZ@z)K ziTruCI0A!&tBcF~sbTWpsg5q%pNEd>TBGb_>2uh1nLaF2$=E@c#yFS{9O}FSRtndv zZoWj{eH$1L_GYUl#>}RC4;}V#U)+mM^{w^RvSwAy{ZW~h*edh$JM~@G;xjj^#zsTf zH)})LbI?zpj3irSWc{T+nM(4N>C)$s?dRl0A>r=Kf2RJrh2DkP;Wzs1rQdt9Pk;8_ zm#uOyZNI`jdI`I+<@59CH(TG&)Xy{c=5+Tu$F<H!i(fU@HMGEeb+PMinKtyrsrs$( zdh;*+^{o2KYHI>HyOHb8LS*F&rRdR<ja$&E6UGY1|IcOfJ)~#dwhgk!{&hTnw{Wbu zBk6OlJn^-sl*wM!*6cHloiZloJ={wb&0W}jp<_Ax&6Z>NbW`d3m3BYl<4cvxTrP9C z?74r7d>JpZcWt2l&ARS&<S(qhkE6>Abb6PK-o|;t*Ra_H@%^L^m$wo<bI<x(9V7M4 zDeS#MKU`1diDbT0JHI<-ezZtiN9c>k*(LiQvM+8H-g2I`jWh7F@D<`lsP_feME1qa zLhgZE$v97*e21QQEZK9mAAR;?gJ0;_i48uZ_clC4_Xp_vIXPZXZUEUo&{s$3-&Oi9 z_r^7J%DQb`^|UC%Zk43*<8F?<oNr~P?7Qr&&870?_pwHkKkxbT8z8S~w<!De)Yc`A zhqLhv*F~Pyv+nv0?s8sNzKhkD--r3f@ek)6#OJ%^6V!DxnhSp??hAQ7a2?F3u8(S3 z<3y1f>_M(Sv~jyWzk<AZCjW^{f9b1F^~cur`~%Bzx%2b+_a2Vz)|$I6_guS(zwp}$ zv*<S4J%*2;#ouf3{f_eH8RIs(9jyOk*||S8@9;m-ANeNcC^mRl|31y`i`iu@+vXXx z1)1Kb_X@feVXM|;%6Dq<ouky-Tp#|WeBRAxjXJ-hGKmh4qqT4a{nrfN3SZAI<JEbh z{`;E^DpYkX(0hRJefstZ?PTq9g1V}aCu`(q)Bj@abkW}Z8?5iqe}I0iL+{L!+pRPv z(*L!k+Cww_e((zUR`Dg*>>l#JsBG@}b=lxOecVvp=i+8^=bdogBj=rd_L%HPw+hI6 zwN~QB(C=aCosqSS2B<1LK)G7%_Xt_<pm$IDPA_8(nI2pC*KJkwGa8^e{zunaYk1zN z?OLp-Ttnf#jH7#dUc#BeeHyq%>L|xI9%Pf=>bji$TeI0C>fXdYjc_YF=2<E0TC>>o zDfZ1XYTkh?be{cw8DFo)7;>c#YLW40eVhC6n`|(e9yditwpqzWt#CNI-oR!nSGwOU z)BlV4;CwzZhpjlx(i!eucp67LZzz5!pZkNaedL-eB>yw|;6nCqrf-Jmqf6A=T^p6y zHt#;N2Yv^;=RT7?Q*StCZgd|qc05SFEBWUzvSxgFncOA##1foKj}=%($Ajp2KK-_! zJe!omjkuScYO>k0<&9_TS1tYFyb&8NkoRWxD5Q=a>fP$PETf%q+FRm!D}lU=$o*t@ zd`6}`>y;yK5B>ch`S)SBj8~asb#p!$8&LC4{ed@xmr1)A*+cp?@=mRvwD?-~B#lPq zgyT?0-P6%bdv9sGDjBjjFZ<C?lD@Yx?<!wfJ=3+D-wn$1!yGbSMgFoyjmvboiG8}W z%c<-#lpX5P`Fy%hs%R|4cjB_2e3|k$>X%WA_`^)TFwNLH+j!?1ny8I@E767j&aCgA z*3>-!V;h-A*We3mI9>WfWX$hXL`F>%{3EWV`inRjgyQn$x3#iAC*OqRx5N%`%r^v| z7ULKCp%eKk>7&o(os>S5|4;SgH{<dRah|8*=L^+$b#?mJF*kGFtR&Z(y2grX{6w4M z)OjJDO7gRxmXURVv28A2WuU(thdQ6gFBdLlC+ThJdBh67&BrfW#V7b_-F4zOI<jxR zxyYPxBALgNxjM!;KSBHv?6aL8cbD%c;W^?mw|j`5Z}X|A+5R8?mG4rz85ioaPu}@e zQ)bq0o+*T%6!$+eXYWCEy60a0Xch8T{dY{fi0!jRIDp=BF;#e~xOSDzjU68mcMBiS z`_Y<gzld*4BKsY5xO=VZ!m->2<D4<GH#zT?eh&M*<2crNd2;lSp8UVcf2HGUwyP|E z-dA>&_h2&ad>26P-{Yg=`q81Bc3zV|?~C(pXdK&R?^9{#GsNGk-mF<QP}i%Ns;$a& z?#)iwyVRV&<{f1ddM~ESp8EAXO1yy5HC*3p@R<0~bgYlpu$=xQ=>DR#Zt@qG?-0lK z&Oes7sys8*_Ys@y>zMgaY*#~C7v;V~862mcM&<dPJQd~5J?&7(=FaEiM~rfQ{GR5A zWXxWUe2dnE{=5AyZi8`(o)6IXcYd>nV@X^m+;*jV1iyNkkG;j$&RxX+78-LMzrg3> zmM?LylYTWHoPZPM-;E!R#}mqDJtX(Ds_a@pJFm0n-`afXH-7nt^7=2oSG1fhE5(QO z&Bc801l^YJa<WF3XVsH;mj~Ii(1DK(q06m%7{lrHJN=fi&$;Y#278odqw%<eeR|<~ z;oNf`V2cm<@-fP1Uq}9Buj}jDFGZG9+2akz%gFMR_?M(#q5b;W%<t}<sQp1?8mZ6! zRHn83Px6No`9|)=c?Z{C`S+!r$i7wRlixFWUwvD|e<po5`Ho!AcI<Gc;~mZi@xj*0 z6w&4l`X>8%$7|;@94DOLgvfUiqorSu_k<rO+l^$aK$lh})r0PAl6N;*AMPZrG+GGf zH%r<}|AW2GaC}SrYwB4@p7pEvvVJTx-<(h1=3U`<eR4HjpJcZ#4fsq`*ZO|?a&JCb z>tDb6OC4j<U-W8+e7i@Df=$}GnT>DJFIiJrrJgo)sGz+g*x_tsAJx9%_9Od2`tCw~ zwxY6oLKSsu^96lXzMOPvfAHsp`t3b=4y)!ls3za7Lr)YZOK;_l)7}T#&a>wEtJSl} zoN6{Z&QRY>{W{kiK-@>m*=!BJVfXj=;AhwknNMGUHsWXKk3Hzqf^KcqxtgD3{dK$J zk<LG$=SLJ>CvSKDd<|-;qn5VsP$qkV_NVhCc6iD$dkFKLN+~*L@6J)ErvJ{-w+-}H z#j<Qh=P&8@V|CYr<7nq!(f?e!SEF0rdoIOwY`R8V*5*n%X7572YstQ+lKf{6zF3+b zo#{9Zr;+g$ef)y7{5I2A`5vW1?pgWGjlTN1tMozSzfImF93NLlzW2zU;_P9YqTFD| z{0>Jcd9x1D*md1wnQ<D`R`6vu&zfmz<#M0-SpG|tJH@e!^X#k3-jMu`L)L1uFTOL` zJJS6-{d$Ui{|t@w<zL3Kya#`c-i>e@oomaNv9Gi|YpWSAYv>=mD7;OX5z>ap^CO$Y zU;Y+us@})sKax!c%3B7t<!>c__Iuu`jl4ttn_bV*PH*Akl-&obooBzvHvN}<>A&f( zzGT0fe%T8fJH=O)t#e<;TsF!3o2)$^&NgT9vtdj5_7c~|V$V~2?^j$a{E)b<(yox_ zF}6EV{*O`Gb=MZPvC#Qu3>TiO&YRWWM|;`p6dV7z#Td_zMzZl{_I!+4FXnf7ub6%8 z8MDsk7e8Vc9r7E(dzIj4*jAD}^lMK4Z}`}$>~tSHUCKT~YLmaN{=h%3t-Y)22lmK! z84tTAULnf`bQn0_xJ;kO8^1q6`=6?}rGA*KuAaD@jkAyGJ!Ly>HII|8H~Fu{bDNEI z{3-8~^4=zUGApw0Q2v#5vb+O&k#Bv?M%CCg@6q#IoxPL!CMVyDAH;|EP;RLBCF;(- zEbGX{)cHMmO49om`c~Gjxi4o;dw<958_Ifc_FX@teEj+vWlJiXcS)~`(>*)i&$gE@ z`+u|d{BH7HMDD!%{YL-4CH$4Vm&-GbEjQD7GMlwxy9?N{cU5yR@g>=QoASfRmESU3 zipBKU!Y<kClzp;yuyN-6d$3pbjWKJ%I(hOw{7m6%#l6N)7t>(}|1H9&d*VcG46OL? z`1rLt@=mBN9ee4Af%2^;)5&O8$(&Z%C$zPeK9k8ZlTE+Y(0BUtiFy2Pj&UD{EO5>M zkLc?e^t^<g>AP+EW})-J`lo}mFO{vOZ}J?vzqDVr&`rG`ZZ}5K_aMjou3{5qdn$LU za^=xU{-5M8CG8iwJ;Hul_0!pOZ@?bklP~*>iM`XWb}!7P;xqRjLe~v+?pQ-VAo{nV zYd5y*B2NQ$%5Spe+2KfbpQzrc?Di$Svwx(9Ha^hab8Me|qnXEk_a|GCJ-=C<y&QQC z$sX;lD1_(5RiMKn{XTOY+t9fS{g1{+!WlPTWXm@4EZ{?_Bkwe}Iv+sK-|5~>o;@)Y znMbx_)BWTbt^W9H<_LMe^Ov??6JHL$<3n+Ic56nbW9ZV4o`;lmUFyq`j&GOYA2?7r z`(F;PB#uqm*A!nzJN5Vu&Z|r3+UBw1J5)D!sbXA_cRSmisN6c`>tKSq`XO`3m$a3= zaD^S`;1cmiYWHXPPgbs_<1>kqXC&L_9cfklmTz6FY;&(6`^oe>kRHd-_v;P(i@ok! z;hNxION}4n7qU0T;u+@|Tdqbc;lljzq<LhWOP~3!4{={Ca}Q+q`RmPt*!Ea9&Nrw} zs{e~k`dR$z+UUtQTi_AlPqh1jJT2MybUu~6YT5Hsi(N;EYs%&mr9XjuPeYZ0QvUmg z4X$zxwPd$i4b9IQ^NA*W7QOL;^AX~oVCS-I`Yzkt&A0N~hKG=&@e=WKJm=3a=FjF! zbnZmPX0miwcf%U`pq~2cdzP%_ny<tk*m697&vz#c`BHa!9YU^>Y`7bH4iMjqO|KSr zJiX4NW7d9;XTR^+XprMjHp=~fJ3kwxTr*{k)*qRFe5a0lH+l-TtLJXx%Vzc{%(q&Q zshxg3m~V{4VHMqT#O2-jX|a{MdTaAHZ62`FeZ#TPTK=M)qS7LB_P=JY^~-eV<r>WI z*5_N={pod7S@S-1_Gi=Ms*=6hzrMPH-d)-5O4sQ;Wfm!)dX|wbdniY;SKfo<y3IHE zH>fZ3+}DNk%$~Vy-fx{kkAF~09fwKF+~GxSzM;)Q^l7KPlkvT94{a{szu!u~tBkb* zdS1ZCpCH3Pb-$(FU)8mU4CUEsBOO=syW^LUfsJRg^@Ihk(Z%er!rY3zo62*8{+h3E za&PG9ygB<+W~UY_^{4VX*Z8F8`@gz$)O^A1bj)wET(7?$RA!Yjlhn6i9sl6tm+7+; z*d*^;vIjAH1+!N(>qg(xHG43KxbwTGR&0?mFZ;AxMMt`>#cbgV=z9!3N0f98DVzNx zd8U~se66_k>O4=~`CaKJ#Qm!7UhG;!+wYNa1pjGB&W!0*a6Z1p6Ie@t|IzC^^4~)4 zpI5uy={$CY{&%cNpTjo%d!06tH{WJ1M%K5RZBdrJrnol#Qa=0Rh6tZ8?s#dJ%XhK1 zv;QP}N^-qEtgYwSrU8b@m$m$j(l23)SLw7DJxc1=R|B2j(6@yg|8ib~k1yhbO=}nj z>hOyOjMvCLsi9|(`o<@5d1h}ePi;1vtW14mjdCD1s_P)kVy6e#dNyCF##SA1gSIaa zpXc_C%8yac$FA)sYARn<Uu*j^vYn`(J|u5V`VFJQKspy=pC8weP5)10uSxu-82b%c zsxSE2&_(j{y`}ta0zMb6CBEts{g2GW?^*6yioKV!{}grQUX!)o?3MYLfBlS8gy)O@ zRyzZ=@t!uW!ad4m-Q()@`jbo*$d>hyRyZE>(SZFsk(+u257B!*d$ghFTl74c-R9OM zJKhl<L+|W`yQMl=TzCDjrmFfYx&GL%x4z2${s+nMG<`bFGJen0x59a@I!-&gvE|Lm z)YC8X^-*ViHBOyt%W1#3{w#36+)8$Vnq(`j%r|`XO!3)Ey@bqj*!6V!WsKZ^uIGR` z?zQviz-Cz^%YKIZ&58B$_f?MA1q+3*`$zriJ4^T>*Fe6lD5~#<QT{jmxQHH4U|&8m zmYhcwW&`zPj@wB8{irWG>yuX<%W5a@ImWSl#^dHY*k7Ib{;9lrr_$v{b+l*CPv~~D zdVA4(2b-0tt{ve!#XY6%vaZ#9V?3OE|D*Sf`sqk)rEB(;k0*crKFNXVEF<r8Xo;bG z^)}>p3ZKzd)+UFl?=!kQtq-r&##-#3ww#|-@n1VX&iC(<H@dG?_6>Ec=jZvogm=i% zogVqd{~)@Lpx+sM>s9?Xauq$;{ZsmHc6@^kCh^H<rN7PQZ}7{S$n*Bq;up(bQ@)$o z>?+(PJd_=ul3s<MRHAEHZEU1xew1m4`1_U1d!jcSvkr5DwCqK=h-}#xx`@o#bJ$F{ z1DUh#eh-<m_S25tj}U(h{qn5%QWf`bx)*Y+%O-gzb~|0isw@4J=l{0K^cVM$I*Tc{ z7R8bG6<PPVNuK;}+SU3YzlUEHpJBN^FQva0BK!OwbzWMZ-9m@k)~K7Vwb^M;v|j1H zOQ(nFlXo=5>HQ8?((PC071``p<#zDvS&l2&vY+^)<oQ;;UDcoO`Q9W$zInY_JH3>7 zNqsHlJyYIe<*TIM*3oBje1Wcg=y8x^7rI<1?pDY3;%?w~9c!BBH!zQFtS_4K*CuQy z+@_(vcdh4{d^Q`-<4;GbBm2HiQO8EMdZxJhq;`H~`~0?7_Ig)gr*p&|B2SxgY|ZZL zYx5;-3|8l*uJ_ApDW~m=)%AlibLlZ~y=#%J_FSyq`DB~N7aY%Cz<!I2txJ?yW}K0y z4?EuOc)jz_<o{is>GGFCO=Vih|CzK=tBo&g`90e_$u@bH_PMrR;mbd>*%WP#UgJ7a z-{<<Li#jVP({G)o*+0+YXUIPe&nrLDdETMqZ+m>BA2!joIUOp|r7t@UuIGBA<M2kF z;~alyzp^#-ab<FsCkLD7ox=<0E?mX2IX``_i0epwN2>dMZSS^9U!xiMGPbv4ioC;Z zsUM!yAFFVXI?L&k%Zu|#>3@=`kG#K-u?l(Lbp8oH$)2<?9p4c55?fqD*J^BbA6pff zYfi{sPqA%mwTVsguCy0f8t%|9%Dya|{YD2mJ}T}KI=|t1cvb&4qeD4*wQx;kUFITj znWuaz|I_4ni2UEGw;29l=gcwJ@z=~Vo>JGN>T1ka^38a0WuGt>bya6yb$!5hI;(dK zo$qDej`ZDt=6G3~kFk69u#Qnr-idypZ$G4C4f5|s)<*m>*FbM}8zt}8>Yjy~sO9`) z?R9gU;(Veuv!`y3wpOYC^(y+y@lWUV#6O~+-d4~4^d3OJYt(%!o9BJY9=HXa$#D_( z6|PMGJIRs$JaLn}`n2vE?XyG1w7g#&#J{TX%Lj3`JhjBN)8~`)MNj_x+&sEC4s@RJ zHt(+c(eHS5=QkLhq2ojBnD<|ItK%l=S*y;RqX%1jCeNPiQ-s_<(KFvP=R30lOYkA_ zMd|P-d8g5%i1QZG=CJ!gbS}Z(xp(9q5?ghm_k;Q>znyiVa+#N(tIwX5RzjX@%IQ1D z&DyA_z3bKYsCu*C^c%7ikb4t3?+~6w=2OJKug~&KR-K=;B=-__*_(a3@Xvv$!CnnE zm|JdEzw&wBoQRakx4Abcm;HxVpqcOv^=IATcXpXY&V1jL{a$C0+hw`)_ujJ}beFu- zlsQcPr`5MNJC&5D5*@P#rZ4i%!QJ#Yiat-%Exs_JCK>A+(;D;rrq1^@?m4b<eojL^ zU)yz2mCo$;Ie%HD{BQg(zmwXBo%8O#9r@1H=49+}o;i4)v0qaEM|HKQu72w6w4Zxd z6LZi8e7c&xBFE|KSj<ljU%_4r`2K8bRI^-HbNKN>b}-((v5MXJTE@I*_*3SZpUS`Q z64!__SIuL?xvmMvubrPN{(9+o7gkdrlw_Av*(GCS_O&&^!R+;bv>EEUU*3FURTFvF z{)m1$L)pBCyFs}!^g5W1we{^N`n4qUKKx}pe^|}G`moLE)!D0#>w_(`ci>Z<b5$+! zvcYn8yQa8#QxRp9J5;&sTWP0k_Uh$3vvJ~nS8wi#`DX4>vSm-evHJEz@z3kWa<1ni zwUzcN^UE&!BJ0xmJ=J0IokG^^;eA{<d;8ie_fCQNz;@%6dRwXQH~Rjz+%?TcB^JA8 z9ABb;9rn%3kgVraq~l5IY>j-6mo>xb!i{D5SbN*Z@*}yArPl>yy4Ue==Tqshzc#Z6 zu8+1B>#K$A_#i%2|2+LSR(vt`KbAf7z09xjpUx(AmCg5S$EfF0^=;&zvnuIdeloX) z@xG=$V&f~>GuLLmGao^o8`U$L&NZ=Cy;sva?~1cWzOg)6JASm3F=<czhkQ#g4%zd% zUOk_(Wxk=y{<-qn$lmKBILvu}@kJ|o#-igia^0xDIpo~P26vFTt?N-$1zXs6HeIgS z=3YsjX7taqWjDG`)sOA560bV{N__TSoQgTZCB?O6rvZHYj-~p8&+oH9n&Y8-G2di- z#cs#zn`U&(UWR>@E2>=9iB3`WGE`UpmGb01_c?jKBjXwRX*-#hW0dervM&*zZ?&?g zGVj_l=blK3q2>7@T??ahxqq+CJg;YM_h@B`;d%KVR8JSSD8VLI$d`A#@x^-T$lSA^ z{O7XE1MKk*TjY0U#?W;%Mhf3fzWn~n<@7j$4r}P}JNd_9U*YWOt4@yxq%T$GI<%wj zm*T%(YYbthlUF#RmGBC2-?~oAsB<4}=AFVevR+2k$LP2_U)Vy9_tf*IdWxX1x<|=B zM1TFF|8A8xzqj!reOJ?=0{z<1rv}{yRW`2ihq?{O-&lBGW8D7k7x<_N*&FKf+U6Zq z-76~SV|KZYzfDn3-usqekNgG-mGa15@ChoB?;2_6@WH`V^lLrgedw#svInqdGyblv zaoYWm9Dmd6UiRs;n2*jjUQO3OGnJWVTwm(wn%?;yjb1a+i(Ow8*I|kAVh%r;MyAR7 z7w0NFY_988xxQ?d-!8~=N>SI%H|&((Kp8EriM|-g_eL+bHX-k!>dHO*Z$7zvrG8R> zaWd_$U$X!0WNpq>?tOO7`0<>6$lAhK@_$j$HSQXoRL3<%*S>Yl<!YJNvsv~G<hkwx z_F69g^ZMX!_OHv1b=kjJS$)r*x27((D@VqM^x@Ci%6;!6w#k0ri%J>;<jwn>>;Z12 z&g?77cT<b$m+@h|GFhYS=DekH)Y<uW8nPEFzuUD=TBmjDrsIl*o~st{SI5l9hq6`f zua9Yeld}0PJ#*#!zC-rEFIILp$NV;$t}A$iOf~4Tj9i1se+Qi|r^6U_`Awcx@>gZE zKiIi48)nRpuNRkgw7T2NSA?I;A=_EP%jhu;F9_$G!glIy%|3blyRo)#J@=ZrbmTL2 zDwB!+7m}eo85_{|QnKY+y^_waQb!%ODXfkrWV;U=$(Q@lkK#%@z98;@`XGCVvbK6& z4cAuM(Z)vo*rAqdLED#0&;0fmx@EuOYO)`tjV*j&Psbw2bykaB2azFr&kE>#8GDXd z<6h<XC_lQL4`q&@`&iyN=RHH__7})sP5z;)9ak9d^hGaREId)%a%J<*;zVV$hIyKL zx{8Z`ZeL|=m1naywuwJjogLZmOm;ay-{dzYPN(Yyj@h&IG@E1(ZGO+|TH$;<I)h(+ zBu_~?o{6j2<vsa-mp^0Sqw*bsWtbo?>#@16`|!oQ`|80LyE~pJ?jdz$4v^n+8bX#M z$ebTq>p;Jk$vg_@3a{Z0UFcGY{@L4@XYX<BID_nWEAol*ec0$xdGgKji_6_p7P%kJ zqa$8f=svoFFQ{w0@-_5J{&vIuWa~qQUSx=m<^AM^>i8k;A>RV$H^6#ItIhZFyN{W7 zr0iwN{Xy?b*`OSKUZ`YDs7{yK{I)(DHlpudu5IjSV9kb~RO5@CtMbu`>Q?55GOlHI zxCuRx-zA!@z8le(T`wcwC-~EO_Qtg4$B$OyJL;*Yoe?-wxIBN%eu6dnDStmLgX<Fg zeJ!2yEIpe&E?;FVTB~k0h<+O#r^-`D`oekoZiarF!tTH7=gG=VSEu+1OO=-|?;7(? z>pb?zd~u{U=BX$1&t>XuEzd%2?6X>$aMr+|S!cY)Q2dTf@_ww$Ps(1QA70)r%&r^R z^Km-fPRH>Tjr;VxpH5pH`?Bi;uBohj&yoIFS@qL(ATsYc7Bfn-2|Hzf;9IWcit2ru zkF-VB0Q-x}d*JL>m|n{LQCq7VC+NdG6CJ{29oQ{%!iMOM%-!>Ce11dZZQ=Lnz4;Gg zI-kfoZ`QTC(D#9r|31fO&&m&Uu1CN8=1qP>uCQ{scCSHqR7VBuN3Jg9%5!%1&>YAg z$Kg#3be{QB)<I`0e~or$sjHu3e`QZpZliKz<y$O&QNEk+8pom!TGFQlAAN^z%h_Z) zU5m0&SN8je9nZ&BcFcS9WztH?Q<DAPRqjdUFF?NK`4WlS#BRl;|AM#Fnf$-AUDn*z ztLH`iHA6p@uj*Pw)*wgW6_mgfY1y-Rw|0Nl=4566AYXnD>=b(3NY8vLops)+^qkDb zXB!8y7qB%uzsaWOv2{oMg@*j-O@4GeJ7*nZkbJx0Tj$rxpRq3cIS$2H*n*6&dG48s z_2`XH#ns1k@{g5gCBAijw7%<4mR{t_Z_pKE<E%GM#Mvm0+Yp<7&NlVg<XbkWU)uG` zCV9`0{mofBJ6zgoy5>8J8`!TD|2v)jf6IG!IoBMUJj{Nl;Ys~7P5kl7<hP4TX#Wy+ zXivUw{4D#P`k~WG{mKs6cOGB;f{fW)H%Q&Bv|U3zE6bYyI6s0Pokpjgi>#wgH7A&0 zo%B1l_|Z7$eC-nBDSKBY-$i7oThn-syDGV7DSwsnc`y5zKDbZ29g#Wb>B_WW*0OXe zLZ9qO$UeSC$~;Q`n;cuSLEfk4nW0W?{nb$aHKtP&Z8<J(z%Rt-eZn=`K1JSp$-j~f z`a4#2zB~J@lGcz9eMqL$oag(Tk=kply=$-mdA9yhd)w$eP5yz}JO|t4KVE(Lh9}=} ztsr;S@bhkY{4!(uQezo92xr~4kmF>wdVC&R&f-7Q`1WM?9rT{UCNt<Lt+O&q*YJbi zjH`V1H}w6TPj56gWS<Yz|2A8Fh^&d{8|cmY;g-$xBEw$tHd6L{`ST5C3CA_g>*>#f z*frlnJxR}{biTW~e$*!u9Pgyl+ZBuf^ejWK8g$Nj&tt-^#5G~FH!%^HIL~@QWp$0@ zPw|Dl`Bc^jxya7HK_0th-7DWt<sOn}zm?*0Kg|2OlgXNKe<Atud&DiB=N_4{d$?ov z4`*(j`AYUvjAFx$Y?Jv&zZI?zag(LBr}rTF^S85#kmDtkK=zmA_r>yjp1njXkbM;S zHl3U7{Qd2G?~-vY`x0h~FCu?_$7s4b2cVVka`I%a^B8%j>g()Tx{DrF>EFlkEIu+; zTwTXr&hriF1?-dGIM|40$Zx>pS-6FK71Yt34f1=gA82=s<GarDOmsT`uBo0m7>XtG z=QrB2H?xlO{Fd8rb-i7Y?^UInersMsS;zC)_;ofOp>J!DBWqCkU5-^n*-ri6kbiHC z(q8tDzRU(iT;I#t=@5G7{&N(2=h?9HTKAMS#$VhfeBV0#A^w~V=3_V?S31vczFaB2 z01faX^7}*2C7-_ikPY)JFba<$_Pm#WwiZ88`Yg0{eh3?PX8(bz%J)xO$XS=n-wWR@ z?s@iKB0c-*PayMG;#Nv~k#76&!Efj~n2p-7Q9ru3(+4-R!}s_cyO;fU+&WxeWR6{# z{j!(gaPd==OW!`mHy$BR-basF$baU#|6}R`*E*lezND+jneq7~?cAwsGxa=FS>3Ls z9ol)H%&*b0lsZ<;q3^Hmzdz9RTVvxy_0OcUv@hAaw05&U`}>;u6Z;D1_b2YqH>dN} zuC9xI>^UFf$@Qr+*}qVUuE)uD@1E{W^z4g%+CI&7xq(jm@Ppa>VO4F{VSV?HhWw&| z`BWYD;VaFg{~=!&`Cn7+7gQ<#?;JCGr|QeooIEQX->#-l=$7wf<C7n-b?!^u*nJ&c z&lAp`@qDM;K%VJ%OMTnOH&@<%Y;~-DdxcG!Zjf)4>y9n+ea&PxF3+~vd%OEAK0e*p zIaQxbaXm~Xx8uMW#{YSquU+>~t}*XohpFnifPH><%osUrJ=vvAP<Jt;jT+9s=ZBxL z;VgNwPv#ECHp+h{Zkb~t<>#?!zU_L^b&}`e_3SXLvijNK4R%_jfAg*I-gL_Et9&fa z7OWQTLD#|3V#lwfcM$(8TkK$$tXXEAwiG$9=Q9QT_Ac=su;DG*n5OP)^-*Q^&F>(* zE4~q1ZQz4>hxZLxN0IR`$6jR5vwj6+57SlT&vV$%Yt3m_tDC;NVPE0QrSlH8h&<hu z%{!{>)z03a?D5&EFWw-_lgK-rD{wI;h|m7tmyq91%y07Nd*9rnk9WR|T-T~2?;6|F z>1T{`URGLu<Mtmm%zp1f^!d(vCtKt`o9Bv?*>E2=&2O$$K~dp3bk2K%_;7xItrhzp zs(kkL5Pj$GLSMrk{rK4h(*9KMA@a?}3s}X@593VXjKR6abMMN%`D}LW#djZaJU~C@ z2boVN$A#L;n*4|A+|PA1pKjS_UX31^lfQ&hg%6->Rq+?#OyM8sI+z{Tvi%2yyA!t~ z-*)9)_0{6fW$V{b7x@Mxdwq`L??>yW7W(57eU)#IMhf2}zP~)R_2)6_&3&)1KKdAs zXe)a_f7bT9M1P1)vi^Sz8x(ge;rwMb+CcUr<+)eh7x9Ylb^76HX|K|)HQVhbZ*#id zqTH9t-$VCf*y>HT${xLH>@rSYv}B`on96q5^i}-(B4x5a^K<gGCii=;zZDDk{d_*N zh&wOi2Yl@ndOkw#a`NVPKZon5jKTM4C-1<&*FSkrl>O{kb2x3ew&tjJivIgWxnJ3H zrv6ud_LW~jhdRm(DyJ^8Oe5zj>e)}-2huV3k*nCPBe`<Vzg)dp<1eM%(rMFmS&U!h z+MI^E%D<_e%JjRMPZZQvZyn=LUDv7ODb5FoKSuhw>~T;9&r!-;fwszJlj(QWjFIxZ zUeh&$I>Num-&+1b+UP^yO6;58NIj3;KR{7BHxl;=n{Si;1KD~xW)Hvz<h`6O`5yU3 z{!w@po6x`QVrdKcHapkDq<QAUb6jJyjM>xm&lF?gWaS)BnPCi{t6!GrztyhI4eHtK zUZ&2)IA3_FzR8~OZTfF1*6_VE<r^-3_$Ko6)$Hw$?~X&(eS7`MhuE|&U9KbVQvL7> zAGw?js#GTvy^A@|Zyj{xN7<X4HJD~tfKhw?YyWx5<@d(2AElnSgZ0nt^!}XQowf0l zemur8Ygcz_>sa-CApiC1o`9Dt{99KCez=rx<r;jAPGiaaK0YDu6V7|$G~w^)w2rQM zo;zl>adV|USz%7c-}3!?SLY+d*Oliu`7h?P|F~{4pE%exlX>82$l49}+c{3&Ox7M- z-3R46+_A6oX7cBEy=S8b20Fi$4*44o1F)BHz9nv>j+N?tNu4+Hh2Hu-e+TqHdLF}W z@6h$5O8kU9Z(`e}*eHAi-CIk`bM;jD&-lM+x(_&>s{eoBijYzE-eg6kQrb&HX;1m8 zXh_=HvLYfyg9=GgCGDN0h?Gr)?7b<ewEoW*zyIg)cs=gD=brOE@AvEdzUSV1?m6ef z{)fmIMwaRdEVO;V@mXYUb}sKoZ@@fw8uCqNBpl0#W@KE%4;hElg70pxPKO%WEZZ)Q zACdkjT{7-J^YVMp{mwtNO?>kaUNa`QgP3>)SAR;s6$eWobL8?}I``p^ad`>u`-rRh z+49XV(h4f~JPd>7<YWxWzHq4Xx5)Rg{71qO@D8+*wieECzL0zwCwUq9_wf5{{67%g z*x!Tgzq9>Xd}bWqM>xosojd7&uJijLX&(OD*-9?Z9p=C>c-smC<jeErN6>++tXKIn zIYaO@nr~`oKN{g=1!OMR;idT(2HEd}&kJ#z|M|$6%d6@7qPVKELOZvJ{;tudf6~_e zEWTEI{@>=Fgsbi3Us%TTD9&5ebT8q9Yx((L>5bTViSk`$d$yj;rmt~4Nu9HBw^EGa zU;zK*zB!cN4z8x{DT^0nx6q+7&K?lg&uc?IbA9*Xt9{s&KD}ql^PQM_OxYRAv}aSE z8xMsZ_Uk&otg7q1j^~?(Y(JQv8nL6UxS;C<Hvh@q^xI4z^EzB-yhPR%n#G1Q8sNGK z-40QAW40()LL9Hb;WhFO#e3GMYsMcLpZb!tFO|=nl6vLDB~CJ*=61Gp<ga|A+ljMf zIL(;G3s!lifxft`u+}vUL+r0xF0OH06xRiR^j<KRpKOm>=w7r8fASr(g}%7SJ4U|k zzKome@pKB=C1Dc2K9T1L=f38H%q7h_5%XY!{fq_3`oXU$KiK)5;xOa3uAysq+|y@( zqudWx+OFfzh3v{4p{&a?9@?|@8hO{Sa{<o&ljkGbeI1|T+;+U?zIZbqKd+t(A@%0D z>Q8)SU9N&;mQZd9A8uCmVLn;JC)03ST)yk%&)P3}R%}Smx5!#U*Iw+%_q<c39f#BB z*nAT1F2P-S9L=(w=C~Rj(ofZ1xr{eCh}>K!6Jd<~*VtSHvcB=VP}2TT*a&kWYtWX1 z+nvjL{bk75O0VjWHX?nLU(hGtx&N`h*!6Iqyz|M=b^IBgGHzx`IqhU+&s}2t?3((t zpneVayDIXry92vlm-ifH_E9$L+|5<r2e#el`IPIqJ3jw#ewH{pfS)pMX9GNGKWk#8 zFXw%AbyC;e>e`{Me8-tD{yW3->P+0{+4NlgxrDsT(Z2#WhvByuo>szp_PgNy4L04# zo^JA#wS55J1;tFR`+{PtF<fGQw*0fmxE?3zkE{z1<6<fqX%DN)bIE4!5PY<Co%av; zVZD0?-#jIKy4d|&oR%UZYr_1le0`i3#6!Lt^kQ?y(WmYI!Zvf_pOSVL{nMYAwM(DJ zQ6D(M{$|MkGiJ`Es`os*r?JdB?*){vfva!XpYMVFan-njc!rb2VBQ^T^2am$k?%6! zDwn>mS-5zCEq~DWRJuR18uu$)Tg!1}d!FO(*>`|EH_$)N`)O1EBzFK`98T_JZNZUL zn1i=ri^bY>&kmDZ-(Ra^GTC#qf8-R$^S8=h$xo+O(w>rW$bs(ph15rnXBm~TPW@p8 z?lQJ%BDqJ>_cwJmU{ihAuZ(+{ave%CTit)KcLaII)pCv1*T!fMi!~M3wuK!p5HGWo z>nQ*EILbT87BO|Ha?#^0@l#yB^^Lp>HYUFT-;?!&bJxUH`Cs9WdUziSed$}3oXjU| zN0%;SKg6bs=`={*tLR*ZJ-=+%-fzO+IzC*(KR9Tx3O6hDy)5VdC9au;&dtN&EOpOx zKee4dmye|vmZz(-C*dOPM4t7wh^Jc|zk{R5ePONZ%k~k+$4DRLe9@h*8!_4mat}Wg zj)b|6GuQC|G5D*P$+!FI^v*gTwW`ts8n}+G=F?ZDFJVs$dHRT{skWVQ(NFpj{Pux7 z2Sdejt~EToTx9R}+`;7UubzkK+RrxqCHc>%^l5!W-fZRDmDks8o4(8q`0D8VAo*I! zzncEJUN^xhY`%<~PSDx@d(v)XV?UgBSnuA5)6a4GuI*8dKbD^Py3NSR9Lf{Kcfa_8 z{DHPvdw$RJo^y@pnK{cD%bPyU3eIJH!Tdi|#<<-G8AqGzHQ!d!N11oZd*KZEpO*Hw zGMAD2w|p0giS*fZ7FVyZYb*O!;Ac%0@ls7Y4vp}8A+DR^>==0}iR=6MVX^Xes3-6B zlVLcSt;Ac#H!dx__dRm4?Rn&1hp!^a#V1FU(x#AgkUBoB!6&ud&$NdX;d94p)YVUn z7n8p$c}J3cG<%=;-M(vUH=gp}Zh1G$c;vD01LU1{rtNpmmk~F|;l3Wf+z9E<%34x) zIG_KHUntJ=tT)W@r~LF9{%i5kdD@eWVsi5a*BA7*-$>e`E$ZGTuYCEIbEb0B_+bT3 zd*k2+yk~w&5%H35?61Hv_OlLO#?zmP=N0(sEAMISIT!wcCmlOgfO!R0lF@*S>dI77 zHvM1e(>R$=npW^kz%TFNrVCWCpLGR(aXw?3KUKB~ALqOB!|Z6YL7Eurw?aM3wHL16 zn(MR!VyziIGQM#jeOfBp!gY}OdPB)d`;z~>+Ki)&S1$dt>vgs`{Xtw#<+JI^EYRkx z!9AXD=by~Ud$9E0cdz`9K%Ra3D_<U02ji|V^uS$FoV8?g1$<0aPkHs_ojGHSE-K^N zVCS^*@`;N_YC2a>oHe9tBmCPItnV4Ew(C$l_Lc8)<<gf}!1iohY`{z18m^nV;#l4; z%2a6}b{v1KEggfi-{d_^n~*t4XNk#AA@`MD(oUgETY4N%kGi&x<7Kq-)!4HZU$u6K zmyND@w*RrhbHy_I+QONO#qUCG8eaaGC)VeXJ4?F-JM6zU-*q9+iTsdxhNt26YMkWz z>Xk5#Pl}OSRQkO2^s>FlaSM4a<;%1UWz>BG<h?Vo{3Jhj#PN%K-iChl=vfyR*Wslw z{<^wuUx&iD>WY_n(mS&2`O@MIroy9+Z<GGC*cuMc+aD?IY&>K<OXgGDhTfCJcz>~e zD-Q0nP5<0Let#ZsUF9u<`{v4irfmAa*V5%^I&G9Ub95(cbH8NgVeGjP*25Q&xjjSK z`3QTTV)tv}vkYXe`VhyLIM-gjUvZE=uHnD2gAOCvoHpTex@GO6HE^r?db*bKex2_s zufnBJ3$l*&?a&nRPQ5_+VemENyYx6XL%HY3OW#hu6=!|TJePc2!aa+PFR<|fJic62 zyDr8KtR;rTXshbB((`UnUfwP^yPKSU)%654AooIgrA@vFXPJXIkL;#J@L)R)&bR*| z&Pw4tF_*PhyOVhb*@x7|VI5mIUcGmU;oPquS7tvlKVd^#aZpk`T#2KM+s>SdzK)M~ zy_Lq-+5Au!hRSyi4*!#<jyTG9<n?@Ws{Pz&Cpq78x937gA94f7_e;+>+9&y7A%FGe ztAF@sH@s?pDF2io=UjExRNr^%dy-BEvU@PQd#k1`PTyd67ku7`qcUvFe~eu2noHkX z#w@%pZ*zV)TG_YYY5TkI*HQW9czb}onKLvFM}x>XQ`x#?T!4#d{FC?HA$Ys9oa;y| zrf+SC{o3NZymB4L`JL^@()ayUo}ZV9;f3CLpu7Fj(%xaud2IcO?P;s8Q0GKCcT@fo z7;XP3x@HZ#j61nV`}&FUSI$<)H1Ya_=doGZDrpt*lR1GE>7KS_75%P)^7fx3qbz>D z!SBg<%NY5*kDcVWl=RD;AH&Xk)4PjJm$GHL>vOD_IHKy_=fcm$-ix(xAU?i?`r>1d z?I7u|RC5oiOnyaM<>o=gc-51Ze(DFr(TDOD(!L%7DSx<Fdt9Eh3nTISoOsOmpu_2s zF|pHd@j^JDf1a-@(d}vb83*vvKCW#sGnEbBh>_RUxc9EW?NV(v+=1U}Kl3qO`pown zI9Cke>4%x#QEdO3!^Q>tEl+cP$U1ZN#amOn{0SLDm-)+iPCp7BhB40Pn_zWyCiVux z2K$@jPdtAEHO1~L;<1$2>cy5X=sOdincK539*)A(FX5w#cLHh4@w61z8KZLtJPseg zKzLd#-CM>r!S)q+$i4mqF;(s_&#u4Yc-P)%ilYDMHxTce@wFX~XOt2HrS-okw~|lO zFPHD3i{wk+*UI1aUay7do3S0c#b?H}{egqla4O7#B^&oXhnx`GVK`(Ad)|LmLB=$+ z$5Ga$C_tD0$o@(l%N^#KtSWu`;$W=$Gv4b-NE>oV?4ZwbarZo17UAnk_WTdF+Rt~G z=keE+jEVC8Nk-mv*Vy*6eRqHSmn4sk^YQe$7|Xq9Y<2#%o$fgO{{7hB2yc0QKaH#s z>MRK97t8$e^i5=p{4-G8epfM7R=s&vnqoUro|Dy;u~O;Nc!baHR7af}e59Vc)blGJ zed+wC>d87Oi^zFixntEKdC&iVjmFCb__;v5EEhjdY{QN1+jx6K`f1|$(ZAgTpfcOD zM%TrBlyQg4<$a5f{(x(hIYQbTa<+-HBjjms`+>BFoV!Y%x%^TDR`O>*+nc5B<NU$6 z{geFs4{7eP?f9Y-og0<d`)-r|>z~BR&+N^6=S+D%U`Jt`Z06I0>Gdo-UV=RHt(Vr< zx%`j7YsxfNKI6!Wi1p)fb!7#dLcVWoD&zX$s}r3+<^XZ8-d%V)2G0ZNHB%f`5KH@S z*!zBxw(?_mXN~*$de5Ki$T<JE*qbrMH{tbA^*+XizUnSW-z%k6#by1C;$W#5{!yDe zlfBcmE3@QX$gZ_}Wn_H7+w9I*myCb=lRlqII|@H*)v=L2hru<t%{a5nlRQZN@7a*| z>UC^PzkkL%bZ1Xj$o;w)yMGZQ57*XaHDKex?tM*N`?f>s<Gq&apejFBB#WF;<m`Z1 z%H`YCIn~^=#8!!#>=0)UR@QbqH<#=x_}zz|PqDR*IJ+3~z2QG;c~@^ohm50q)Nys^ z-p0o-;_5Q?G}tZ{#KSY|=(}26uGAhZ6MH|qpZp|kF8|`{&}n@Az4r14ZNhYA=eUPC z-&fuRYxlN;`PQ6ov=d=5WL<{hcwY}^@a1mXW{}t{<a{r&H&gv%#Bm|p4vs%@z8|hn z#cN~w-oU;K*!e9EHsfzSjt0Ow_Akd(rwZC4=d(6MQTw}Xm&2GG!&n?1!#Ah1{|EfM zEiU_$pEV*fMtLr@#>EV2x8dbVu~$XDO89%$wluzeqDv#?&J&Xv_jtInljynbSM|`l z{}#OB@IEnmrI^fo-YL+{{&;DXoLdBQ;34=PdMYza*(>o-kPerTJCOXm!)Be3h3Xxr z{#<YAzq=3e-a21;*6rCSPkVY@E`QcP+0QkXwK@)j(_lG_Vbf32zj6K<*LJ?8{D{*E zI9-dId#mzuP4`8y_pjLMir=y2_)ok%?AjUVI!gcAWy%(}%@~@i$+(#w`7eeSo&UwT zY2?pR*V}kZpKRt4o+YiB^ZBloG27kwYl*o1MSTy#ylS?5n(^~%_$K{HYvj*-pJ8O? zJ5<&mI)P6Hup#}@+kO)tVq`4dvc5?b+w@=Wl$P}i$M8uran{B*>nDwozMu0m<ShnE zwt611ts$)_-+ds@1m*G`IN0_^$C00yJVL(onNPHRN!qva^kLWSs>(VB1L@m~ZTSzE zyl?)6*W<-ZzBd=8`%J!EB>xC{Kf%Ah!Q;58&6Z_k<Q+WEp7{>l91pedF@O&W;bxKj zLelOKx82Fjch$Vp*T8WTGIGyY1qa$6W}7h<wdnsZy|3R)FL8I{TK76wDgK^k!|Qk% ztKNZhJb}*dLdKfcr)$R2p1TnTOK>(<do;s64UVv1VX^n_HQExg-(b&k{IiblCzDgs zHsg!WA@@CYWu9z&HJPqibK_(-wpGUw#l->qXFuz?R+fGMo)$wxX&IOKQ+dzo?0&Tl zUo~*95#1Zxhoz1$JxKi5^_*5)n_LSAczVCOcB!g#ToqA%IKI+{n(uxGKzaLf4ir1m z(+}59Y-j%PRnivV^%;6(USrnE>dc1gVFE0LQ{gE-9LVNI_~|NU#^I>XDn9=i5A(Gh zv-t;4!=~{$yauguJd57A>+qv{^8)P(4*$1YEUndUZ1GMZ&R*fS%(EeS&pNcS6!^~Z zchX1k<tOTUX6xSf)QfBvInKP~Bk9vz-iL8_8yl9eGh?4FEXD7o-LKhM0~bvzYMU#w zzp6U$nz8Yt9lu(^JGnfMD|0uW%;t|g$CN6eotM^vj016$F^=OMzp9SBFYORxzl(uu zHu3v<cCW(~KI*wPexp-M`phA3*8zKdka@6caQh5<@{IDz8qcOUxD~ml*^XVU?Nk2R zZLWPXzJ&^G+=!p^q^~8voqDd>tgZQ#pVYC49^L8tGTE7T+~0oYHhqq_XIu+i;Ge%e z&+})V2@k~0Zgxy&Z(G|hl*zjNZ;H>l<b93&(l}iQJ(XQ3eS-6O*U5O<OL6rN&br_* zV`(xzWEolQ@X}hIyp!Y}u?AMzuZydE`^q!Sm5$fCZmZJeNBU(>MdlfIvd#COhV(v8 zp2zV%pS(+OUR-=W3+cbOOg(uvx)Jgn;t#xbm$w<&1(h32&wR5UAr@|>cV9AJV*Bs- z&N%Ptkn1}Akf(^J^Kdv|hi3qMKZ4WA>-mjOu7ic*GW~NI2fi;KpCLZm@OReX=t<@# zm<pw!7aR6<Zk;^K$$NvmRs35{xxD8;qt1*2NMGJPuCF`kdlS7gR=&SDyGz<*Y~Muh zHgwJ!CjHctckQKkV(OmpsISU*jxu?#y9FP4N4mc%-&A)E!&CM@;-7GrHFta9;Cgy> zr^Chc8U|DB=YBAY&KHt>KdiT(zS0%+t<B!%?0yp$(>Kb;mdyEIO|QTCZXmfE@Z6bB z>5Et{|A-Z?yPw><=DG%9)&eoOj7&1F7sCbEk#X$jD7ykKV@Jli-o{t=;N)s(ZT~81 zCp(|M>w@?h0JGVfv0#bupOnixT|L|UFYLEs`CB}kQH_pu+22r1H_^5=^_*cl#c{2A z?sv85fS*sQ?CqP)IzH)x`=zXQOe`IW&wOWS4K;B0oa1WJ+c{sC{H(dWm=iL0;Vt!M z-QM)4XPjW>CGQ9MzlHdC2R`?8F8%mJaX*v&=WuM^nKvwUozItdj_0gd?kO|*2>yb~ zv&EeBo%6&x{w`Z6&VF`Z!fm&8;zc}F6|;G-sLY)FH(SQKcD4VBx;Cn7wDXzAU4)<0 zr#|6VF~vuJDN{@=yol$oaGbFq_u=+Nwsv9HiR@d(&VqP(A5N&~7*4Ikm$rSSZE`+q zY|c<7YtH=0Pm}o}-xsqsROa?(Tx~~rDv)=Z{f*97p<DX+bI*NyrFVlRVs|P1U1MqA zw$VS=@KR-tR9Ag<J)~^L)Bd$nTh8`1^8dBSI|Kf9iK{!;;%|%VO!>L;WZj|NVz-yH zy0~r$ng280x#!fMzQX3}IEk%?(J${HQ|ZrTd;a?=_m`~Ow@t$Fcsh&T8Si!)oz7tQ zx#39p{3kM+_l$X|@;e*xUDP(?fK<6>t*yV6E2hj@xci8sTG{^Tc(s_yng&Dg^{E(s znNE+{p5}NaKA)k}RwyaYo9gLHUPW>@?{fcP#|}1LpstL~97XqT<mDS#zWem6CSGmx z9d<iiCy~*E+<XIWqMnR}DXz@x+M4F-ssWh?x1Y4{@N9R_8bIA}@US`#R%dm#rOo?H zy%`HO0M}pP_!PX(VC)Y5e0sg-v31_**SfFU@4Xqf^0h)z)+D%#uKVIMYaw0hc$f5y z)2mHR<_r%dD`N#Wsp}!!pDb@dx*kmTeAoX1hTG5mDeJ>kB`5FFnU}a5?y;ZmXBh<b zmdz5^Ls{JA9qA5S-on@I#naF#+PWI}ttqQ^;Ceo}8-Kgm-&VOJ)cpY+s<1OL)sBvj z;~{H}O{RCo7@n@ajJM4^>C4$)n!T;q-VP60x9BKkPmpIJ9kX7|0=!;C=Ph*1+>2}3 zdcQJ1YX@q&rl&5akL%$`GKwkRTlw>pZ^fQA>}f%-@sR(!O+RPWia(po;<%Vj?>TJD z|Few{Z%0DL@Z7?$jiH47YuJAP`?K~zx2oFwTH>jmdue^XYTzDWd(T05s!P6eRq)eU zzGrZAKzXw9lRk>fo!t-q5+v8#4k17Dj!KbzG1<3Q)}G)uW7RGde{-eZs{XR{ybu?U zv*}V?=KrNK$9W+>o(@NB%-SY(a9o1z<u|(ameX&(>wAWF@H>8<jDsok|G|A=mUwdR zqQzowDcx~+H7@U7LvOr3xEY6Hsf2nGYpV;m?(x+~Jng{WIK1`|fAMj-t*%La8^2Cm zEBmmrEBL)FUDnCF4_mL)2Ay2aF&nR7*T=SxLNoh+z(aT{!shqjU-;7TQFuEaZ(VSd z|KK}c{iEoSbzJj5SDkQ@wY1`|pUJ;N-dF9vEM{Mza}7Eyp-)M1@jDym;v-`}GJYiM zNMy`cb7j87@ng0_9p^vawkwxsmmbQUsZ7R>twF%iI9()OzfiuP*zGUhxsE?$?{RQ1 z9^Q8@<I%GAY2Mp9mDLuq<0{*q9ao}Tb#)wuyM^NT7X0S9WTALmqyDVRkhv4z!3sJx zDS=<Mr@!)doR=VbAYP{^vj`W*s^_1g^5SS3`7OoL7G?4bm$~{a)%P~sAWu1Ynmb=o zo0fONe82fe9r<tCx8ywvr{&4Nb(b{u<=yo+`pr}CX!X1=-xu_HlHXp2JS*fL@T~fp zlb`P$@4#rXE>?f$A)Uvb>*TpoU3u`TN5*33&tgwia=*bt#?RMQSL)1j<f-cK3`6XH z@~imR&L3OEIQ}>AOWMg{8|b`=e{r5M<NMMxW4gQ1zba%N)->hwjFx`lrt<cH%&}=j z=2PnZO#Nrm<7+y<M5hUmKJ)j*c-C*uc+lIZ-Ab%v?$s^wzl-;R@RmB#7Uj7$^OnZR zyMUaf>~4h9vgKXlVmSAc+)F;P-w|K6@bNuA&sE2JWdBFzQZjyvO#A8k&Ah5N9ACtq zjCZ;>+_2*$b~I%7$!qm7tPu<A=;?Tc^v`h6kWJH-yOO>?L)!7Jj<3c=#_>+sw)b6U zA3Pib9XD(5@NuHD8}OYzohs@+LAhKX)9qgh=Rn%f32a<U?>Tt7o1NuKN@LHz{Ccvu z7y%1l6gx|Zk6hRNtH@KGe`<>>ZR6|p+~43X__&UHMNRj4dAi~29&!qc&-rAZDV{PW zpclMr|3GO)#Z&m3E|w<Be>C|WA#KS7b$*2RKJq=Royhmlk@&lj?R{ab{j870<UQ{+ zyV#O<x|7(w3>OzKb03-GUOyS{Ux}-6V%7GHZ^iEnoGf&oUS&(bn|zV`ZhP@{EKIV$ z1G<sbMqQb|-Sj^?s_RGSkH7n+KZ@r`>RQBqx3A`Z_=XR&mUI5Y;0pTeBZgYAb2}S* zikZw4uT;ZxS54O~4nKuCwaAwCp>uEH?mQf9!`)TIoh!r->dTq~Lx0sa()DHap7}d2 z$#3lZcQ{I4c`J1sj?eix9<NM0`mYls8JqLLM$Zjm;~IKpF5kV%)!~PCpsj0!i3NUE zNBULsuD%ajp2AOWaXG>9+jzRsb^ElsAAkw=OUrvWWZjtk=ySR{3#fbUf&9ycTr1bX zFZMIGVz;{TAMy{XX8?ZleYd@G86Vx4|8AzoIc&L^-7mVPu5&z`?{_+<NP%~vqx~6l zA4b+_`ToQ0Jb2fBA7#ob)4{cljsnxw)kOY#$v9Se`i=6QURs>z-hGa8=c{j%b1jtF zjfAsRR0T(W;rasGe4i*lM&_O6+5NOit}iyd1;Z*kF0XF(_I17%+vo9j74kAZ_fz#< ztBzA#1MOjg{nGO7@7(WnDn@Sn^elh0g(|QL7wMl%-{F^Zcn;4miKnMGd2fL7n+p_J z?l|jnE#ZgBbUc*Kc{Y0AcA#=yl$*~lW#!$)cb(R;5$@RNS`q`@oX`BuBI;|yyhqtS zk3QGn^>SEY|9?;k>cV-@46c`NjQo}9+?bv(lW{Ho)wIpCcsS1-nA{W6e|vW&b>XSF zxNa-18;XM~rKcZh2|uL2yq5YJD)%Aov##SAWR)W`*WPQ8_A<{U=dv%~^PjbUxAcs6 zpUalgIC-Cqzq4<;ZT)b>_Upvf<>Y-P2J(Go9OS=6bC39*jJz)t!{KOL?gs_Qy3O$) z(!W#ZW@RVP=~DUch1@fjuzN0D7nAiDAMWPQbHzj#cBRkk(HhcWCwuRx?A|Xnnv`XO z*k6g9du?xa{7wbeDn2f&t{s#AD)?Oa&gA@$yeIJ2RqS-ZW$s-ip^~`Tq|Rk{yOpfj z<<wDW@7S3A)Hk2JA<AE%eAWkSp-eG4k7LVhTx6VcuKi(-8?tR0+cLjyr0oi6m*DLB z)!M0_a68jA^quFIZ{@L_Kf^UAJ!_d|e&8Vd=YKq|P_{i;D;-~lw}RS%(K!6dcDmy` zr9X-5d-<)o?RYxm{op%s*lz7!dCSO*-}*{_j~<;>nZAtN7izMxTgAQaiI3x_H@<4t z(x%mszaIYJtJ<ys_P>VfjH$R^j22ek8FW}I7D{b!O_4v!{vx^!S4Y03=X=)`^4G!T zBDnJaZMJK(2c8$x;Rm+m`|}y_JR9?^q65C3g`4ntIs3b^=@~ZFB6k=0Ss(K*ad;h^ zYril%Z*mP5X4^mVoaTDnfR}}Md06?(NqdQ{dDb0W!805iPprW|>^#1bIH1?(e0~*u z7pv<Bb)Bhve3@}AL&#`J*PY_A0DD@&|L9+_kZVp_{x5Pe<Q?`U={v|O%f=Uq<Dc!- zA>Ww~qeJGUrfto4pP$&6_q41NSwmXp`J|7aCmGcs|DiZs`p@!YZPXe#dYV36U<p0T z;ws;mT9P}6Z7=gp*UH*0G1?S1SL9>9eU^P?#d>c#oG9MUgH!FFK)**J{i2(s^&w{> z+g8xwLUljHrdwek90RAS>t(t&=a<Y!NdN4ic*^+i<~Yy$Q{u51-ZDlg{XTC=FX#N( zeDk5}e+WNSf=<xcah{`YaBd1@jK;I_W{k#K<*So_2V3(Dka1=0)!mUEztS)BeDm$? zEXdj~@6h)}?wKp!r?@%YHTV)a-N^ZpjAe-{d3vxleN9i`W{o&_NDP#yCRWA4cdqFN z@bn)Z(kJqvx@yPe`0uWK4?dVHMjOC|bb3iWxtI5KTn{IM>Brmxqv1hiewCgWO#f0H z_Vs7;Z{qiBc3;QN%xhRpW>@)#tE(S=Q`h@sKS}?U@??$Rt;#fp@yb`hQSO;#*p%;9 zN2+5m8M#(6E~+s(nKv|n4S$qy&9QY#1wO6f{>avo;2Zl_NUQ4HW%6WPPR8NBg4dO{ z*NTOquG729?QIkGQKmnPtLk|IPmf9e_dszZc824>312*6+sbhZv386&Jh?I+<Ua+s z$J)NATrcHXD>p8&rmlAE&UclexNQwt6CuwAv!rc>XYCKc#Zo>Tg@<d_iMQq2)<x=B z!1npBb=%bo-CLH@XO;L}ukFWgUp#HZ-yOKW0sgUnAv`L*1>6IL9ls4@pt0jSl*_y7 zRQ3G6R{Li=-f?`_n-1sU`g<G?qWeUg^~YV_ox8Cs@8RvLskbKH1kG4@!T$AZ{{|n2 zvHL`2&gJ8Rf8mdRU#Hgyb(iPQo5jM{<UdFLwdB7p?|6LfRL3gY&5qONT*tqs;q3)+ zl5vXXL;AO}F3va7uY%c*^Bw&|++|$f3F^t1@_gsM0J3(%5spt{bLRErdw<%zVURgF zb?J7L*t&=8@^q=F{&uBZN9;J?b@PSoX^zw1TEI2+1A8*YdN4a~fh&|Br~Glsx1{gq z;^QJde+4prCHLEl$Sv$#6Cy^_{X5&VrTKr{i^S4R@~wn?$2r1r?$4WWw@lu&hp$5g z`^PI+o}5FS-=S>g)l7gR>}O8rsq&nUi|)AX4WsRkROWN%Te9mY{_9oNHBwI9aF+cc zY|A<UWnBX&Y7Z`eeeI8feWbr?+fCZp%IBNuN$Q?O=3qK)VDo(2<&N93r=NNT&}X^r zwT{oGPu3bg2uG*z{rO_+U^s*?GADLl{BL(|E<Q7-W->nCbZ&&$Jb~}lZeSzaZNJf0 z*O@Y_<r$_-+LK!#V;3`D_Gz*P!36tF`QsdZO1pG09`l~Qj6NAZl`%Bs;52DBIyau~ z6CiU$k8=JH{NKXY`JQ<SZf4_XF0PtE>oWX_ll=ceU0jTkKmJhVo__7xWQ?@`AiIxH z_e}ifJ5S!T7SQztc*g$S(i_MdzTP0Gw^(^by;-+5&rY`!_z8R8WcxYmwAt%j8#t&V ze)Au?^~i3h{F$)H{sMKBC;J2ZT&CPZVm{+f(~jJ!Ox6j#R-OT5f5K;zlwr=E_3*aR zKVx&#&y_hi8Pj*J>-grHV!f98OAS8PzFm)tt#rLto#{`k<9eF{`QDyq{LEi?lF-aM zsibTfWm_tHdKEE6W+$<Cs62<O=LfbPOIAHRcaxU&RL@d(#;lK$Z?3v#;kq^M8$iau zzbrjI$+*~G=$ro8R_w@ll_K=$;T|!9owIQFzn$77T)ZWY#^A2uD!MQ6j<HDm|3v47 zcy|1f^n5$+FYgV?UW40*$Qh#iU~za34nI?V?pm?O53~8>HZtcqcg(NaIr)0o<~v_g zT-W5Ia`JqsO!}d2+9vMklmD3go^Qvp{du;Y!Jf?LnuM2O6<lN5neQrzo62Gjp0fXe z^z;ipEdM>YI)I-_@Ly5-y`s*HQMxvD)B8id{ZGub#mmj=s3|@N;VEPEGsdBcy0<z1 zK=dG^G2RyN|D)1-DwFXCU%=z`=c{Lt^LLQ>9N9b7@tC?w!&&eJOodY*c6Y%=YZz?* zU3@&v7murJE?L9q5ud(US{qY}4E~$O_vfl3eZynbaj^WCLS25$*yuy~wL86fiK)); zy8V0PCwk8syFHZa!iEk|&VKqk=O{N$olnWbWd-^}jypi?&UN`J8Ml#_dCC{!XcXOw z(C0cxpMKtN@-BZdy{T282DzC_w4843=$5&aZIv&C*OF|?H}S{#Z!tf;0WIxcQPy?9 z*6M6MU!Jp}p#5UfCc?9DjN|9jxm;a0s_ScYWo_k6>RB%Ss@c8{pF>6Xh`$Gjp}F{O zxSbEg+1M>?v(52O(kt>)#{ZX~??`1fD08whzwA(_d`*yY>n7Km?FY){JwErsHb`9r zL-@Fxyx&UC$H5CA-=*_^ByW*h8oyWbL&n=w!_#Z{dKl{3&wQMW)&CGTx5<+^@xR+2 zC2tYuUl6}fu)7{^j)5|GD~y9Dad4XRSqG$$IL&wF{ULqGm%^!JtmC)xc;Akn%x(CM zeT(2t`>*g%8|vmh+Eo4%lzr1SV-b#}?*e+?#IC$szPAaduE*l+f0%8vq*ro&AUXe$ z-2}eJ+j2bq=3FaWG?Z@$uAWwA6g*<TleCPh9)*`8I9{ww6M9UeM?d=B%#P(Hv>EKZ zUrZcU#j{UU?E#dlEFQ{vX2QpK`JSP-&7N=C>*>3dt@+Q?rg-@gPhZKuzB=7&ib=>b zX`W@jtjIUyT#m<2@mL7f9q73UTES-Jd(z=;+`a^j>^GJ+M!n_a9Sa-f`%2m{u{>6t zlhoZA2k95Nl>KLKcP--W<jt-lyj{A%y;=LWW(|&4x$ms-4zvu%OT-22vy}dhKV2!N z<+)Sd%F6tp?5kvSBJ164Vwl{c6L;#!H_qOWe)d}--%HZ2HG_lTWyrJt7N~&l{119J z`ejb`9r)V8&(|O@YkU>P#|8LmQiDHhyVmOBq>lC)Zyj*ogfC8KcivN{@KX`?zClLi zfA;o`W&Mf!p&-=f(__R&GZ<iho*3yNZ+&I@@>#~*6~NgD+YV$6qQ@XfnVX${@QkV1 z1!p?WGh61*<T>DFvOlJO`j9dfuqIAA<0cJOp)G93&ogXot=^jS%J_^P<Y%qR{Fli} z`_HP2Sp`lcv$H&#A#LsJ@}{pX^T%4_WQ%Jm@4W47)4y}N^n;b}Am2sG{=}x{^r^zW zE7Vs69)Rl|pDz7G=jYS8DA~=FnXcYi%4dzQKghb7%m(n6{Yz|@LGI^$VLx@Ik1}fn zreE@J`={H!1`oj?$F=3lIQfhN&DfmA%IDkp8_wS-E_aI0mt8{-i}9vq-9Py^YsWkX zyBwbm8AFmjj;w8Wl(K1m@_pq=_GRp8#<FG(K{<Rc!FSe7Yl!nIuoAX9zCil<IDc5a z%u{#?uC<?c`9GX1DPFU_<njD79MT84N!k!Gyi%Twm6#!a#$#U!{T(N+vkt(0&>L=Z zJi@uOM^EAOHvX$b*W=iHKQ3|&z6V92tmB8+l6Ug29QVe>hvIg6S<f_Lc&=-IHgvO} zF%lQz=qGt@l=m_6G8Su>I5?iaS|%oO@c=IVRQKUx?^E`Tx1G+<`9?KBo(jqwr{0V& z*-p+<a`H^L(D{?)|Aoz2^Yr=++9fztyv~-kKU?$NucmlOKXJwrbjI1A&aYh0M{C%% zQtYn~->cjc9QRayo%0XiFz;UZPl8eO8zs&j$H^h;A9x_2v8_TSaaGl`Kn<M0H}<!) z`v5k7FW*D*AEVqLdUkLf<hy@gx~C2Nw;~Q|iN*S4Hgtb%U|Y|<S=uqx_}lqsaGLp* z50r6_Q{OVO^Zo76D%xFW2>CC%QSwbAGvi1`;OSZMdWgF7PLb!5e(HUP9w*V^9bBwu zQ(d;z!_gr2E@b-yOWl(fYD4FXmmjr(3+S<k50-dWU+&#!wfp2+*X=s-1M}@a0-5hO z6PK+vdMD(A@?x-wc)S(1*}oU^-7@b+S(_kpNx#5t##7|GY~Hi;kz+OgT#2WAZ+eW* zg^IXN*mF1AH?Z+toNUESHyl-|@BU!hueSJ>zRCH!<Qpgd11TrI&So=u3Vci6y|#Ha zeNXxcc)7&(A?F`)?gO0c<lnrHrXT4{`=?7A=v>B@94>F>Z_H4B1UXBb`=2~{Cj6W3 zzp>#V*Ut?0+z->m*BR{F#pa9fu?;u9aWn@y;pj^C=UFJ<NLSJ2DRHv1q_*P#exrZJ zE0$7M)_i>$FPr3T_`B=P{#DY7(<$p5ty8X*GMNkVI^;jvm%2Whu|IuImyy3)nK5Gi zHag}TeNj5+nY1F?^3M6Le4W^KI{aln&)Vm^)&`Stqd59U9pBTbr+Q8x|1R4ujyE`W zl047R|9s_Cv!@^B4CSXP|BZ96vEx$6Sg*12-5}q^>Wpq99A_P!i|M<b%zOCm?DAr> zf^v}lnfm3#x!C_yeKpC+_r&~nPsSJ2hU>}drQVU+kMH@dIQ#zE%BMKKbv-@daQhGN z!<T%LHgGsa|HQ$m@_%7_vE$S6+Yvu4_;4Ekm9!lTouoBTCUa%(fd?J8mfljH+sXTq zkNZGR``e_~<)gF6JrwWxt*7HwIzLGF>UdlY8Ry#vE@#tUeBOiK-YZK7@%vyEv0aT0 z&{{iEy^<Jot{Q&w%`fZdmtb>qzWYWU=|jo8$%kxslno!#Zw);jv(4D&qu6(Xe7}b; z{`y*dZ}4HpkI$gPY<?kr&;RyxWJ8{#x@imYZa4*RHE>y*tsU9^2zjM!C&~9QKGSAQ zT;m?Jk}WI5HoUmXyT@AhMCbk@Yd_rlsQfDBR?;Q&E-K=qr@A+lc1^Ochc@%|I_#*c zOf4~vgVL00g{w03&UKkJIu^pd?0uU3vvBb%-YQkr{wg!Eo*1i-Yq<O%*E@M5YHAzs zcrSTN<-5qX0Z!*Z0qM<b&yl{mg6pH4`%M|o^kiloq)*hHw&!#8XKq&BS#lpqUwGQE z)7XCzWUNBQV627vAanWNz}uR2s=&<~D{;KsGvG4Z+78FjlQ_D?xzF)*zkGMYAo~ra zt#$4xczv~YMOx-xrElOX^}dP6#9kSgZNGr+C>Tnw%-em9j+t}S%&ET$dbTaX&+N$e z*GF;v1{>cNV?FUOo&A}M`~f@&?W=p=m;P;e<-|v^{oP~8n9pA?u)iaupMPIz+X`!+ z$-P(nW{r-KeA!)H%lRe!@#%kmoIX?dd^hxRO?2HYZvRzYo>4f>dRlp2%Qy4%yXAjB z28ydTI6MT04K}$hp^N=**`IgG`)ub(yB{Y5A?NDg<t1fPZ{}HyqW5cb$~c|0SB2@; zYCrcT^*ky5(tq~}tfphesI;L+HL+AknctNe%>NnV+lp<=q~E1%?nBq$G;3R?Pb%}# ztHDgDfs--L-73%BuFa9SNgw~0_~}H(BjgsM$7<W+(2qV-==dML4w3g*We!oc6B(C~ zwL=|;*q-Y6MCtE2pJ&%RYfXg@l*_lQ<Jp?|Re#943f}#{{7=jOsyx4_f1>)Pv!y)W z-wu7)b~#<Hr$a@uM#*~v86T<h9$ehO4;}FGGJbBvY5LZeiLWzlOGwMN>C9F73mUm5 zf3VGa<w?>zIA2$pSLN*v??6+>zrZ)nh4;VgXKcY#=dOpJ$-c_=ROkLCBXecacYY;( zzJ>IeT}ZE2)sb(s%b>72cggb-Zqh$<I2)(1?fY`tzzSlj5<Okh2UpRqz)t(eLcX~* zD$jTFKFTloE^-7JXOeXi`3KVBSNgPbT@~7aH*r<X{sr{Q+RhKi(~B-;@Vp-PoB8Ae z9G=UU&1@U+N#4~mjxFm@f2v&iDVlBboGx~!KtKBv$!#0C>e_1ipgc*>H;zX(iQx@= zzRtaMt$4Ft?D&7;e39~(%A2|T+sJQ^n{)W@YJM)pum7^Y8aoSB6Zh5m0ETGaGB<Kw zY1avxvu^%=bf3(I3t$_4Z=&}MHk>0a-eBB|I2=b#S#p+;aZ*h-)}kL2vEN>LC+DZi z_m?^|w_}`gOVn|h?MBDxLwy~-a(<|^eZ^qDG2D*tPx)^W+k3IM+<N|7?Y_3sv&kxL z+8WoJw69#-tJyq=&3{83$oS2E(ld_n1-v{A>+E;KSuy7y!r}XnXUk*BK1_N~=lhd+ zDcSSYalX1T9yw!4{*gER^Y`-YMdE6+ZAoY=KJSNpq@6(5%C4=9J(!K>^rd~z&Wzz` zz_#?Y|IW^jaQrS#GOub7d?oG{i^ETxD=L4X;`HaMJ@4Cp(wXe^-|V)nEang9i<9_f zy?no^W4<ysK(7PbC-8O;pIye^nUgVz?|)Y=b4_NFHCFkIWk^5$kIv_t{CN6*^9!5U z_ysO9N97$hkB2q(Yf67>2VL3UXeZum>%$pvh~r$dzmPM?wUPOfdDqK25B=ztdqZLS zR~03fKhsBBf*v>1DRYn0C%B7Flkm1u*^WiDyUOSPVozk>=P(BjhL5F>cK$N_)|5BT zg@@uIb0bUGeh0<Xk?$c5@pGR#tCEv%#jBM4)p5oL{HFX4d9rrWD`eaO`9GePkoN60 zm;ia6K2g5A<<GbIk>un#B+t+vk(c$ePA4zxB3&fkGs?U|hhw2RjDlX$^6dE{e-5Y9 zKxH!SIsM0%!ZqY{mA+K@JiDa)zkHWIkmqsL67I!M)(_72@Mm%Mide{d`RCBnesSp; z<CwA08TYUsw2?3O)SdkE9N*?U>eKxAIt;P@u(XoO50Wqavl)|~zMyy1pRuXmKs8wD z_$B<l>s-d|zC*7(M{c%He1S{pojHb=u`6@43bN@V$oIC4<^9+7{7`v1RwM^nLFN%> z-JctsKR}sgxXHcpJ~rM-pO5G@gWh!@-yjle=~v5~z6+iE2hLV`zB%0>|7`Z&qHJG0 z?Z=M3(3*~u;Wo&3>06we&CYQ3n{ri@+t+?i*lhnTX%CY7xH{6-HW%+1&;0o&{@vjE zUa!4dhj-hIdnn<2N#)W<zn1-J4`-LBZ&mGIO>tV=wN^(RaH8X9tH|&CgKWN!&8_*o z2JQ-pk6rkk6^`+Fl(bL9)P4B7uB>aelKXsh&lI(sB<nnKU$5bMBd=UV_Xl|%ckSO* z3b*hBWUhba7dC@@ZyF=*F#45IZ{DFU$Ms6O_hG{w>^p0%>yM+)TA@9JqN`n7Y%T2E z?KnukP(|^w5A3ji;x=vF7WX*kM{g9HwzuNsD`}nOzZjmfpLV2(b35^ub*09^lk)eJ z*3G%Bqnq~kE%LgNn{W7iaG$=dtN7(TKFyj5x8o+)V#eOi#m)a;GiN{c9f8vlIO>Lv zdeuCS!2^7dKIxUtRgq_AN%6A3=Nf*>eCM_7&wV$2fqm8S2Xu0rHuD)YAIS$x<;}Zh zuJL`~8~!RREo(q#{jPj}zFoO|D}0@<x$Z{TA1>`|ax*sIKF2%7RlWsRWLw67Oknqc zFc5xaf96;>!s`}!N|SMja%;s@LwaP4Wxh%Or{0VO&OFGB)2Incq)nq|+LzDh^BdjI zwH>TnZ{@yG?marcA@3vbtNl-4AN!qQAhdwYHJ>2wLCRzt(?jZ?L65|CuCX!DH^=P# zj_fbgo4(I0aGLvc`uz8dYanY8eMZPLl$_;kxYbs8?&-7p#kq``dQ167)S0@Eho|jl z%u3E>U4XQMS-)@%T;uo#7;nD-<Xxhv<4csux0&`OJP(xO3zZDcwFP7CPmp#A{ie!u zxx5*Rc@q(z(rE|(+{~UI*wqrwhm3i+4wk@A?EcF627K2J#zA#u(ifQTPtQA7L!R~g zwc!7JdNp6>`%Bh?J)J*uo#g!_eeTt8knet9<2Q3|s?p;%T;5Ag-jU0a^Alv;VGrpU zqqS7LHO6bkYGh5a)$Ez-ICJ6#viS(xFCD)py{Ge!vH5D4B>!vDSF(F8oAbVr_m+G= zZ>O%!kiMrArDaTbVm0xW?~~*0w}Fgx%((ldkTspM)@luyW<TGQ-hq7_kGIV@n)C_g z87OOfAIk3UaZ=y*aL4HjIm@|8FcId*PUkWQv;eLy(+->tBXCz++6L$TA+I9NX7clp z;+{3wbVCI`tn9tLifhXD(~8>7^8Do75cckpFMZ6T@YYUDWqsCx$`8Xq#)6I!11HIo zxTr=}+Tx|vaaxn#Yl#KhLu#nMs<xi|OUR#2{-5RCL!het$#AW*-Jys5$I6Hce(0&L zAMx=5+wxpFYJ;|G9sQundTo;S?hE#HW#7NJnTnSO<gEe!u=gZs8<k7nb01}&Q*P5* zZHw(_<rhe6OU6dqC64!l8qnNvzCm4}T>f`&4dlJI7F;TA3trE+{lsyD?e3fE{cx9S zh|gMxizm3?T-@AQlut{DN8Ge5yVvH`?7Nkn-@*du1^uMuS$#Rqv)<cJ%5=ba2j#cp zw<O$-i}>wdyiXFx8KXW#n>2_&(-!1==il(0y5EA!V1eVq;cn+w(d$E421h!60y3^L z@0)p#o+0KM{^=V2P1}UK|KV*g4$>#`-5TvAWL)z_Y)?P_QXJ=h&oYJ?Wd*v>s~sKh zpzCP30A@ID0UhXlo$~|e-4vdKZyg`$T*kgGhL2&g<9p;yn^erUq~m<+N&oR0$p18@ ze>VNdv&F@uuC<H-e1tB~+omru|7n`B2%B-2=Y~IUdKPYH+UEQDO=LVx-{<)1yInX+ zdDq2nj@#lY>)}k2=MMaTBCd0t+-(0%^74#%zxoH0pRuSd$!P(qEl@>T`lZtrr>$KA z8GC=Da(T}Fm|xSDj^XbnmAnVK4jwMQw_VBeNQ?d5_t~5O;g~^>{KrSuv^)&<hn4J_ z2G77EwzuN1g7|-x4Kvw4;8)Lp{B}IFhtV(=IzwT|IE#Z}w|K2@dxW%%cWJ@)<JrEP z%*pEcSl!pc!|F-@dnxBXCHpjGK2SE}@iM<+ll;}#`T+aR5U&kzeG+7?rSxTHoMS`j zH%WV{^xkWI72AukdwV(MT@yRy$$W>rD`ad@donZrss#*(RWK8hma*NLvw0k{=c>Q4 zZFR?YO3%2WJj;xs^J>VLyq=EpTzZZ3H^}#j{B<DzrE)){Z#ZMeAL9RfFRsI`qu6)u zR@l6^UHERjc5WSx*J?vx9bBtzSm?UXnEiY&%=p(s#Ydh4bDvyP313yjXjL(0+u!ls z(hHX1BV06LbNVO>vU|E1NxbLTtES_;zZ{9P@nj8C<}Bqeu7TUyxUHj|upL^{wO!r) znEYDKpI=#7NZYy<=D|31rq4d}=_ZQ1yj#7Yj_x?l^VD5*FXtNmb`xK*C-c6#K-R73 zFKrw9)33S<j+Sq;Z8exAy{hwL<lP6(fi}v_k=6kx-^g>9{AJ-A#|O&)fb$*YD+5o# z9LITfecbtj<i7#lfP5pJ3V-v#*L-mxzbxjXsyJRn?^DFuZ?4N%OOP*~>fq;db`HhE zMfi9H`d1T+I61r`TiJfcf$A=<JydQG`!jZLm}@m-*xQnMqd3W&^9GRl1E)FuM*0AG zn#g;yIw!*q&=JyCdY$X@H|5iIwubbhE>bS<Zi&0R|K}Ms?@c4wus>T)XWw(|9x0X% z5JRn@n%F9ex7p5J!XHP<zggMB<ey5{9^&CCdS`vRyX^lX?HW2{Zdn<aNyj5>kEYWI z={udDul>kam?v#lJMIrz^C-{e6Jf4%`M-%3kna~$9gkG@L-ssI=e(<}qw`^|i}Ccy zS|pXoZ%BvB@R&KK8B3QKo~LXL=Q5U{xUx-mYjbQ*CoA{9TldGayi@t$HSs*cHgiXB zkiL#Ch1I)?4F}6Vg^c`nSiU>wes#0-Wo!%ghp8uhxS8AhzVaIn@V?Lg+u~m_aF#f~ z3a+(ZOj=j<JV?Kdbj}$4KghY9%=qS9_H?D=!*o6EPwg`s&t-F8_TItnJX4M1i!&kX zEB(rM``LDc#qcd;t<N%Wi}tW7^bQ<ftn4mwGPW_#^Vg`a3;d<N+*dy&KXcXEi0{eU z_`~+1$X0*8@27vF9-T8bDr0P#up@ooZ{zL__Wo0b&$OFIvh^(SeFI!z|M#+<+vG`G z+f(_=ads>I#^W;IQS&ago(@OCqwIc}F5TIkKBC<J2E!zH)A9eDOMghl$*)#^HQt7j zMb$muYqv_9MBZKGWUTD3Y?{M{Z8*sP#jRu4El>g0i0i!L-?K#<v&nOzYyYBkVsMQ* z;g+?o<@KJkH`5z0PpCWh)bw?H&c_AWx|@xCs(1#h>b_EqJllLbI#&A2>`qL*hOY|B zoGhkBv;A!tV!wtsYlp|-xEmxkeyZf!Q~m&Q{<CcX`BtBI+1!u+Ci7d{q>Xa!Q~3_B zuAPJ596uso8*<)K=O60pP1lUIYe@H3*|&y0bym}JmGaPrji0giPj=^Bz9KtMfV|6p z4|$gC2~}}46E4D8#)(yhA&!f{0OwmlAISLJdz`xz&v~E!(f)_hS~%B{{IAsW3qCvB zp6vK|=kmUgZwJ5gRo*qO;J-up@>H?*SFTZZbS&Yyp_FGUwmrqhD(qce!*eE#us;hQ zb1Jx2@z`75ZelEL;RWR6IWlV?JPtkWKPq1SC!GofPQy>0)0W#m3`RJYZz&l+m2U<| zL;Bz{pJ5nezV;f(H<$F+WL#?hz;PMriQoC`I8?0WJKJGw>&nIvY|Xl!rPy8!+S@OI z-+b#litXtu7_9!Q#YEN*f3di@f?C>>&$KPeanVmbjn&bZ9$C}4kNl^}pS3t2VRO%t zbhFJG7nRt*MVX<>q%UDAOrhfw%B+^Y8?TQjo4GdY<VnBTr>?CsborOw=h)5=H~BvC zGyXGny1iJ=obDfNJ3C$}J?(s+hcd=sx$=M6-sO0T^o*l=lMPvqU<_PEw_S97i#?C4 zce6Za(B%NSTp?{Rd3VzNF=Z}<nerBuR)?JQdsJ~;N&2&7O)sTRdMu{TXOMAINAvv; z&OI&Pqhx-<u7-4(z>XU9>O#Lf1b1-!!fxlGqy6^M+pzbnU-^x{I*Zxd@AF+T^CgQo z&Up0)A^kUZz;VzYmN?hcwUt5g>2qz3$MF0v+cH)&W45xMLR;y()N`JEEw#a~*xsh@ zx1Bqbu8rw@G~Jir^>eoE4+{=(ABTgbWt`O6+SVcLyic3+6x?gS3Y#}7*B)>0;4o`q zAIt7)>|Q~BS2{hf-d2!rVd*2@hc2_=D#)1H;qs)Ny<N<{N3ZUX{`@Z-_m+ON^Z!EL zqcT@4&$mfy?cCS$w1rRPPaj6c5$wQ6zW4uzoAb7~1~$6StW%G+=5pBIex51H%9A$! zF7*A6pEJhb#q#2%vRJOlZ*V+hjQxm8`kX4@1P2)dHBB5$Q6}?I>O$rR|LOQ@>1*(j z@e!FvI)c1=D(Wjyei6Bckat@(_cmB)zd70OJNJ$}b)hT_g^Q$}3YV+%es$hLW@0ec zLj|18V`tjJv995)5A@##^}*lk*=jotDziJ^^?N(tLcSjGCR~7%o?_>A<<EpXUlx_t z)w$E)V0Z%7OWWc6=Xkmar@L*pZpW##?at@h*0Jj82{Y}d>_f_=FJYN{>3>OFr$0U8 zOU@E&4P1Bq@N~MkY9fXn!^y+dwFNa@8qgBzI&LNXQ0M=Y@2z6q=h&V(OAjl5xfm-5 zKj0$Ifmw$z@9s^sF^Q{Z)%Dk(p8ISIJ6-{gipK|?uOn}3W%B=ZKa2bC$h?XFra-=d zyzF?A^a0MFDPQJ}Eg&o3iC43`J3EJnp^7WDQ7ian6@Q7Rx7mI(j(YsT$8>psez|v4 zBl8TXPVOtx8i}<pa~^J_%Y*8;RK70k%b3#l#ZSg2=D93-R95CFW$uypNZVr^-zB{p zd0F>rjN{xd%CNQCPUUfb4u9{Y=UTqV+8yDfqx{owIaWMoe%Xy;EbZyjC0$$e<E}l= z^;vtUoBi}3)ZAa$5}uC^^sH9e^RbvNCI9)-H;`8cNBhu!r}}#+(}yk-l-uas0c7Ug zttngx55X8VO=Mdi@?PTG27LUz>tJyW+`)-e`AfWKy!9e=WV~C}`0B~F$HdUPyVPkr z44#8~;UqXqdgh6~AwHksql~-Ad(%;HJM?k<pY(h;*a%%A<DagSzXzZ7#8K9<%_5B% zZ?O$u3-NHgx<7}kEpmeR$yk-v;@~j(hboux)yJwkV+x*BJl|8kW#64Rnv3g~+0m$! zYXQ2K@!X30Mz|kZW$&|7MfNtw!FcJd<;nQR%uyPs?knkW8rf;9N2=#^+vn6>hK}j~ zt)<Sa(RCk8x4&KfUT`a%2^lX}79P&l`Fxv7U+LG5i@@PzoJZCx>gWm|L&gl0g^X|b z6*p7ymcFf_YuwA1<7A0ggQCm4cZ&OiH@L>+yMo;Gm#1Gi_l3jRwWy}+v5t2(*jP(j z#lM}ZxQDPc-(=^rbrb()P0mg@ej0wUUkrx_x&}Jq;|6&%?tCkGWvXjqVWfCz2PNTr z>6OWR4yPG2u)Bh~ZGVJ~(lUs$CZum6-@RT}??!FUTk5%Zw|gC4FBBI8T)QjSIiEfI z!BN`KuU*qWz!X>kuSv`Nq$aMdSLIJ%=S2LZPc_e&k@K13$KVP$89Kl-P|>;Fkoltd zhM#-+k;-35*85~;o@uZ<^2r|IeA>@^bIiEsgZODDe^uh^{J%p>*V)HK+|R^W`rQx5 z(JI_js4WihT>)m`zZ8y^;A9*w-w~JRxh}b_z(g{3lXWa)PWuIai${0_+QI%XS9&Ac zf1$Ma@5w)3DSIC7euL?B$b6LQe7FtrO{Fv6<(tY;P}qL@Gv~^i=hfV^|71^lwq^a~ zrDAG0WqQE<YxP^;BJ*gsvv&&Lyr<3v>PQ=x_9W{oeht~yaNIz8DfJ&IPsV5d15Y^4 zJdv!KdOc)bXk}^d(INBs_LV1nan+=!A0Xq7s!Gc|>5NY)M8A>zl6&W?eBPZ;4spE7 z^>Cd$U5b)hS{o|9MklWDez<u5THM!HU&hA2NcXehFgCX(`*~&dIRKZ+<@xDa+un}* z@JB1QJS~sVEKm)<w}ED5&pe1`&Sl-u5BGO%$$N)uBI^)O<@3yax}Tie)SYLAOX!mC z1|Pv%Iz1VmJ6}-#gUA_7<_r8eNgQop%T?^W1)A8O2i0-@k?rHs{@cNS{E+yaAr{-f zD42+c7sT%U&S!0|@8#X|3}Ra{vfzHmSktsym*6wwwf_=7cj09!RDiP`KO+{>j-@Xl z&-)$auPJSdbGfHC7C-6pe3zY1;A~JidLgMZTi<mpPh;bBHdkkFBioJAhssk+oPUF> zjBA>M%g$_$9?i&KL$BdbTYc3WcUAvB>Wr_l-t#l+uE1x%+h+XoL}}Gvpz~YhyBzj| zXUY3Y*$HI)Kvr4!iri=6GRXL_@N*=dp2cC_Ik$_YL95*xR<L)ud(AQ&**{s@r($fl ze6z^O+8*EX*9GhzTfwzoO*>rEbyS<ZwZu{l&j?lbJ|~XBO9^rGocO4yOlh(Fg4iB! z+X{af1CjgBz;fDcoK+<2I^}1Q*NdzV;5?}1_{i#>U+|c3S{2HR{j#19;8*xY`Aej= zfF+KzzEjric^}7_zkWS_qI>$uFW%-ET&z5}5qIp$w~*NV&8ofc`%_nvWB)E`&DP>m zp02L7KJxz$PZ`sY=hK>EtzY5|@(q6njKk3@<R2$Cx7iMG{Jgx&mHm*6tXVh{);V4* zeXBfg|0;g@>VI^+iBEg-?;SWksDQTKb(e9E$FQX>n>MrW6Wo@^^~!qgL-n=kwg=(p z8Qf$}_b>RqV}JPy?Riw#(<bDddjQ#W;9~KzQ;gg$M!Ksv{qKpJ+oiuP-!J$|+x?{S zc`nL2XRqQhWApMn`#8P6mZuk70$<Q|xN=RSI~xul_Zl(w5!-%e=Uw8e(pr4L6Kv1; zv<>2}h1kqkopY4^k(?X%;TISRw?W>StE%%ddYrEQ?T|jtGqpF<*f+YEwi7aUx{~zn z^1iQ3HTVGjpzHC<Hdij|ww(zX3sp&7U$Qsj58Lz8D}0py23apQrqLbM1$v0hEhV*K z;&+{RI>a{f=Q6Hzxbj*5GT&2fVRL8s(?{?lU5+?VER=R0GS>Al!qP7>k1qcz*9BL{ zz&N<i@dL`1bS~FL5&3$n_b2vzO;+aMXZ+zvb^pV!nVYge?7s{7&U?PJ&((7qe|MLE zfbu7^?`tyCUzq;q2kAM9o`c{ZsL1Ya{C%5ip}4pk$^OCY&$zw?;<2@D-q|zGq%9x4 zg_ErLl=k8Xd`*BSl+F4(Ey>CASyM6#k$o?m4?`V4B>i;fo6EOV{@J!~ODjX4_xZa& z9W(wdYg!Fs^I|q<?a*Q+aL1m8>`I^T_3S*b68&KbyKi?qj@_@~WEp-RlfRl+_<)?O zY1{y(W7Tnux<;w@S$bzoXuc<Rx6QpE-w3PaJYDbjzt~e`&sgKkCCa-+o;Mb;qquyJ z(S3?CCql-EzDUOY@Gg0+pg-BS<M9TZ-H5wkcw8vXtBL!@Yv{7t`x~6G78mQ4#c|$K zuO>Us?Elhz1Ya*?*SacVzNWaSt=+4mKHE_>wExokmUo{L51+9)|4*}7%%mUVXguCW zM*bt~P3QXHF5`7SQKnNh_CrA^0{>KXFNeItbc5WBuaWO++`gdxv&(vBE8|&`jEtE` z+dPOrHjCrN;_G7iX0FU#Y|iuO+w93$`+98MZU3x|;tW1#|4)$4!{?m8nEh|8(*EG% zCwb48r?c`can=tPmGPQB`33filbvr)z46pho;zWI{eN-W2{Qj_(<U)SM#f1^fa>=D zla@Z~@5#!1?SJUH5<e^PG>PsRE0X7#8%nrd+0>hTtJrz~uFkED6a4JL^_%!Vuex}a z_Bu{>$y;Fmz5Rjd*KAGp^?bJy9=HGcZuh{y#5)v%F^)4{^sv9#ONXb#)Y00b`t-O( ztbavTH+p1VW*f(s^W9Q<4v_B<WisD1|1UINyk&io^pDQMOEbJ=&Pc|Q-HYo>ppyM^ z__#&<<@(IJY57Jlfvk*o%3Pp)%bsk%6Qmz^Is7SYhPatQr`%ua(IsO?2bA=T3t2m$ z6~0cPTSIx%_nC3y{h&<tf$DqK!CN6M-`(2Nd!}pUOM2%Wtr!m4I9EVD8I!*n@A($G z9p`1lS?<vpFP{FQC)AO#oauwjw~EZ2YE8F!&K*LR*>rlJALhxQ_x(Iu=YDaCyvM2g z1iW{Ij3bEOyEylO@)_4UQ29a17ZS^ls<XZNEAZ=Lcmx*G<ritki}{7>I9wg)sG~Ms zexTPAY|S_N-`O)dzQOT@{IiISi(w69taJJUTkydYzN*DneZ}G}{Pph^KC;a_R@&8j zoEyuhQ{~T?%+BO(fm&oA0GW@I@4D;ZFvo4-V%Xt0-xc$XDRtMfo#XgbcJEKe@pQeL z&I{;1kq!0PyN11IvTYO_^Nf^!mD?&P1H0_!x$86MpOf!!wx>_|cARDI{$L#Ded2TS zCq)l+9iz@m)%_LSJHYkuC(M$zz_}LkEyUA9_)6cz&C35``=aCh$hpV)gUM+mZzW}Z z!B^&XRfDd0s|{Jh=qBj6U7L@yeejp}*=IL+FA?+8*72Y1)sDwX-!4y{WiKbQgnBYg zv=bf@TlLs|MP<*UHN-@1?Mz*E!N@w=xSHyyimUSY!PQfEYnzx8vi<Pc-ZuB`TgYmP zmytM18=QCckE_^Mwq`Xk3vX9v3p@qyJKoQ^e195<=QcQ=R$9A+-_hjE#c%rY?{r<9 zsh$S-%G{0F>>bM1>)G@J+pcG0zOl_;>s|*Lm;b1=qRvgWeFUo6|4AFrUb%0@R@#Wo zFaaNZahf?M85bN*M>)SpzKW1G^g$R0r6FSn{z+S6TYIy6E>82!WukIN^3jjD{hI%p z(Kmhe`DXGT{WBM_Nl|S!yV|iY>j+h0Z(DXRVgCj^Rl>)3d`xkCs&n7sI^S(FK645g z7vuQ}F>>(V+EjHs3nk$+yrhkNLfu!x<Mua7J4H;TKQe12o`lB*>VLMF7=<hNaGbO^ zoMXzKHKV$co4%*S-ga`X6L;URDfgPE*!UCs(+^n*moEhD-zL2?pIo3!MddR_bB21C zLe{t)<+wF`4kd7M27T&?o%hszC4DZU$AR=23Xi}*$1kzB9==B7?i0Fwq+EB%nBCHF zA-R!xiu$^-e=40ft3Tf&^8YMFrHycYg|hh%ha<>aPHqix{$fc!!2bgK)zmkU9$j&e ze)u!wzuR`X<1x~YS0?K_pDpiKFy4OpO0RV;oYth@aq|DH+;~WzMCSAKcP{<2joEjV zGRLUzno{ned|t7vXFa}s59Zk~T?U++N3UDu&6+`{ke~Ubhmlu~y%}3qlCAkh{Uuu$ zv#|lZ&(G<fZUKk#*WvuIg|A-blgtDBZL{kbCU4RQVB4Sn9u(W}h}9p(`or=M=i~Ih zK0!v>&I8GR0FHyfj?>;|&Q%|IG9M*#M$WQbC2cr;zT=C`9lM3S<>=lFr}-a)Vr(8O ze$Qp|Q*3;Qtyx3sqVk?6V3z&!rRDiGeXCoQIiLOS;I|Sv^>L6s$o+AUc>;U-`{~q6 zy?M^eS^^n+a6a^cb&&ptqRxE|kJ9l(c{Bd$bLa$l1|I;KD^deG*x&QKt?X@h%YSkH zfw%ARG#X!h@b=0^?ImQ4d2PqrA<q$G<;$8ccjK{&`f?vyLBGHG={Y{jdR}?oDu{ze z*?U)2GHYoI>hWO%Z9zlV-9g%n+R9YHVLA1SfrrFu31wS~r{l<JX4}E>!(?S#>Phmw zQ^~V$HE~swE_HBGSDQ_4ciZd9yP<~uO)_)u+KK!4VE}&9w{RZ$qxotMnS;pAx`h+* z_9|Q6VDqpI{I|~Y^cwBYYHgeC^)LeF!xvBwo_B5wj9<$J+#HUNGsM;N_?Ssv5B!(J zNyY|Wjo+-{@jKo!2k2P&D?%0f^Pre|8^RHg^<!?4FW*XsZ}U#eFBz|~g`P#l!fpGh z2N&zuvZ9z+EUt}$gK>8fJ8u$CN8_k#MeP?39>-J3>aH>TmzLH9ALZq}f{d>Vxh}-+ z`FMB+*LnWz0{KR<#WnZ7I`i$lxB3UM>3G|GGdP})|B~lJ9PSXO`A*n_K5cFL((h$@ zeyx00@o>ES`L1~aoDG-3O_2VwpUM0VU%L`_Y+izkYvFqwe8Tp-oI6#%UgTt+X#UqK z>xdVG7WNyc<2&gk?N4MwzWYw&-<J5OB34%6<NQ*tA=?He@It?_biPCRjJ@f~zTY9= zC(<8Wo8B2CF&QdC12QK#_mn(M=uihfv_C+76`UW-)>p_(U-Xme%(s&CIpjN6bF#7y z;T+}vv;E3(#%H~Rr}VF0PQSBZhW)hvH{$VQGO1c%xBU55)5iWr<uWdIjI#OuKb`z# zWPGPg<~!Y{{Qdm-DOo46bt3;?!pGxnUvixPNXYlw)8xzlDCQe)zU{UlZwR^5$yapG zT3U11mbE^b^4Va%ULbC>UerPSb1naL=bK&|^&LRw2mb0fbK8nL|EhdT<R7Bk7kst? z@|}F>|KU#C(_n}5H$elq8iv6J_|UnM>dyGqo7g{(Uilx5-|5<b-dRsDHVkFUW(uFc zwtLx_XV$!j9#B?$0eNRQ3-XMfb&F=mJ4Bgj%4a?Atk-uk|CA@clX}uG^A*1yr0!01 zNL!FT<d318{g>e&`sG=+4RnJS;aSKy(rjOc{~%+j8sY9|+pGi7j*Jq&XovB$ax2-m z8n@XNZ#CdlxYltk=jzLIqP$zgd|`FI3YE!-ob`~gtBvXS2YvVBx6Hpgf}LF}i`!aa z;vnrxV{z3)dwH<<Y@nTzKD;6uagcGQ$MJJP@mQIROKc}OPCwO$c&(4Sw5u(uORFue z>#>)NYZ{VW-!)U0Z8hD`tKhc0_Y?f*8-C_?zb>W<kkgZ1*W&eQycWP|zPk<HCbrp_ zd&rmT-P_l>j@F8^HLfd|z1npP9iWEetYwgKx5MPUSh>q~@E0yBvA;5I^Ujm^s;uRB z8m<PCf3$p)H;8Sr-%$2Q+s?`#D(y{pT;12pbGEz};CL{-@(t>5I%bWN<*vJJ`^nFa zSH(!y6?&Lm-AmvZcb&x24E*$GcfQG$$J5JjG<0;_#kr&LaV|cxhDb|tI^tt^p}pU9 zUct#q^<=zbo>@=j#|8AS$gZh$x!iuf({^`0@Bf*f^R@C*ir@><=D$eC9%L-$ySz8O zAb<Mkmf>PB%wSI^a-Jq{BpZ8+r?bV?lk6@9tKdJ!6`f04o^>43ca{Hj%sAG3Gy2vx z^LcXpZB^GP>dbhkyx+HtT{w9HTEk6_OX4d3x&Ej;OZYzDp1N>-#*yb)_XwB@L#5SZ z*Xgjx{xE47ul*ofGM1sS?S+n$f4MyC*q^miGA8gP$o;Ol<KF7Y{}5*l&8&CzINWEy zu>ASXdVqWn&}kxkX@9k}4bBx*rk%X+sXJpJ-c#mY=@~Pdd0%Vc1^I7Q?nQQ8$?sVc zBxAHn@$2Q#9QJ|qb8Qq8hd{nv9S3#fkKfaWkZ}SpsW0=BCg3sex0mtPX8w5z@0s5| zo)5N)>vN#(c6r5R#tMJ4#r+d9=Oo`+W=g+Lp7zRY<kx?dAIZl9;5Yl-;4~-&$G~K` z+qty4nM3!5dhb<#=JIdBZ6!M0&GzDK50{x|+knkW>AsT<H?pl~X`Gc2uVVW6a-LId zYX;K(WB-}(gnZrE-=6Jllv}C%Gi*=ac`x#-s_P8(W}IaDen--)ApFOMt8EXaW7^B; z`3t-NQygCgxfX&);ArW^#OX-r34coKNya*yw7^Zj&Dy7p@^28!kp8aQr47a1UwG|= zx6<l+1Wtmio4p)r*zXG$lUIw}=3=lAom=r+zEQ4bSEF)!zmvRCOM8Bh_N0+^r?LLS zhWbJ3c#f~?`oK#u*TSvJWj@SSe4j^F#+aWa?c@JP(|y4ITz!84*Px|rvLYl}DkCKg zB%xA~h7=OgLM4?#N`sOTDkV}$Lup5eib^4A*?T9Xq3Hj7`St%kyxeu}x%ZxX-*=ol zK4g12c^+R@o2+E*Url=AKZ)1#%!}}Cf`9H#Jy=S=g|>>ce-!U4b@Q;c6rJCBcpand zK0~HCt6N0AbI&7tN0XJcx%N^?xwDXcXub9MTK(f1SS5`W<g{F0%>07;AmKaF=S<mV z@|`8W`S!A3o;!Kz8xF+xM!bH*=RkbAz<2Bo#Lb(}$4hG&WDg+ow%YQr1Flpr&ysKI z>pncs(iZkthMd2Anw)ADRu0I%?^)0t)*q})+SL7#Wf^?}S$zV-4%JVV)~9NBMGwLI zK>5aNgtmJddCbK-drt+RtahC>cP(X@OFom7>rpbw*!%!{bW$DVC+`#$A<sJdlbbwk zWk$w-<FP~hYsn&e4=;!}h#Y#uTFBYcePNffou^Gjr#(XZJ6)N}K<-q$L}ug2^dB@M zq?!AEZRIEXuhDt_iudD?I|u1&k?eU_WTiaZLJmum@l0~aIFd2vHu9RH4dm^&e)4@7 z`rJj$zWVbpnEM0%i{!l)d0fq$&F^)*b6zy}aI?R0f^zppUtRc5ctwv~QrUBNH+KTA zRsQS`e2Pc(Ous;MdcFAPK2&sk&%sbge#Vhsbe+|um3i=a5ZTFcfp_F5dV!zN<ZkU~ z7zmvq?KypU?n_^&ysJdmsjQj9OoqIBQ3opc1`6q4I-uDokD1T!D=%Z^DSCyz(!NwW z^OPxfm9jSzJ!j5htWXCz!}66jxd`%YtWY<(C!BqhuhIOde%h(is~~;qneYw&dC-yl zHvSXUb?UINwvaQp(LpxkcfGJmFbmRmHIeo$@-SD~m&jZ0&{kB&M)F-&Isb&k>hVQo z>8qXJuFN+oTTkWA-b*XxodbK7&?hi^@%vc#ShRVYA$vFPkmYn`?jnuc4XY}>d(`U; zZMwMprQbXWE`&v}Sib({|Do{QJM9BwlTUb;Ut3|(3IDDP(HBfm=Im4D+*tPUnvh{B zGJA*oZrkKr+Nh3UGTh4VHQ{fFQxTsv_~q>8rOfDH*5Eq~&%B46{fP41JNYlu9*3u` zl26`m&R%KVL#<0H8Y8O+J3_vo2>XW>)J<t)AUWJjj%iO1tLtvc{UTsf;5KbxEZOEx zeoK5VKFk<bRhv8#-<tZL8v0-S23IDl@@ViYgLWC2{w5Dc;kgK(TkuUA&VAzCugg2Z zpD54k^8B8>S5cPS3CZ5)$I5;m8GN>0|F=$^uMu}O8N;>gi}@WwUTerMx~0t7e-0nA zIUiQ0z2H}bj2ol70{!peE?;H63n#O$hSS#?ccpQWwB|~4cGAW#da6nI<or@sd7rKf zIiL5I@8i4u)fsu5r+l5s_wa+|3EqZb+T1L%%=<(4k^7($`eN9?p8GVJ)3ii$yLgT8 z_#D3x1=TVB*$c}4eeSa~*5<ZIKl@m7AZ_X&enW&+Lo-R9j@C}|Zrw=rGZz-I@6Ycm z;pvAi6=woDTtg0pw2$YNYXUq1c~k2TZ7}a(t|Ox<a60=P{0~8YhVqvY_fMEgt~u*6 ziFqXK3t1POhkwp4<SoJ6Pv1>G4V5Y5%_n4Wh;nvf=DbH$Z7b)yI?LyAXgkQ~BIV8R zvpoba!c2Gu(%(ck&`%lj{?--ROXjb8G4Fz-_>~p*0Ggb`{T$B=$nbo~cr%6jL6`<l za_9HQvu2tr51Ciz?TTtpn!Ay(tb217Eb`C1`5U}{gy^!Lk<W|?KcmUpfW^dVChlI! zbRo=xHOhN~vYw)D4^+>ul_1-abUmg1H?KQJy-y*BQ^c!@$FKP1tXcFP^&xkRQ>R_X zvN<{D-KpHGZmlgI|BE`<qz>RGXuSD<<A2Whj}`u`dMk^zJY>&%Exe)*SE=vY@Of4J z-Jq@}Lv=WoJ37eR%gk6kjNjqvv9-39ar19-t|TuLlt1S*$}4xy%-ta0*OB24sHGg) zlg$0;BFg=P_MUlHr{d(T?A?{U986<h&hI^P>42`kI1TX`iEr*2mXu!hSSBcQ_R@MK zFOYi(SIJxSs<oku_Bda8&Szf0o%;^&qlpe7^t<?Vg8gASnm+Im`ZviT`&X06q%P$A z`J=Fa+}gvfun;=%+X79|w1>wb-^M=TwqdpvRvfZ-(^T5I3!b}r*_*nojQ+GDxgCyI zHEA57{V@A;zf?j0T3S66m0vO|NtS<*?P+9u5gbp(IpduBAfJ)f&E>S6!}NpVcB(?| zRZX`b`hltZpVznMJ<#l16)pC^xohSYr{Pgsn~I*|O|s2*QA0Y>VgEx$x61PbGU-Vs zwUyy$Z6|$VvGvBJHTs6t>UouRvr_*OlV3YwHMF&k%3WE!y~(yKK2O7L_9yXs7O!)( z&t@Cc<63Jiao>ay_+5fWSAMzMd#dnO(mPqYf8jR}ze4J5sWz9fCTHcJSB7%hR(`|! zdx$RkOPHm6Z;{=2Z708n^9Y&mS6sc8B4e^>dnnm6N09S;?d?{wE{3j<c!!Ypq2!S@ zaU*p$p3DouSJEA>-MvOOKg!49%=E80yLuD4>FQ;?cz?;){C&+&A$?Xeay<mEi_jf} z{!DTElSON?$o-kDePUk;>mhrnnFIA9r`)5;+414b+#lb>KjTy0-?|q%lWX3V?j|p} z*Rotb=VMz=+QqfCGRo7A9BPomQIPkV3&NjdG+6i=WzAXIsq&pSs=k5F^1L46{|xh0 ze(BRH;+uWx$;z7fEj9%j^3UCX+&kFHK7-%A!gAjsbHC&G{VuGsbaDpkTlx7xKK{}N zlq2s^%p1A0pOSfO^aJlm_b2JLgbm{U3zxFz4#&0Z(b48S*z4@MH@&}j7mNQqK2!0$ zSY7v5pVf;QOW|L*RNWs5nTsqDwjE7feam)nqD#sf2I=#&pGAZP>MCRO>aEE&de7)< zE+GHz>LO>atH4j%@czt&@FM?Tq3l*^!JBY0`Ul}X=%L;o#N%9bHwg~Fvoz$rryzAd z5z>d(Ri}BgEdARcd5GS-Gg-D(<`0xPcdc`VZlL^Te3?sThbY6X%91w}-z%ccDdz~- zxA_0&ub;4g1GjSzgPfVD2YDCt7;<PJZqBMbf&Xe{&smq~t?rhe74khw{=eHM|IGck zuZ6t9wYR+H%)`n5eGfT1wwC=p_>un&;?G7G9c^uK2W+*@A*Y|n>~LmD?t=JM67~w7 zS<eM?U?gndUmnfa&Dz`sVQa}+A2E#iICn!lvhO#BY?f+}<CLk{q4<~AZZ+5w4%0_7 z--KC^^ZcLcFVhFSTEaI&R*82n8D>8#bBX-cL3y$mL?*wG&poA;55MhrwL4tDSw&yK z{IZgK@;?Btj(DZb6(Y+|wCN*YocKLqH~#h1&&kqwn|!Y%->iR&k<G`-o-*WI#5Ky; zYa<@Y)qcG?S|?3qePA_Nt@8ardG6fp&+ovj7H=b&JxtEI&wevh!E-M%>qNdM<5dQa zIpPGl-<~_D_3_WS*X+AqDBb8A3*nVMW}LWF@mQjtx>lPjtDWVYl=K}(DN|d>yBl{Z zQypcBF17`9;LcuZ-ciWi#8b-p9>{qalxM$*Uv$x9#eJyI|K@PHJDPo=y<n$yehf26 zfBOGtTRZdLCNKZO`|N#o$)kK_@9GitlsVih(4D;vzpSfQqiaUKi<RRfZD=_e9mtFx zw+8&dT?>|z{i({Fd%cCo;AZl_7V5B{LLOzw;zm4{<F!Sevez?5-|(_@7DCQ>z6*1t zeY5ZI5p5=K<2|K}o5`vC!P*IXV}4bXxdu8_SKwxRzL(F-nX*t|FaBGVp(C2V;X%mR z*6e{@g@1n2v;{NmvoN}1!oGs&Y;ynMX@0pAaR9sw7xMd3UWTZXg7WaJdYKDZ+nypn zgVondXmUp(_bM96L-dYEByaE>WZz{6td(xo2iv7lS9*C1^jq<NSEjS@nx>p9@a=>D zA-<(iFaheo@%(Z(r?-4m7pK28`{4JuwA!f0nd<2y^_sn`#oBIJXr(P5Mdq1@mVnpQ z!6k4q+yqNt6#tx68V9)-^*MI~$l1_ip(f-v7oO(#gYfJF?Tc^rH`_sd$T@-G(yJx? zoV(wkK13<-vi$v{y!R<@-l**klc1x#@2%`7DR;hwy2^ZsGJda34=AQTf@08|`&<6q z;WOpG9G0V<LJqmZTU7i$<d}CVYfJAMX*ZUSg(-u^aENyI+As12x5EQllt~+{EOQqr z%iHojlDuA(@0=;gotd1u=)qo!Uvv$7DR1_)3W~EhabYgLv*1AX``|cfErzOSawd2* zzplbBmR@`54%w{#g9Es;zT1Z9T<Nru@6pPz^APo0!kAfFKVKFq7&i|yzp1Q^LXk>j zuCIMr*sPNO+Y8KDp1gH-5*cUR))cStWRbJ*R~FT0l`?-oUs1ftcvXP;<$X_w8b^fv zS^R%v`aH6Y&c8E!0J*QRReo|d<56ieQ&(@3ZT60vlGQkQZ$ch5m7}dP=1jyto8)VQ zIsIB~a22{0%CO9L1wGl{S*`sE-;VZfGRk@WoL{=1oF_5&C+F+%oP^)K<di+a`RnPP zptyL)b6+Wq8-$&NN8Yq;yM;W_pGMX*@f?TeO8j>D9zG|FLfY3|^8fpR=Er36GqXE1 zhulRirF?@9F;6Ha4f6P_j5#iORW65yxlvsdP$x&B$@}Fml6BsV9-wUxC5v9t%J1x4 z35UR1vWf2hTgW-@U9cazQNGReQ3s2gIo(oFls#_*6vV3{nj6s`CtfRZ*r*&^U>D4T z+u#c_@3g}=q@2x_H)BlhM;t^hUy#vg_-%v!fqZt5N%XO&;@4K%)uq=+-Un+Nt@Rt( zCz`1I`;tjHH~}t#;!uhIY&4IN-2n7m)qN{*N0Mg`coXV!XPn3$+2fG2)jx2r6_!3Q zXLXw}|Ad+Re-NI1t>_4sGbiEOgx@aVIY0P|{LO-w*juB&MtIH>JRqOd<tO|8rMPp? z>q>IV+Tld9A4+DYGDmZtBmQdP&G66o8lCI6?9u1u+{+6Py-|7oU*ow;-8WLNS8D4y z=lmVy+{6X^o)fkyG-!8;6P?B@^7@iAhN{P@(%UHAoQpV_jQ>(+IqzHvqNB+jxlPR6 zZGTDK9Symc89hMusk%bWwsuxWQ+-26s?VG~d`O-4hU3@|Q-^sIupXMMr?a2b1HVCd zkC$$FZ6;?dZkM0zokr$)Gco#>ysMQrL88wZ40&hqKIO<eOnKXDqVoN!oXeH@b8UY- zJkEY6zXOEri{>u050l?dkTqQ9^vxh=+nVC_zO-If7Z=MzbfFi^-|zBTNc;RkzSB3B zhx8BUa1T+=(}ZUaFKfMg`>(@ePzmxr&0lzA4=ihg4d@>hZ@BnN$)gM8o_zZ6+?$yU zFTt~L5A=gA5dA>T!d*(fC8RSS@2oc&1(uRc^d<)!tX_+1-zBx5GQRDy#)@+47D~Za zhtkEBCQsq3i{pnjXVn&vP1XdLLE6Y0{Ejb1_WFpk(C@<Q2XViI{oqf2xsS9IpXgzJ zK=(Xs!n3=0rxihqPb>0%h@3mfU+%Qus89Gp`^w(<WHQ;QEcvaJdCK<LFUHP|^1V)b zSnWGl$$z<a4&7FWx61rst-Nl~ZuJG}BflZT_r=Y**ZfvQY50WSsjx_RX=Z4$zmvLq z1F}y3jNf259qPk2c$#eM%g?KSnxAQdkC1CG`OX{sISaK}S+<c+59N9Uo`j|FC7BOY z-kj4aOa`6EqY~NVK5td_E6HTN@ZD%Xz$beOmuq8n$>T+BJokczs>kipd;>m$x1cth zOIF##i{3eNp6s1wE|R^1YlQ7Wle1D?VFw<`cSrQuGsxPpH`(S6<*l$3euM0ZWWJia z<!#8Q3t49TnFwvv!TJ2p7WXA-<gC;(a!CJmuRNC^kIZwTv&b6wM`ejV<yW%F8MK_| zYo)CF!Asm(*BqzJxo42`)t&H}fnV+v5Y?W2z6JcE18hLfIUgNm!E5jf%!Z;coqsps zP4LN__9uB6B;FUu_r@#tg)72=kl$5^-a%Fhd_%@}pgmvOdCTf%_T2YXRRw0FsR8X^ z3LcrKuTD7r&q(V~`94qDhbTiG$iDCf?(wiqSn`xS7nP?S;!I$U<KDvmX*8A8_vdgQ zyd`cYe$j8{JVDYqL;f@7J|`~?V6r?EfXec-w=z7Te!ox$|ESAZ`i|%+x2l(Ym|1H) z0J-P1QeEDl&T{`~!bWXiy|HthIp11i4D(~|z0~bo;kkd1dr*_b9ffz!H|O5#bMjG$ ze11`m{EpNh`TPSORL<eBp8ZmoDlB@*>d*t)LGE(K|97a5rX~95kt!;4^zyI5X%IOs z<iAk(CUjpw+D^_Hbc6%Nzf~TJ$jb`(>Z+aRe8Iu;Tf(>5ACBd|M&ADs_Pcgon2d7v zrXRoGg)djeejDX+y|mY=duXvv|I0m(3_AGEyWn>uxov^E;@t_^8_F4m2K>I0#yp6Q z;eN;(@K|BTNOP1l8><`EJ->0A@?^ZJ>>J-)Qk&OL?k?+lEr%zw9d`--OMMTID}OWP z{9OH~EpH-+uYDtbi+d5;R+aQyRmr=WK90HSaAPFD&&%s4@!5vY$tC`m){z?U?M3yy z@F3m`@kyI|3GdR{mZr7m-b(h#duu=U%l|)+F*`ce=(wLyt`*utO)`uAbU(6Myh?w! z(l@?B-v#~Hi>*<IWH<)Rk7PT79BXaX&fp^04<3T4_~iUTem89y84o1O<D`?dNE7Z> z{PSj7&dwEOPrYWJvkjT%_d9=(>8;vdT{0R&HpeJWFIW$EkzMYJw}gI>zNQViN3Q!9 z`(NMtJ6TkLyc?JG<-5W!gV)hU7ttD@ZRB1_8rg@bD$POCj$ZTxdCdOR8}hUn9%cWC z-zUPFqRHFnZP3^CedeyxT5X^Yzum%Gk#Y75@@~=P;^uyOzOzB_B`kmu&<B2me%fgr zbXl|RCC;H_kUf;I@M(`{O=(P!zwF(Q_dVoy25(fad6T*m6egb=$)^{Y^jEf%l(n~V z=f2OuaE3B(6qb8k8^vu&t{=#A_V$L!?*N$0p8IKCq_agD58$~;oae>87>|+A0^gs> zZ2>-+FE@~%_S#i>@qU!gIgs~iB9|-V`3Yh7;un33q7|6Q?+#%(mv|G}GvE;RoJGsJ z{x~#kVJKWBPUg$A<mD!1%wEQ9Wy^WblZxp}d?Po&TkQMD+Y(^|<+p^qMW=a$a^5NK zLYU6pnO_Nbn|mI<OQn%>#!pK-cW+xrFTdZmP??rPF*uFim%?wC&v9hbUVV)9p=Yie z{p5u(LR}44XVn!j@3Zdvt2z2+?O}s@UrPq7%_&xKuha&Zr>voaU5^e;Ep>mpxDVi) zyB?p&Q_}uWKJ&)nZ_1N<Se2CT8Rg90?za%#>(%@QDf2pXc^k5jykD;znNMwo<#=U| zoZk@2U8bBNp9nk2@k8#cjSeT*al*I5V)pv{hYKH!ZWr{0r};f5Ja?sY=D!YE+$6uP zmHicYZ>QX=lzWPDuT-WNl{;rMUsT?1%hcCmb+^d3#ay*SKOkeZ*J%42eaGVDzF1qb zy+-+ek?;D_$l0pAMVPtHZNhS2zbt#+`ObSxM=RT}>gH5=IzoN!f_KT_X8FvX;bY1+ zRlZj%OLS<(wAp`{OW|#J33kJu{Bv%6EP0M7L)I15K^5s7Y0Nu{{^4kCiCL+JId3)j zt3<}-_5EnyD?vx1PV#-U!zW`{IcZ1lvsT`6mn-_o+47z@%O2Ne4ud)5HU!$hOWIC1 z<<IZ_JnQ?f0i(%svv#qYYzjh=E&3pG{d=Q6nrvTQXKq1$7i(7=$@r5MzFVjXBjGcC ze+!$0?hbLXSC)5yZ^ZizX=N|1ocug5Unj_4_5?eT=|}Q=qI|!wxAv_JbI7x;@+=_B zoYA?0EGNNX<n{<0tIT;f?`&<bB(!0V&LQU%P7^Qp<hnxkM$(qk_MSoaI(c0JU!Z>y z{R_gQmmH%`SIA4wEw@tFMPa)<{tdZnnYXyIr?6T6my=uOK7S}r&bVZpejIZDGG`~V zhKSDgb7g**Jg+0q7G&@kS>~+rN$frO<*l!(==Q<$2X&M4GkGh!xqOr&kAukLH}V)I zf4STCw(^XY-{>PdLCTtYyECDTvYZV0y{?>pdY@n304xqW{)>}%IV-gZulu##SCx63 zwDQ()L1{0CJGgU3;aqetkx^r9tYb;vKq>t@^9*gZtTtPMJfjQGci%<*T}Ey_@i_`& z{tNr_%Neoo&Y8F9SEfJ(_M&9Dh<`EZEfD`h<<0MDYyvC`oD0OXXK${8{ANCuwayS} zzakG4<fWlJUB)cOy;_~t6Mma~=j>^8!{Ipz{41~?)5-kj;<W`%gxt?Lo&Tw5Plv<U z^KQfb!g7{9zd`T;dlm7bGr2U3<TrismCDddU9bC1y{pHZpZ!!_zoTAnlJPsV`&k>+ z<9gw1wDZ-*LTJza`8x93WV}JwRQyBmdYPPlActYnsV=?T8O^x*j(W_TwVJkDSsB+u zMKT!Ae2-rvb##vUJ_+qX;yfY$nM)LcwX)lnIYYU!-q@uqSr5DzzHmR>4td9K2vn9< z&Wk*NU-p%9&n*7;;9Ed^O?S^&`>nj@_qk@v_q*yd_bm2Oj;v{0DfjRV`aR|BveMYF z%ox0sKOD(^?h4->Ih;){Uz0&4GRWHx&-xAyz^@p-nF}-}=kLg)oHSVr3{j4`kTua% zxCwed&I9FL+MEYkt$gV-a<~3Md2dH<S?^`+$=>m2%J!A8#_%w_$DRG4zGS&WJ3p*6 zSxa!oVfv3M=&Q-&5#~p*s4D-;;#Sm$l{LpjTd1V@p?Jp^)#mZ&qAphBncv@9DNohq zZ=Nzt^c~DpuFJIf2FiE_nVn8%O_lj6aytX&lR-7;r42>*a0I+YHZMaF_Ge%bTnO7$ zL@{z+vr&9<?60C{k?HtV<P1aMSnjm7mg}@(^$}g}xp@7H|K-x{D-St$lluwV<S%a} z=brkr^4+5#9?Fot>8h}veJYe?UjzFqW6l$8CA%ZE!Tpsz=eshm&Dp!0U1&<a&*Re= zzx>8?3w2l*4q<;qoz2;oe3J&cTOs3r?qsGfeh*FFd!41?KbE)bapYWbaqin7x``T) zbFS~ne?8@xr99opG;{k&<ar|Gy`^Dr4m_*e50KqCWYCiQ{vp2+%)0!(5?)aJoT1Nn z^r^HTl!wgIa#nRO<=7568+^39MnC-x9Iu?wnSRZF4dkxEaN%Dl%P6!>#o14JKE!7d zez(JM>^Z+Rj{id8KcTw>ePo+A{qwH$R^cy2ZtV5>EyOeD4n8L1eT)5X?)e?_n4<De z=2fKI9_?uP{@Ay3R_axGqRSo%3t=m~0fixVj7q{~P=R}hHn~jM-&FRq)KLj}tS$Z2 zMfQ(o!zGY5y$+)H%otKxzTQy&n(|Pp2syxS^7x@PFj1cJ`wC^ypO5Es-$CwP6eNTF z_<ev!W#MUGBOyAiw70aotSz#q-4pVr*K%n^H-4!&&E;(XKH1OdFV8vO^`ts~NF83U zj&t|qB<Kl!;b_R2@e=C&F?HT%v%WyTGXwHY(hhz#g`cXuL_P(`ub8}Q8U=2V&pV~N zNgi@fCVKK=5FJ6z>g0S~?sQxa(cMl%mpjQv%V+j8|4`O?a3BnZx8%Kxu#?cehQ7CW zo#AQryp?c+xc>;hfO!u0z5JgP9=*@Y%)Aj7x!r(Q&aCBa^ly|uziYFa3`)a5<ycD= z2L{UihjQnR=W=B&uFP38FIcb5!?o;_^dXakHAD9g`YZ6reaMmco}(T0fYH#6tQSbH zy>wqApUl^Wkx}}%-jIFeoWq<9qm?~-7TI&nxtP3PF-AN2P#b<l+sL`m{AOj&d*ohN zC;nMS{Hl!6>&#<+hTpN;QVs1qcSH^=qb|y7`{m8S;G3A`)B(T3hnlaJQlBOC3FwPx zhaK@g5bw;vr{UKU-$wE?Tiz~{*K+c|QyVI+OnJBbG39+wxzF}Z<jhF+U`LY2{_wZ< zaW}I+zlp-`A)}lNnF(LRyHE-;4`_t$Y_j}(vw0oaj#ww1HDm#;pxs*axZXD>Yzvy> z(dImAem8Bqv@;KUnymAVVD3!RB<t+&ejvYn$vgX6S<gO4&iNKMk@GC=C2Ohl6BjFQ z#=VBho-<)B;9~Y0__r6HeVKO>53k%Ay$W)+uQdL|z2|rJE)(7a-xJ_V_R}Eeq|$dk zj7GNh+!_6u-|NEKpbMI@XPnMG-;Cd@lq2`ue^;jbes<>153}dId(LUxqRf5C_Dt>b zSl?mxZR^3WkoGu~JRe0@QM~iX<7(+f-<$PmVRd?oavrCAEuoGwW^e5&<;;BlD)Q(< zF5S>4k9p_dHhG(j$MsMba&7>5ft7H$@apI?C+sCo4RL2eJ!w4&t?`RqFgl<`(z!>P ziwW#LZS8ExzU3A2P)~T~+t~xlescwBrr&#%JhHZ!LMBft&!6P59CD66y2DwJd-GSr zxsbc`rO;(<`m;9LNc>0DQ||cXj#VZ3O&@)?yyh-MWoe!xf4K+qEYyaaEu1g!(bqIZ z_mnvEm9;w_ALEt#EV=K8eSy?@?m*NK=l<|ejysey=U1a&&KiE1uvT!Uv|h%u44ygH z`j+@T@Va05ZouqwdCocR&y?W<b$uvAADX*l*_X<A{DL;WH*{D3xzj!$vX^wF@TzFf z689#2s{QvJ<UDl7w~Qa{rFpyjmY4oE=2q_Z{NE7X5na|a9iTUS2+=D=|9*+^)cFhY zyAu5vansj!Q0__a05pKL{N9J%@Fw@k${YFSt?ru8hJVKB3#D5FpC|FF02kstQ9AcR zPuL~xOJK1w<oBAh|CT$*1C+6Xvd+=QGaq>r%Eiq;Yors=<v#eK;_PPTO~&lo=WKh< zaAvH|+0C3i`J9}x2eU!E8<=hRWnA3z_KZBNk*Bldv9Y|ikmo^UmNm@;<;Y#{z0~Il z=2zU=Tb?KUUl_t(oZl00neaV*hc>VkqSw7!yGS2%3tRw4L)K?4;8NjPv-f27;qE4^ zsPE-Acm?J|b>GW$=<VCdUU2SW<YIc>M(Qd~bSMMlVUB!{6Es6vjwZ|O4>Tu_>_N>@ z-iu&9^jGfn(2jp~;cMY<xC`=DN#=I%pvxKmQQBX05-0xRyWU7v>$UxL_`@RD$Q`}% z6~YIi+e_VKZoU)prqXZB9q<+VPulb`ct#&E1-h$;(U7w)A4@Oq41F)(Pb)*-+9*Jl z{m7;b*+f43DeDK&2y)hHB6*)k{*S7&rOI4K+`LJ61AE?RX~e$^KAEG}K--;}ef<0Q z%_plako8{9QstY!2=0Z;&=o{~9<zh6q4+eCo!l!Jh4-<{H@Sc1za12RPd{;xv=1cL z=!iZdi=45U1f6`Zt@&l`nl}#SqZ@+9UE*Gff99?~LH5RT&p7LbH`QrfWxNW$W^c~# zM&Z$Uc9ZA#q*(%wbLHn}xP|*k{@IILf;RUT@*rYYX4ZHk@Xh-Ip^M%zdb?HP7Zj(y zw6lI+FWz-%3qlk2{`{W7?<V23#61n|aCzQ@$GNao{G8D%2>E_r(B3l7%Grb5y{`s` zDs$GUmkLXte5H7`@py-sH~V^tw^*FKP0>%hhu|Cb?1dhL{wg&7?YRq4L_S7CbciG6 zD{qA7EWvefw!ChU=Zt6dmH8Gp1KM!s%*g#{GDq*P9ACf~_Nn|n5U+~xtl1`V*WjOa z@s>23NI1XKmv8Aw`FR+!uKEG8@0hv3aHs^?^V*{ellLo>A@{6u<|1>>>@m!OTc92H z0p#+6Z=sGhvC;R^65fS!+_|IG8_j`a(pNe;i})|-7WT|*8nEa4ejbXlXN>z=*w<vb zR=(3u=e+zE?Aa?_BP?+Tp<4zy$Guxv_JQwJ-st{5g_00`XwJoTM)QF<w}vlN;di#M zN6`$`HljDno@(C6%o_eB@~es0PINi%!nvnyUMY|3mEkeS8Z`GHZ&t4KJLi$b3Cfvw zM^07djpR{^nZ41C5Z&tuXdXnHdFN*4_ize(?#P~nSH8E5rKP2Jk#wV9yBkKqbnfg^ zXPq_={e|Kd!LN!mv&Ora*@62R{@;Z^ez`-GJAG}$tBPmlzB!ATvgHi@U&?wqVb;_a zkJbNvQk3k9sjCv|ucZE4M#h&hFM>)ixs-7-Vd!$dC+7)sA0vCNpW&Hx?R)r7k>5|G zwKu#V-IrkvoWlJu%z&AYxomUjD=h6IV|R36-IXJ4Dtm&LYDdw7Ow{k3138ycoBM5e z78Y>l-PDISYnwjg)=(Yt9z*sy)&#<Hj-?;^kMvzF^xt`VBx~V6rIYgu&qz0YZSD#5 zm#6ffwY87zVPx%}d1qP3o=)Dmj4rAw^p^J*#pw#`;Zg2yVK``71v>H@q7Kq8L?@p# zc5;stH}cASYHu>!3CC%NcQT`A$X&)FNtawZz~5;1VV(~;b9=fxJcj>h{PKIaIs0^g zGTlR7x$AbP_P2!JvBI8}ZuE;q(Km;;AoG{c@M$Ui#nODdusmo7=OStigNm4sa_2no zT=|MVvY@p074IBnsw>@`c|HY>V1F3@-}rxp_XL<4S@6sKz4d7Rfm6AkPTKN57_a)$ z&bW~EU(Pms#Ed)Vk+V)7D1RHJm+v)iKO6vk$Za$pd8@1^-noBTUpccjYo^>eJNhx? z%t#IXnOiSXzeCXFJ@|*<7swu9Rq-=Er+#wYYze+Kq|s9ThDbZ-l(V03C#3$rk>}{6 zqi=Z%O*hyDA96=eQV9MMKX-64CN#irHNHPEb5AAjA?18nZDsseS>IOXui;AAz}*DW z=V$KK4DGMt6o7Vk<t@QwoTFd~o+IUXsWL23uFSRn(3S@)^X=r2dtk@ICT(FQ)MDQS zjfCe+>1=ZORGhcS<vH=MCXbwBe-*ze<dN}rpfo1JJ+Kd~;eVR&y!ntjRtsS^WUimH zU+si_izdHEJOjPYZ_heqo&0Bgv6u4v0i(z-XLYhhI#)R}zy1goK*s4lkh3hKpgX() zN0UqL$&`mzxGO;PA=!8P81E%ybEovOw#l0IZuuw+=fFzH{QrGn#n26spMm0}{>sBR z?s|~^b}pKFX!EXl%DOk1T&sLt$SUU!vp&yUAm?CyQ0DA$<gD)LFa_;+cpi?0M}+6B z=`_flgn@88WPP7ENv@Da>M-|Tbx8#tmwrje{3Bz`xp>Y%dy=#cmTu~-HuDMC3Te|5 z@i_#KX5weO%>G&C`E|)T^N2QN6uCvmlJi~@^x19Ua`v2K*h!8H)Im$M`@xrR7k6Q3 zh{pyzug1GE%z!Cicqnj&JZ3L6bB8AKnQ<_(-j84Uf%N5BYo!fc%KsYW$o^wHWyqUw zIgglk3;q!H2z<fb8*YV0@V0VgzL4|2pD1TX$o_Y9o8!e#pM5(sX9qT*zeJkjA?FHu zNwcVYcOr)h%8|9i5z3nPtY$(Dc$Z)1hnY)Dra(jJD$e8F(fL&qmN|A&GI*Fwqr+>3 zZ{7*4EJDs7mymYW8p-oq{#&G-J}Lcu?jq(p$ou{82)_kg+D7Kd85<6k&N9e%k-eqd z2~2za3(q(3z7X<8<VIM^uL>TA3D3IrWXL>f0^SYrIzs%t;C=R-;X6})`{A2;^XcmU z7WMy`GDlaNeZld{-kpEun;)Vp1;vze0e30>>F=V4js7})S<WY<K6XUj<o=8PBX?>0 zaxap%+VYb1c@y}NeG=rXYVP)S5N|!2V$6)Mxf`=Ly6p9RB(MGPPv2gJJvzmb!qShF zL7R2%5@y~kTF8Hx@OPm%{KGvME`ysP`sHKzXa3&`ue+7$ANjvPSx-{#8?^tKkhi2N zkii|wm%jQjX+H{C&qv4qoU(TlCvOBt@3R<9^T-HI+DCWDTky|tN5@+NvY+u2zeVI< z6&A_EeULVJxw1@9j<X@{Is2sfUC)e@H;XeHmWtDqyN_}{iYDvW(r_c>JWzBhX**Xy z*0Oom`4Jd_*O%ht?Z$2J7UWIjZy<eke|*Q_|DgOuSJxJf;eJY3DKtIAt;YP0dk+5* z$}&ZH7eVfkOhdn&fAY8=d)`9H{fErk3?qBSwe8|R1u?Tf8Xe2gPzUaXrBD;?NAQ7o zmy2HxjtgI5|H?zw^lvF=D_95Hlx-ZpkKk))h~{AYe}|dk+=iE-Y|p!u)0r1T+Rn?u zPeq&lD0AtY32MTfe(6kj3Zj<@k4L2cq%!tX=abcQ5%oQjSriWD_l>a5@|phlGW_p= z%=Iz{PkYUryeyg(a36WifU$5Mtl>8d(wF=V(TyISF!nm)Wxsh4e)$FlLDqx);7cgW zzaIR`emqo=-@@`8{pTWb$v7ST+BtA4MAwtO#or+9B7H?)$oh1H_EVFYGlC_B<t@>2 z_}mDC;CiSJdFQqh{EMy%^AiY7<`!k79i9JYkUfWwAoriD!*OsDoCs&bjgU6g0E$BV zK7m@w@HlLSqRLbS@(ov3&ZW?gJSvb&&fBHmngQ9zj(+neexu<QNc&CSb`+F>>{Fc& z(f>_GTZfGMz*~@ca%YGxZ@4<WT>Wl<Lw(x^L-w3<t|<DD2Ix~)`OX_b4|opVh7TZp z<o6I=<5I|XlKKB<(ya~o#&R#99Hef~hMe6Prfgf3Gh<=Kro2C%HFh7!`RKIi+sWrA za?Y5SdiW6zWRJe^B*-0`v*As3lR9q!i{W*C=Lt_Akp1PskanLr+-^wyt%ZH@&wFl@ zVFJ7cUqZ&QT`)%;I>_HkkbWS4EnyktJ5L{w`-wv#_0gL<ckL$#uLL{ADaC98H^b|Y zd1@zE1_ROOoK*Hv`;qfB=nc_@rC)jo%^Gp~K>qT3K8xikI@HV~(wF@Oh4|Nk=zuGs z%XgA|KP~JmC<}Ryc#g8=oO<s0l!h0`q6=(-ti2ke$-L_gxK*6!y>5kvAahpP+EX4& zpFQtnZs(V_nm+b0I2xXW%#ZiupEXYM|GjeL4*FNn29wN5KZ7w49aS$l6tWk5FFXRD z!k>_K_bWV0F4-5K4u@)&(SJq{6n*TM|M^9i{|aQ^XPG$Jv&j5pqV#W)j}ztRL3tYk z**D7j_<i9dVdLR$r~te9MF$gkeuysjHeM&6oXJc-F%5ch=lpt*IZWDF`l5W_pRzZD zZy>s&^#6zBmHGEPcpcv0*B$LtG^v+AAn`^*`i{u4p}gED?->_z)~T!Vd<`v>Z#ZO( z-k&>TY(ZvK7|x#g{@u_LzQ7~>Wy+ax^+WE`{L^0#f-BMI9)Eb`?8t24yU=C6kT>CT zcJ>;0SH3cCOoOZe76>1S_Cy%Y{y1cAo;LHW@Ntkfkhw|bJYB^*42Hw=a4`Hpj$@gd zgr`1Qp}!f@FRaElx{!=TZ6W2@#y@(5i{Ls)+su6S88}vW4_L{b@j`J5Oo17Yus`^{ z%6t&7dm-Op#@WnWq7&``UAQkrGYD<Q)15GrU6)dzi16>B0~zQ0JR6SWo-Zsqxni(b zIWkv&5i%F8DE?{C5!wsiAOBwB<h)hJ$Q9gUA$jTs>FXCm_S-fw>p(O7Q^x234}}l$ zjXpB-q!XYybc2zQ{vhvBMAv+sc*lyLxi5Bm-h;2o|4w)jM#0mNb6_#oi<>ikIrICp z{67japagesm;=8;)?Ud&M>qy@UicmO8%p4jxo$=L(uS^=ZbOJ}z6Bfvi-c!x+7Rx9 zw99E|GLOo9b2WSp8P~3ct^C`=JTxiO<&b_fV@c+kx1t#U4?%R9W1%&?A#6Ij@A1D7 zl1{$!j6IJ*!Xy8@kMe`M?BrX@p79dy_57Q_BJ@u{cen&Dg8Gnsqx0Z4`A^@_71D-B zac7;gkFd1;=#<Wb$me}XfBY=}8hG3a2SeuPL&!OIrXOME-RBYf4u`BAa+V`~Lp}D7 z;R*iz@wispqvi1`$TvNP-)dn$LOu3#p%P@?`58pdQW#z4hdm){fsAX%v9E)y3$FN& zU;4`}FdCK$>j3$7Ug7=+zGsh)>jP;uWY*=**}R<5j;?tyTuYY4$u#GAHVTW}%fm*r z$;*|HzT;cqz300h!c2X(73T|{IlKRWGLM9ckUlkiNG*tdY8b!N1NG&e-!(l;+|$In zn7acEgvdDkQSMtEhjs*azUSm6?VvSu=DvV=pZK4%FGF7eZTg|XP>ehCwMUq$Y0n;O z+G^VAawsXk??O*_9iO!Q=b<&)$Sh^~kv;n5=tYx8`mz<whT=!p_zwTuA$sAgCo;Fr zTKNuXraiSon{W9J=7ms&y)e8d>@pb6Z!@G%%$qf7dl^GIlT&n9*>m|v843%J++T#u z6H@=_ccPQdeDNIatdnNJRqVZ?3j4+QWS>3l_cMN*V)EYsx3HfINB@VMS#1hq&^Lsh z@CWR}uRk;Mty>`d*!|*Ue0l}$gzwR8<DdSnpLEjSKgFGSM#id-A>|&%T~2uBy>F8H z6U=-MH}dNvEc57;b&I$;l<^o`i05C-?#z_CAo>g8264CJ@s#$ufH|4_I`|US!0V8- zJHjA%0Q#Uiv!HcIA^jXPYnlAkMpfv6=Uw<mSAKocQ`Y5hx^z=7ndANo2cV10e`F4X z`t0XGE%s&NXY9wKz-j*b1^uJU`fwlnb@*ltaw+>TG?`OothkjsI-|zS)@W-&`slsX ze{?dJF!N2Njb#1N53XiU-<18gSD`#U=fbb-Ss(V7PTnWY{l&MrD+xP6c@Kwkq}vU$ z2Xj9h!hVx9e-ig+W_@l^3bcVm+_m}tj?Y4#nX{(9O#2!K>7yTlub~e5%OP{$v)~7Q zZ$ifR9YAfd=iSG5@jpzuUqCzg$@iH2yntpXo*8R0FO42P>%bG4(FHUTzc@rbky$x7 z0IrA3MbZbqCXd<2O5Z*o-QM`_5GU<yAL+cn9KpW;+UQZ!&$Q$20k1;7$v@!$$k?1T z(!b|Bxu0JNNFV(>{}*9`u=I6L^Lrcb&md(<9}zu&12}^_eRcfO$G)%4F4O-0gzD^> zV`R>8qjC;}hu8;5rxgG6ANxVpB9}|!E*Qt&8P=k^64K|K$Gw@EvRuYqSXwVa#^ch^ z6W)h$cpV`;^_;Rc=1zU&+}rWoFTgX9u_E&P2u4HZ5tqOq$oIZmcyn>?QJ&A0;WoI1 z{a=0=ul^FA@op4Mf~z5UF9T`g=}R+4r_FrJp0s<ypX@{7F=^zU=|I>Aa{hiQ{6IdL z-#>tMJ!CF7MVg;N8~6pfDrfriTZE-u*F}Gic)hiy{3b!#@~8ak3;&UMAM-Wz-@?!A z83*!xwUTZ<X82^RX~Ue#oxW%~`(4W1P+#(?dhE&m8=61FJv%(n<a?>a%$Rr&zbjxo z`%_Sd{a{Ew<|J)-?gRbdZx{&k_(!*NGYnwQ946n?a%q==Tk*d^SsLK?FaOMy+QZdo zFA?WJxP$v{;hBqcfz;je{8|XhUQ9Lki@PtZhU>+>95%6M&Ts(xtIYH9|4saxAiUZ_ zbZ(h5WiEXunyzpfd?U_sZD9<Vd<tpfX@6aWWnGm%eIJ;I$3|w_>H%oBF`p3kFi5*u zi*Lq+U(n4{&ce*YxMv7YJ4>4<{ylF^rrzhUHxb?%&+Ok_q`gEhKb*N){H))4qI*bM z7mBz>z5OAdTlk#|55RYLP^s>jf6YaoIm8p<W;~qE{X8t;j$i8W4e709W>2sXq+F%N ze-5v-$1~Z}XJxMbkT}}|aU!FHr$6b*eIq1)S*ulop|DoIa|d@kd<WCHzmUe2;-vnD zLfUNf?RUbl{4=jepO7_L?v@?J{tv$;!kS0E%G+G|Gk=cGccplXgk=rV9&P3(&vHM& z%zQunN!np4^p`+uC<1qiJN~~k&qDXFw6f;Nnks!~=DUw`zbMb=Ll@z%aF^m=NxYTf zN2eWK%mVi4%ck>h0S}8m1nNQd?&gS}vS-enHkYyFJ#<++>}1a6{vBO2r~)IP2D*9B z5Rb_EU9^>?mHo{D@CHN=))x|%IaB70Sp!yMrrp)$_lCH)3xAk7i(m9yX}1F)>11Az zIcn0%+&XRN-SC39_}5^bAa2@S%9FmUBt*~s2dqbvI(!?l=$i`d;Cb$)yq*#MDf-^b z$GGG7CS*>&7rGM@hy4TL%V7Xye$fo}Vs8sCLh|zw9D#4<kttjH&bPQ<h0I+~<bEG* z%8+!w#G@{=68GoKi@2jZeHqd}N7t75S`*=0Am40wx5Mi~$QY3McV8&T9^H6!C#k3O zixnYjrq>~3!wPY;&s-K3iT?|C1^!ttcZ9^xUePi<UWVh@!$03v`uS4g6chJj=JVoa zU*HDFnjmYfvFIj>bD_BFw5L1RSMmP}ePiulr|)8nej$7KIXjuX^8KJP|1a@-Q2gi% zHbCYV8T)6!YW_R%DS=P=)94+}WA7zS+Dzsl!`aiX)q$GAFOc3V%(Tt)`<a_of#fB8 zGVXsS-go$a4~Mc>hh6Mn!RzelD>JXjdM>|}_JMLmKhp)W?~?bdn#kJ)(#|^ZEXX_} zac^K|jLG<&zWJK)Vm{4XPkE;@_q0QFThUiyW`48_znhsCq2CuxzT<P)v$psN?nIZi zkg;Ppch2J-B|JK>AJJxhl(}<suX&50qCR*UL?>8|-)3RSTW9H%RHn+1F*sxA@!`*X zm9mY66S*@N|6ZJ_Xa*>6DdA=K55i*|BtIEr)3-+dlCj|>_!=_L+8_OXc>St>&H2it zcMSSf;-&sFFUuGk9pc?+x*9BBWB!OPI;+gLr$Od1Q{`hZtYCjr*mwLhzJ17@dotO> z&Ah7%M21Nteb^RAKh_kQ{b$}GEOV0wnf>`me$SjMbEIFnk0GnIuu$AG+>i3#hCcgd zXF?muw>bpT{?hi|LL1#}&Ua+Jl)uB!%~zIlnJv(zZ<z}hvR}o&vV^nOJ%c$AP4)$g ziT@IsgN2XgpFNn-><{sajxFC(W%g(Jj}xA;sF(13$7k}7?(7liAEVAQ?q?jFE<Er3 zS3^4m4&p8cM?!7!RzTLc>2K2)X1t5uVj5J0YSPSonlbD%q>;6L&We7*e+K(f^qu&h zBmT+wZ<bbX_I>#;fD6%#L!14=+y`pL-kJXlX*~hoMIMkj+u=|Yo)Nz(b1=G*=xd3W zea6&J<~W%n%!I5VZbx@Fq)$BrvPUvN9`1+I%9#Fjg1Ccx3v-#x<mV{pftN05j~;jx z^EkLz+*;b<`;hs~<4_NuzWCfOJY#eE^)vB|ZYllWGRSx^gZnjRW#Q4K3`1W8u7+#) zp9g32Pd}VB!A<<PL&mQ!n2bH^kIZi}-^v(xr1W#1GHoH_Mdng7gkiDg_Xy{)tR$Ne z`qfJN|F2KYdDiqbSqFYDPp65S-~K%u&V<YG9E^7@Jg!G`GP&ezaOU;-cK2qkz+)QZ z+sc}&5!xl<WIyO;W`A^9(>@OAqqBY*$2@@90BvXHTC{ga`%Pxnb&v7CAC6^Do4yCK zw^CiaKKw71=j@@akzPZHp8pSK`nwH~wa%a7_C$Y?c*U9N15*zT|FbtipR(ufQ}$H{ za2JD5AbmhdJlaC~_l)rw3r}bM!@P@s>ZCn)MR9Lsk8Wn8GUPic&Al4kb7YlsM>!AQ ziTw!lS>xV>ra1E#h;A`sViED*ChzRcWqnW=ZTg7b@GtxM^7#s6TrMJfCEB#xUU<~! zcLJ1^X7+oF3cp&p?}qG&EP%`v&W9Ibm)7s%9?t$6zkCbVv7an%`lv(YDc{4DXmTdB z5_?rN$!AqG>Hn^kUiO%ZGV6-doH?31-*46u7o+PeUe+qnf23VL3z@sE75<E}B+uy^ ze}L%lBHtm*wEsik0Pe%ky^Loe_N$~@h=0E2{UKw+W5QDZxA7kZ8DnpP`NBI%H~Qmc z-0z@!4PDyt0Qf}Qy~6`d_A(z}Z_jTe+O3fOzAJa;V5#eN-09;FX8#0j)}QNy4dgzR zeX(?|XHVI8qnp5<w!TT&b~u&&8#o&pbI*eMFq2I3CPd~i--<I@{OH4?r>G58Anj=w z+UVrg$?Lap8~e{Nkw20>`y}btqQ`gx*6_=|%s~QsF^`n)>*A$9Pq~id_Zj+(Q%?&! zh&%oBcQ6!c!b<+>tMknaV*g3J%<XO@%c<%mX9@2|S6x`@C2O_x>s|C6ODJ#-R<6v^ z&*R@*c-nM2(jvZxYxF}ot2YvlthG-Up1DQ^w8ud|d>(|f?_JX93N_fHW6nG<c`O3y zD>8?;U0S97OK&+o4cH&{jYRidm^=ETBhjWmkN)R7>7FewIS*QqJ>%h8{L^k`p#509 z%ula}Htb!5WjsqeKZQMg*^~HXt{+|5bmn9z%YHayPTODj@64^-(b;6)oPCc!;Y5CE zbH56of@jX+=1jrW<dXaJx#O@wo>KQuGCQDo7wtdt(n<V$&y~3qWzSyClk7FnUBM&w z*&^%oF{$s&5w3+Bpf$V&nJaci+gv))4`e+ySe&(ZWKFw+dkjQpoH}_}x_K+}DD|2% z)Oj~8{n!fO_0S)|yaqCkFM)gqnNwiDM>d0)CqVk+&f?~d(N}mLf-ZeyA2>;R)x^nn zeVqJd?=$o0`r^FEy_Nq9FoivHtISh|%F`G$w{y1>cB1&5@VS^Q+rvO*dmOG{&w1-h zq_az!zoN}IbvPbH@n{5d*q`9{H~uToOh=nDv-!P&^u?|C?T7zP;hDc?{gk!v0rK~X zJY+9B^X8$_E29o`{wHgfoKL+;+*N45N0UBjG#(kJk79oq8neIiAFt>iE@00ZAu?`( z_xEJBS{~DH=ezGMAJHvVl-`%zuR^|q%rBx7`IbBBGz%X{8$Al%<(K{QKc!I>@_T2! z_^0h`g4yiHN+W&J<><C?FUNC$bTUs%-;%MmIV|V*JTq&CVq}!xhTa>ppOZCl*80(J zq`!Mp{^vmSt7-TB#Lb$amhkr>{rq2W2xR{LoA76unQNUYPR?r9QU2&dk3*BY7@4DG z%qj;P@u)5jId_x({xW{M<$ntLv3O)n_-^uprVF&>UM}oBG=-TJ(L^`>3yg=%tIFb$ zz0=wF-NH<N*$@2#@{|7I814_yj23nWbcC!a(jQjB<6U_<R+_hPcN4D~oCrO{>&7qr zYR2Zw>7)1g6wl_$c#5(PA^!u>RKqiQ*bdQA%))O4q+fUf%|!I4;gRq8bAG3wiR@2- z==M9v!+Vf%`AP1~Nnb#lGlV;(QxK0v(jLM8XLQZ9*>_+p`OYAx)%;EnRt{Yq-)u8+ z4rh-(D1BpeLYbqrmUcn>S@-lyX@`Ho{oJXG6Qr>cUf|9=KVwMFx;5p_-pX@$=MCpI z^7S>e#OO+4ZP8?%R11%D_}7Ma@j09O3^Z9^r=QN5=Hr<en{%ckds123<ZeOUoyoU2 zML9yBcK@Nc-!V&wlX%&;-+<>NX`KwwzZPXS#;Yb|T)vE%_05mW9o*H}Gat^m{*UD~ zYut>1>7#R=ZW>vAiuVM5Ukl6ln)752ij(&UGX7=l82x3&gspH3+N^P+3meJ2nmhC0 zlHz9Vp1VgmQ`-vC$JQ3!O&X1*cR6GZzYL$-#6Ja6w+BMzM<;S;E%g?6KPb=sE%R~o znNLlW#=iJwT`&#rd|#OxM;DTOY($s!Q`Y9Ql(8fCc47Gqv88xF#66q;Pt09#I=m-d z7rZXRGwZ{%+50nJ<35hLOL$9h#=ru|x+;3!$D}a<@~vc#C;d$39Jych0v?$Y-^ZT2 zZX=~VQJl!W6Z>`IWeySDRCJO{xuXXe$^IGsuR;}=nmFk5O&kv?=VNdT-qD>!PMN!= zZf+O9JKAsH9XM2Y_H7ojM^B&eWC8jI$v<})&J^!>?#cYKR!={WHN{o@Gp8OYtdRH_ z>zd%5ar8-L$yvB-xl6+sVd)>Y!c%Z1nh*FzM|2H-C&E4K=_50yKLHow8~xtr+TK9O z+VD&9K7?uLI-+kXo!`U_&x(+=lm8LYycII$pAS#4XM9V2M6Y$XeCOP8#)irK%At8x z{J)sLK=v^+f4*0|0`LGMvYiT9BV;_g3coX$Sp%%p*1nXF^y$$D7H2*wPWr8^cd}=Z z_5W`E(;;)@fztjGKE@;CapvVOv1bi4TX=b96^Q<~DgHZrXTRdJC9;AJ{BJ=Qoj~;E zhyG{3mwggsJkGctU1neA9sIJ6I+Hu~(i(cgW?_+aIrj4Ma4z0iS42PdH~KNc9%MgK zdeb1|K?5{*qrF>L^uyJJ|IQ4r%<b}R{4TGV6F(H5{4!@KCjL*5K0j-vtiOH-#Vhcf zv~s>K`yQuq-~C@Y6Y+Qz#&Ms)Kf03hnRnrvG?yn1^C$k>#r*+NXVC#w61G32uCmVi z2A|_$Z*i-j`5cmdr|@Ft8`=ha_-DU(Z*eo{zDWGEowWJA;rN)`_0YY7@3{)l0LtN= zy{hv3&J;etSkT@a^9AiU^>RHvE%DzV{3o<Wi<37LM(NXYcPjmA+Q+ft9*91=kY;#% z4bRI<#__DDqW?HqyxhS`yKD$6`5!Lr=u1XPBWuz<`cHA@;@1h^tS6&aT8%D!*>=cY z;{xu;^ky{ComXVfI9wl+pI4b_hx3?&VIccEcvTedPdr+%r|qUcO&iEOFl{n@-XiAf z%KsNc_c;ws&iLfJIS;Diaiu&w!W_$eH8bPs0(8sJAB0!Fhx7$`JFOEO%ib05%yAcU zXYQLmJ?qe>;$@8${X)zh^16k8#`S!Q`8|(&nAc0=S>e&eCHzzI@5d+oeb(r6(cH+K zBkV*pGsM3bvKEf+W8i=0d(6y%Qn#Op`xumDe*+pp+GZ#5no2M0;UC#Emq<VJCU@qJ z86z?uYk)R7showMisljS%mboZYQdeouuIr0qiHXH>mj;@%&j+QE8DfTyv?3-z1i!! z6m1dVsq><+ggtAS%)>rnzQ<gu%(KwfLw_qimBeWWU$HNN^a+XA9qwoECoJ=hP136) z&Jylx@aYCwv-E}Z<F|>sQ1}q$L^P!!^bbHmG==0R<6dQDjXopx-S99xtB!L2Cf`x? z0-MB1-S&s94>m~uHD=B%q)mP&y*_we&Roo|CBN?>ZKx8z3i#}g-!FJCWzSfXy0}4{ z(!z(KOMCx<JA32@GNZrlDV@wKvmQ#nascxj?&$Ak3a`e@+OH_{0`Z#rCi5FFHKlVe z9_#q;KzF6ESEQ3R)*gM<p#5VPp0gnRh0Q>7nt0jE>BRoH_$BxkKy$w|+mm<Jkl8QJ zS<E%!4MAH%xiS_$hjfBC^<jnZYG^ycI`laYlr_|~cx6p>8l;cRTw$oVSqqKi^#C(^ z{hViuPVi2C(e*Tg|JRpg-58mtkBpo%f6ATF?)YbYmG-t${NnIFch=lHnQ5n)U*5<3 zhu=8#nKOMQY$)6UZ$iey^>C`Re-wTO{vYC>zThP8g~AyB(<QT{eU;!h9@@&=75E<v zi`e_3n=Cy2L}B4AnfXqyVb44;eR6cQS97PWJq<m?TPt4nvPW?5WJWGIUv>;xpQwI| zsHgNTY3D^DV<YFDy|E?C+4yb1e+Y8~cTs_vGo8sVdXpphM>m`O<5Tc_1i!2=lh)Jd z?m?3~>d_~+7AI@$@xr!&ZnQvo*vY>zGyVJ#{A-BQOB=Z!vcD2}MZfk1|H0xP0XMS` zgUm;>zFIGS<eoKq%H0G~2g~_SgzQc4#^V8g>8E;0>tp6rVf(XZ&#ez+EXf@3asHWi z<y%R={kynXNTtl9<u`NLV(ihSMn+ld_7y+t=Hw%F^($0{^ux3GWp8RDng^JX&vdj& zGxxl6k6;m+waR-l!Q@WQCF0eVY|5CiD{?*n-Nnqt{7>g!g@3+<%oFnsWE`ptJ=u4l zIR-8eRtrt~nY7XDG3Gq$-sqYNkB+ns`Yp_?b>^e{p8Y4`Tljy<Z-u(JOn;m=iwd%z zk0#$}1$?fB*YI4<T~54xq>;H_MKr&W+g;3d+@1KpD7-elnJ2#w>0in~)}F8P&pbEv zT7(?ZM`gVd9_eeRieD4W&yYG#Tb;%JjksUq|FL{U|MVz(WV0F4E@XL6Ue}?`I`?LA z(~kP$c|O|J!c*^+_-Bl)D{Kw>A^fsN%lBOya?W$DG#*qp(Q#E5R$1Qvgv^(Us>ix; zg8bzB%^LkfydT4Jy0{ha7|tGjMEL#%kD|#uwNAjEwv;|2=MYYVg^)dplyk1|%<VSA zCGZ1YY1f$#^%SQ+WM8KvWRB2B9AYf+Husf~zAx?JUa0Y(*%HtAuav(ocx^@Z6ZdPv zJBxpmat)TZGThe*YbmS;y2j|!Zbk{8BRq460TRpaK5ZlL#xgoc1MJN27j$#*%9`{6 z@>!$biC#5xm&iEfx?k8M%*?l<lS#kcn0Y5T@4z$P{(ZuG<JC%98CMR%EBmVXKAsf5 zLZ04&YuM+B-x2LU;;ce@B)TWz8EJkGi}=+Neh0c*=+nn!E%ZD3b<958xy${B{J$uC zEJVjwPI%_=ZQ(5Z2I2EDJ}*G#3`>|5A#<jtc$|dC5Ar{O{W{?XiSsjLot5_<a#twh z-(uk>N-JfqDgO83f6M-nuq}`_xf{}^BCmg?dzU<vg`Vt__~rW@1O?d_B#!tk@V%Fr z`S8=Q0QML59HgIn8U3Zg&ydf5AamL_^3}_Jz#xcDFZ(%n^3NP1^VY5~6FQ3b3;)b9 z(q4))GbhO&MEdt;!h7P`0qtwjZG)x`^GSTJ7cX<Mz3_gW|A*YSijy-(FEG#GcUI^j z^Tg=(pMf_aI=)tTbc6$i-HqlI<|eq6{ai>rWqqCY5uMJFu#EqK@-zcF2zyal<@jC3 z9bHpr=I?l?E{6%<3o?dB*O9P{Im_5HZf7p}p!hTK&mH{eoicwJ1_ukvy8%Uf2iZg2 zAYSS+-%V}tBm3v2F%Z&6ozHA7&H<3QVf0k1#E+aaCp%oc<#251rMX+0S$Exo9@(Dx z{PpZF^UHj{Bc5x}--lPm!1!g}oOw|C@{=L+gy2;e$Nw7j+;KnS8M^22%=hz!wDayy zLv!)Hm|2%(5AF=~)8rxZ(BIIHX1>LY4s<!Q1q?*D74Ou^6udI0D$bsMEOU+-(#YC# zfikw`-<10V_7%TrZ`-Za$u47U#)1pPA0}QwdE6wew8xA~&+*Iog7n>OA>Y-NP@O&B z{7KSzgxLU({1!!iS7VZXDepN{l~!wJjg%AJZf(8Z0meQu_*)t&WAdE+-{>M+uxGxN z_Ax_V7YM&aTFFav$}7Yv1KBrvM))=8{u1v?a$Be@TkyF-Igb@yKV`>nn)1I5??WSD z9r3ywkHYwsQohWU4o925brhO>bI;-XD0gS>tML4r*%a-k_(oSY9ev&{c|$q=!f!MB zoDnTAz46Sf0fs?zXAQ(D4vAY&ns=j5|MG>fBk>smX+t^dlKq_F{G)5gcYO@=YvFG} zzPHBWMHcttlQqIpew+CH3{RsyM4WtMnGdBe$s9NBV?VT+H$|t}S)3liJD~kmdLJoY z`keH8-{P}Oc>a=B&i*1TFh^L{a*02a-$w3=a2k7lZ{t(`Snb*S9w@>mcxOJ5JAhMQ zJFMn+u{f(C<6Qc)vCPU49a+|a)7jsIA0cU`e=f+(_w$wTCCZRBS^BOa!qWE+z&m?G zk1(6@tA#fGWzH@{Pj)6=g}CFNwaiX*<;1&#f5zOQFaurAf@Tk;95Z^uf1xLQhc<Ju zuOa=Qe+8<*5SA_YrO%(puG#O|hmY*DjysEANyy&l2w|FMfs^rD4J)LV?<l&tJJ@>* zn<`HFpuAb1cR1eFrgMM43IEL5-<G%Zebbnia6gT<G}@~nYpNsBr44_AS0DI>`yTGh z!>U8p@0pur9a5No<aYw34eSH2^Lq>b=$6JZ(_cmZmNm$=(i$y|R_KDXv&@yx6#g7^ z$MZe(nfHCdUX^(fa}1hi(N@Jf<Nft$vwp0Pe|`fxZ}!gA-();Xp6W=Wn{uD8|9H;4 z<}~&+z$$oU9O*?~XTU`6mjsPtegN4MNgJywt@iA@_`OC>yQJ~lf%e$+Ig7>bk0$S| z@4&wk{w-D7ME0z&_Yt0V1=7YVvtNiu7s!}@4R;Iv*$dqS>$#%~h<uNcX67*;%jb9e z-Vv7hb-wRW@>r2Qa(+r#E{3$1s{ASm`yQ@hzkr$f<h^9u7)?v{9$jJd{&kfh@6Kd@ z>LMsXUK6CT75$~s&D$Oe;YsdC@JYJc_>bV1dFzq<O2KyF7YU2rBYj6%eqH!w9@>dJ z`sib!7W-`YN7{MEbEvxNB~Em~S(~kdX85<nzZZM-vPFdd1mj^TclI9kg7mvjqRa1n z<WAx^Va3qwp~vn#_I#(&p=7-^lV867%U~#kF8a9igV8Tt6yVc~j51bc+|IX^Z>k}r zEa~H;bGi-^w<+G4W8V$WL&osvVus=sJ>g|cO<|92vT^9xo5Kn;j|wj%jm#;s_f{9e z`(bigL@v3<H3YwIXo^DvVVP?$6Mh>+&ye$)+u$tWuR%M!mf|x_ynV<xymGFiJHM0B zU&_4~xhH<s)JLKF6OMp$glCRa44=Y~dCp?~IX{s8C;jVMxPv|OoF5_a59e0_ZsLD4 zT*5EkQ(tD}8eRWc>L_QG-oih6_Q+};z76GZCS*?{`)-=xp8eZ_;v9+o0A<U)mMz>b zNaJkbnQLX87ad^s!m|c{kNYY9X`juZn{+e2X5T3KomTkoh52kUJqP_le)q}Cxy*0T z{|Qqd<&Dm%JzmcWJCfgv&<?(YMG)TEr@jLIf-|^3ML$+vvJakg($5`7&fEDNk7vH& zyoa<okf*NVwCA5a|L6!;^V_bR(HE@cmpzS1cz(>?K->w!qvy<8C+#|Y{5Nm``;YRJ zZ!LXv%AdK!Gw>pOi^s2!b6V+pYO#m*14#eb5dXXIozBeIIbEEO@cjdxMgIY$@6B8= zdb8;JuG7cm_f+!caYH=%@^1kdi~hhrWuB$%dAI0W@;Ht=<5R}XchF~V{$BPT`2Gr8 z*iTZv{Pyjc`pb#TI(XOPmwlmq)!kUU3hHMM*QX!Co--&J-%i3ee_8Y0$vhSRZTO!E z+0(ATeKfk;#CZzxJ-jUJc>L2>XT4hpP1aM7LB^4MSCJ88&%4E!i&H~Bqifn1=JIa^ z10Zwx?1wY<y!n#8>sWEKUeDYo?@Nx8R%>Zy9hxzx7xNVKx8qw*IrdYokNz7+9>D83 z3BM@rD*3C4cB!~oFU{xwwDb>@SnhXxLbiDqt1vTtZo;2}^mT_p*5G;9^nH2CT4#RB z0qKu+pt~MU$2aSmgPGA&bwZc9LUesuW88-(x~Ut{q|Z88{I%$w6@D6bYiZAce*7{| z`WJ5Ezg2!Rjzr(nMBKXkb4M-jAg@ray6l;^7ejNfGFOJ%pg3O3<zW#1yV35)?1INA z{O7>g==;dS7|4Fl6tt)C&o`biY7E+W+&?qxOZNovpM%`5nGBgfSAy1%HFMUq^Uyvf z&I-KFk%w*akh98@+50ljBI9eA)1~(Vn)C<hPb<Rp_)Jok^l_O({~&**#LFIB`tSGA z->2+%Da(au#zOY6qoYc{+!69!e2#7a{%K=B3mXpEM`@ot3ZISVeECSb&s)%!_zr5} z{~Mb8ZtM`>%{*x|NB<e5e@fr+9DZ3tJk0!s`yupMSNCE@H+w8RB3?;m#?L?S&+k*N zmBvf>e+=h|KStdC%CVh!jy$hL`!^nGGs~2@oBTb3?knz>(A<Sz-bMcf@8qLT{2^mZ zN%5jj%(^G*_D{IC%Tr@%WsRFLBy+ma%=C}1<9nZc-6&6aBds8;<F_}OuF|<#gRZs} zZ@7ybat14Nm3*i9Hpi0HcjBjSOB>0&BJ=s5l_z^mH}FeeG7L?3cn<$H;v5G*i2ti} zG7sB`ZWVjl=55N=8lIAV+G*a1FNtO;`n-9VdDTno7s^9h^!rOEbMFe=_bO-JH~L0e zISZ2d&p0w1vfk{3=ljgevvP)KHgpg#d!v!_MdY1vH@cR{U>f>1i6?)BA@lZ!<>@W{ zCvs;mYl%Aj8J0+MqBPft`>(iJzaNOMFEiijhtf&E9GdaWW6<TB>VVIj(4eh_{|I!M zTjzI=^Ip?2aGG+>Lq8a8#@;^YcA}3Cqz}J(!ZwPR_460_N4I%0cTHgjkzF^)8tZe& zH<opBzW?YDc8Pn1IF-c7nzR#pWVc5AxzZS;-k($ERowmLCBGfNh`Cvw3ZrX)SI(|> zhx|@lbF{z1E9`so%N|}Md>f%po3AHM`b@^2w;gJrP1&!<XDR<R^3hk=dGfYO{OIWZ z5Ox^<=)*Ezye>R#r#v(B`P=!eXV1K9iFh{(tHON?^LA$Ff8&3O@XU{*Urc-4S2><x zrhiPmMaLXnN#?TId(K|=hs-<qZ$fi`I_YRUX~4`pA?Gq~mG|Q4svD2;J2Lsbhs-<D zx6FVZ;zoDzHRRmsNW7C)bd#5J&&2<7ZG61AH;DTlp3B59C2rP*+u<+n=s?$!NAv_| zqIs8p#;T)WKKGSLS6Jr!IU|$4eU*53aNoy0K)UIZPvXv-j+3O{h+o>&KxSM1y~KG2 zuk`I_OKT>a&i)Y0L-!Ou`->NyYVLIQBZqsmhpgGE^Lra^gH!S8CvJ2&H*uE~zD@k( zKYKFANh@o?JCjH0W&ijq$R5Bvaay3scv)T=Is4pH{2tJo-=V^y8(F6ee@Xu_<`?|( z-do1xPSUs>kBmW?*JkhZOL5;(#>`3b4tZ_JoH66ZD*hAY@eJ6Fe^Z!%-}AyE<GJES zcNJafvBIK{`xKVLE9geTd3byV8CSAzoIAw%?%rd*D4m0tmkX<cCiCDf+FagmuSs@e z@gK}@uJEi4_JzmA&6=eRqzo?!Z!i7R<zu<H%b2IjZ+NB;+o9aoGOrUi-&;k<*m$1s zv(U8@_ZwIzt+czv@{#%6dysX{Ie6yxU7O&0u=K{r^EU0V7QS=jr78MW@=zIV>i2x^ zr}$^Bn0=zmUvgGy7v6U<v;L0khT)(39V{<LXyZHa%wAzfJPM(`7wttbDLlnlDNg#c ze8)A}dqBp)=(D1uXvhBt@dxlbm^*XJ%nN()kDfVWY|cwZUvfBp1NcYwr%HP;WUhE0 z|AoTOLLc2^`r>Z*m4K8p>)dMmMlrLFn8yAYy68TlBhKE-6ViMeuN`nS<ePbe|6t*> z^(nW)hj?XdiXJ}wNq2d@lRN#|7<|)r-orn7lFGuyux4yNj5}j?Iq9X}DuMn9X2y=^ zg@2A;+V^7q`*9zG{$}>`*<V2SG<OH?LzwNES!+k9e<$~R$o#D+x<dFZRIUl~QHfu4 zunXaFG>=RFJv96Be~>-zpk{uMIprDnHCB$C-#Q7BR@O<;9|hg<8zS#};hi~sbg8@0 z93fs=$mIV8e4>+?&pZe+pUwC)R#?WSv&3s6{#Jg`alfWLo-c1{JEPHLj`S+J==HL$ z$i7|n9k%m3l-XbW`plK$bY-50*9CaZM)w9Y{Z!W6L-DRE&TeQ0Ia9wyJIP*nRW!|% zV<1FNdJ~>ch?BK|Pi2ojBYkelRT!V$P!r8N|3}k#fLBp;eSG%T+}v~mArMIDz4s<X zMNmMR1rP<4DvG@es0i2#*Z?UiQY_d20YO2!(xpl7A%yhg_C4S4@cHI>{@HqWXJ<~I zGc&wP*H6)T_kH{}jo&JNsQy_2?gra|>a-6yukoU~peE1M_|s${VB3G?9LF`4r7HJ# zagWMrm9Hb&e~Wj`rCm<(u43MUNHIy=r+Lyk-{o}nkMXVr+^^**0{eNc@>~#T{s%?8 z;X~^havg!jFV$yM{o&yHI^LmU=0f~V`>~YgG+$VALDcS7pKm4KGKX^2<bHj&#%J4c ze-rLidfy9F?)L&O@C@a@Z0=WCsq6mC;JWfdKMJFH5-Gf|4acu=pX!CLC{rT$=Ca?B z-zRcyCHGw9dJe}!c#p>7RX+GZn0s5Yjc~mU_x-}Vls_$y&i+b%f0=9B*;gI(2+yqn zH1@6iI_i_D4L*hI>bJxLjk9ZCiS|t_<euBWD(?A;=TxQ4CETO=2c7xNXPj3X?Mv=C z&F@Mn<NKUf*}0ajw$o<LR{^uRcPY3P+{<~*A6Gw2eTh8YRYaSt0l#p)1?L~)JwNdr zm6wb3_q^v}>M)0U{2Z%KuH!$pa^L6dtE_#E=l;R(mG0gF{n^);+jh=pgWuR!AL}ez zrR^m=y8z5%|8;PHXWY&6)Xx8qZz`ib>a!ih{TH~d_Q1=$YdqUuIKCU~;F|h0gMjkZ z3!GD1<y)Y<-jHWa1ZuZ#;rd9Pr*yuC?KOU*_UcKXHhf3!>%ebj0|zMKH)^Z2;QBDO z&vVQt-&kkr2-mf3Z{s&txZaj$9cKFh#~MQ&&wbkOw-l@ZDsOJ)o;E<^ZPoehamuLr zOzk$+om{$+7kUTfdjKrq#3s&7<9TcN%{x4!m~%?UpMXC(_Hs?_agFa#T{p)0&0}Bv zxaM5fKH6>I8Sa0T;{jY#+e-WFc5=^V&J}R&3AP#!)%e6AkjgV3(k<_u$?uCO&#T-w zg5wXl?-Q;S0gZ2R`NlfUDnn+2Z#Y(8T;=aD&_R!RzS^3pY@g&g8Vg;|`HO590`2R~ z=U(+GzT>=?b1Q-B$vzybY=0hPac&xD&i-q>SaoU!-?Eqcl-9JoDvO^0YTy3Mb<KA! z1`qM<eVkX@qdrIi-*Aue;3wQyo9k*LsqJ;1=Vx$U`>W#E*PO9*wkrD{<+}1|6Mmz% zzVfri6i4veGM?e3JU4@uU;@XgXO%AY^BeV@!#qddue_l2dz^DBJMZIId0PF*Aoon; zxCy_z3H%OJN0xHmI_^<lb{YGy<BjnbCA>>>Uc9ue=IvJHy!z^eY=`o@e(Yc2nQhoE z<($%SU!Kv5a~jW6n_a(4zd>VSkFr&rUz2P4zUtinI&g6QU$B9DG>+Ai-<+eoBe}0S z`x?7d-Ke@~1JG|9$@VvXtF)><tICfu&a3Xc3ET`+-p}FOSg;;^#_?!=vjW8NyGv}V zaZY&8`&{47etphsz5c+pS2)(Te+cA)uAJKpKH_>K%DI89()%3n8qhMP@vPmHeFD$p zvUvsU04lo=vwZ|~23nW3z#HHgP<!bIet!?YJI6EbWUJq!b@44w-g|>*oMXEH=<~Gv z`hI<WBk%_IZ32zi|Ay^eey?&w?WXCRdra>E$HAlEUCxgOYJ=<ry}@Pf*LM4g^T`}H z1j;*edEec9v-+|haIAi65R74eI;g?*;d&3)36wr}alQffe9rS)vCRWDfa;=+)X`<O zV>rH<`(}VmU>v_wS#y$o<uj#?6>ODGGT46sJO#c5N;7wWx45Q0^(v6WzRF0AadhVS zD%Uh7w*y2tKaA^Y*L}coJ)qyK^8EtOd5LdR+g$lWX<W;%GNlpssGZP`edRAV_o)8X zzJ^=4_hrtjPvHd5f%e>64({jtcL3J8Q6|;%2e`hRt?E(z#!>wKUY?^lNBaJnoEyn? z?PrK%zZ%!wpdb7C8}&1Gfzv>3y0%~vC<FSZZQ2Ng_`T*d+{?a}L1}*uI0KYERL*Go zDevFJem3}keJ!`X`#LD+Sar49blQidx<GTYmG)|~-;nEi@5kUA7{c*pQ2gJv1zWWh zXR=lMSb0|4N$Xa>OZi6IU7tII<L+Pt`^tC2K`(HX-~SAXz^fd0<htrmmEp=m-8rZ7 z;XSYgXd5ST{si00;3f9e2hsh*;8ph7+!*^B&oid7znT-XfYSO%@I3o!S8rvjH24Zo z`LFU(c~N<_IlonV_er2Mpt1F;KxszXTj@q=ZW&NrFqPw-`V62phVqH(Gqn%WIo7`W zL)^Cw)MWn=un0gBH*&wWu>BGY1lKvQx?5$^YaCbS8F_4#kF^c;Tk5gD7^u8ap3r*v z2z<fw)uvIMR|3+wrr)Wwp>%QzXc?8x&VhMAZM`e}M%!fy_p2=02vnXO0e1nV$s<79 zG>!7y&sKR~>Ej@1$Nq;vpQ(LHUjx;NmB1*F!~MH~(uK;j%3ufQuYv-gZQT{<x18r# z%ltRU;#gzDvw_Np#b6q!1U7J8X;N)n&G%J%UVV!8oKsn+GH(*^`vIsNS;X;ft|@^m z<~K^yZ?Ug+R0p^Kx7`?zF^=<Xz<8iKcr@qFg0)~f$E|^uuRF&F*=kwdWWP5L@PK>S z?+NAuZ9~;z(}D8K0q{Hf{kTtkzZ?A<?7z=_wSdhvwE?v~mDld)oXT`R_x!<jG#CI{ z0i_i!cMqU#w-x9|6tMXmv;>>E=PA$?)CNz01kNjOs%#w!>I0QW`lo!N@0<Yc1LJ_! zz4FDM;CXO}XEXsv`4+Wr`m(QerS;MeD4liUK9xZafmYxrFp6`^vxC8pKzS<2b_jTu z>*+x0<`-}j_&NU|(D!}?_Hj<{+08p+-~{{moUhGu)Mo6%aYHZ|yafIMQ#s#->wSUN ziPBnaP!EK;u5>sN+ydr+6wYg1&H~EIO4BNXwCy^x-3Ge-cYO(4ZTEKISI$oX-+)Yx z%h(PDZ9xS%%Q=-d6WAZivmORN0M$`HbM95HjRA|<SNXmZ)Ma07)VDdWHcdC6bg-CX z{oeIl)B3s_C@&uaSHMZ2yj6pHYJxA=?*QHgqd6`HY6pG^v_9r@eg;tfXv6UmkPC`{ z$~>i$TY(#B+nxbF_B(=S!6vW`%mYeS)4|O^%cr!VWmMhuBA5&GcL%_E@D8X0l%Mq5 zl}>Uv{tW1Q^<Mq1LBItb1Wh>i9heK$-bw~4(`EzJL+^uCK)>lZpuca+Jyn3}%BO+y z*btyPQRUY<kjnL2z&$|QVjWQ0O9zi}{Vwn(Q2tfAsLgpT<EJ14Y~q~qt<r(MV;Lv` zG4KLVo9#Eylzr7_YMUg}o_&DEXtW-c=57Ki4^^LPy(qtGTdM9;`JnBf_ozOt2b3SR z?o^(A3iNw#=lmj|{C1gRrI8-sb+7~|tt(xA!u213%K7eKAy63-W1~FR0j%V{3pP9s zegfS&{t#$AC{O+cRL=Yg)&P}<`i{v!>r8d7(&bp5wdB9&>U;YErIClgqd?nDX;9m< z7kCVO4pfe+j8Hi>8jJ@!xo-r}ax4OM!2e`|(zeQC-TK(7KdiC0Lmc-2)q&QL@@F4V zlVjCQs_(VW>T8abR?c!w=}LJ?+psR@loqs2v`%NTukzjr*0Zn2`i(7s{#MJS?V)s` ze4{j@^5%PR1n4)u2WEg_pbKyU<yUR5fk15qZL`(jJlF_^gPXv1pzquRl#lxShf!>m z|H52X+BglgUZ;UuL3c13{0=H{Up3$b%G2eX`vdF(dfW}@J5&zr0NQS&fzsnv?opdW zX<!t`KY@FJ%0T5U<wvElPMlLZ-Ov70U@TBteGJqCDw|Z!P3N8ufwqU%kCsV)r}At$ zSo<IJ`ATETLkoeH;RI0GrRCE0(YnrIU%yYErSjk%pn9+b8diGw1*pxT_cR7dZ__|) zaE)u1fVTZnkPmutehR1$RE{X^j04)f`rZe@%iv*f2hj59^R+BmpITqqeoKJT`T?Li zb`^L9=>1v_<wd2VZXgb*p4Y#j;5cY#{eKL55&NBiUjGuj0+c3HhNyg0+PVca1*&r& z1u8Rc0+~SH|2j~*(E8a6^gDZVZ7a9}l&%^8<p-rtEmI=M<vwj&l}$>s`nwQFX1{># zJa9kI_Wl<P<h<%iEt77a2U<t^T$PbZpYy>~pmo{=6wpp;Un?JM2HD(u4|oBn+<gF? z=KM&|20RFqMuMO{*PZ~c1GQz8F122>fzpc7tn%bK@FMsht&ZXPQ(zEi0?N3i<&OaU zHl>F(|3PJlUQ<5$2Phr20IEl{3=Xz5)s1$a#If?-SfFLpx>7n)8K~c+JfhFP$oa3q zy`T~30^SB%)>5F)Q=RxYP<qpMZQ#7Nz0zX_=m?a?{zt$1TP@$8KzU~)(6VZsGz0(p zwiNc2eg*+A&^lG#d7JZvK;tp$AD(Al%dKsuJg9O)+wy6kvP|1r>rH?AzcSnG>-V(< zO0(HO<*@3x4nVI*fyywg|0(}%zh$c*t$m#8D}TXZOR$rB=Y!9|4?yWazeV|P6<7~G z09vowPIG|L)d=u1*a7tYL%>MT6J!Ie1C={kZsjX&$1unP%D*Z@o&i6B4DK5a9s<f| z+7>FSR90)5R0pX1Qr=U#QeN)`ssVkr%7mYRw)ZmdBRB-=a$W1-IiPjr0>zxyHdNg( z4;%-|cUs3wfj%ppV{I4ZUzOtvfXW#yx0YY&Apn&3^;qd@I?!h|<y>>1bdd#W0=-{p zOKH;0vC{e{;60#pqGeLP*Y8vs7z8GQhCr|X3iK}<=x^Tyv%qqoW!Cqr{?_l;I?DxG zpQ>y2g2#Zik=E5OU^Z9-v`rU+nZOV9J6{L-zCxh&I}~WU#5jHo+zwWN7M%MK{0;U2 zm5EwEy}>}B?dIW}^2Sck37Q)OqU^t+#~>b@<35!gdjDadZIld@ueFY~4wbI8{j~j6 z7HN4@E~SAukOZ`>TJMj5Z9rx2exP*!BGC3wdh>%E@B&bt6VQcgN+&D88ZZ?o{pxqV z1fB<KSKSXj1^P}c%V=;vP`X#X)$;tsb>%0OBU+a#)0Dn%21*M`mnu8H0!jm~f*D{X zxC)d$v`)00HUZ^-)f-)bKBEs9@E>}x)$dZCRk~0**5e}f5B_&f>1s0=0~&+&K<h!v zsr(sbtJjr|w5%t<8KA$@a_jrXfro+8f|f<wCkJSK>pgm}e%B75bgn$DdQj<8<;oJE z-!~Tw2dzO@Fb?Q@mHylEoLfLP(012vIti2>^u1q!wcvH2_f~N28qjvvy1x%7-(-UW zoY%Vj3}|`wg9|{*-5S&fT36ckN=MIw*T4`^7ic?{a82u9X;a%p`9tx)I(d?P<<S;E z+f4c6JopW41Xn<9&a0eK+Esg`3DElUfe6=YvDLQh4Yb|#H`;F64r_tFcLe8mfPFyu zI02mE{Bdv@sEwdBqGeMWc?Nt6-UeDH`rMsde;+*e-&Sd*Dd&}*Dg%9<%AO?lwQjVY zlm?Y9v<|d9YruM-w4wFW5a>7QI|qZ?Ksq?W^#x!&xEp*39GveC8Ud|$n{)d8Y9}c_ zeGIfrT9;ZM+D3Yh$`gIoGNA33#rZlQ$o>wXw4=}0XJ{LD;F^B-``}KX@6zY0T+zDH zV{H?qAKhx*sSMEi(e~5d>$mg=TGnHnQ~sO)^gTy`m-AXr`lr9qde^$R87TeT4OHe0 z2U;hp%eHZ!e&a_#+g0f#1oRs{T-WDmyK0@}0&R~=K-*Pms|wI>SK4d^R6px;!(2zC z-ngc1p>>lDl+KjqZURc*N@x0>IH14RI@a>4+|zox2k5i4J(N$iu9PNcfqCEq@DfnF zPwAtS>stTcg71LVeIn=k0{#9wfd0M>(DH5Px_);F7{u|zK)>f#j^6^xr`iU3ua-~i z?N*>VLd&jvuH||TJOUO1rT+?`b)<Zv^l=4fn`%2N4c!OE18om2+wDNhrtPeCTF$-N z7Q4W@|F-%rJ+Crk8Tb+?{p<VmS_Z#Ud8Be*>q6T}=~QtLXj$Spp9#`Hlw;Mq`pgi} zGVTFde_CcOtJbI1&wQYDqW5e4XgRf=Is*OHcfdX1MeqmE-)bFq|8JYhR%P*Nplzt% zruTgTlvh>*ZDW1D(t_TvWz~8Y&M7@>8TEHRfmvWCSPqT=<>MSs9q4^|Kxt6Rp|q>V zCxOZcEr+&^+7Vg@&ADeR(DqQeQ+n67()+bOlt#2{7lG;nt*3v$-~VlOU(2B9^<6%G zuXU_#pn6sLL}k`)pwH9q*XydA=YUUu((nW@3~1eYfy%wZ|J|>3p>k2>gUU_4rsdMM z)o=1}E(a)2DUJ35Dkt<gO56IK%6p@LzUvJz8>l_6e4+R2Z}pyrKzVcsco1mabOTx^ zi@+o>5IhLJ0$L|pHs#k*Kxt6FLHVO9P+C(StOitmJqI2I`b_;6{nIx26D$Tw6B~fi ztk$d6vwo}6%Nn5csNb!6UE4%yL(6<K=mb=LYMm=BX}xQG2Y{b**+BVE%d0e_&zT24 z0n5P8K;N+uXq&6NQy%;nOb2@3CZKZVum86C9@SOaHY!`R?y`Z>uzq_Dpt9o@pgi6a zC~atc>N}@``QQr3;k=ejWk3bT%IiM@rE@KZ4YZB)IVvmlT{%GC(G@5Sy#O8p+NN4B z$w1pkX-Vr+<$$)0wv*Dlw!gkJ$a$qt<;8VC>rQP=Eo%-?-qN~No*xb#2BU$>E-i=F zy_TUJP`X$C(|2my=~j7A+d=DH=|SsEzf;SnbgF!#^q^ZU<Nw<H2>VJOO2_&PZF7}N z>D;H~ZU(e$N(agd%4a)({!Z&qd95+fvg`Y_P4u_=e%&Sj;XdWvYV0c=PXhXlDi5>{ z^`2u~SNeYuJPKX{Dua&$t)~`1dCm`tIH&h-0V=P)2Woe&2YO!XL1|R$LCd7=Q4i>M zD6cEOsti{BtnIM^d<(Swv|g3Al;@SUwVw3ar(h0Hno^mh&)4#3n`qnUw*@(`a<5QC z^1)f4_bM;xcPO;pa>YTpoaiPOGQf?#azk$(bf1^H^l;>+JzUV0gRKKzbKXD!=fWU^ z>n*vr8`8WBEn4?RtNM9vGVPZ}JEif?BzP<y+r>kByD5{4t#zZFJy1ys?@r-4$?T_6 zBfc9_JD)dQlXTu(m)32=+j`OReZWmf{uXdm4xU0PwGxx{a#?<pL$Xu0@|9cUv>cU- zQY4q8Le9t)*)M-{eT}S=@8lO*A%Dr&QXoG|0#C@K9W&sy1nMp-?fAM>T4cYRmw9qc zK9Y$1N%@t6+VE|6^WMo=bW^|sl&v2n?nzB`Kq_QY6C!o^wp6}9pI>g3Do{f<oSldU zFOl6mb%&gjAGr3ZWS~v!)0z#CMA=YFEvUa0wbB!f-jCl5X7utPMwi|}reSZgaeFW- zwIQSB<5^uUCM|4>*%lKS0h7hZ!j_C4?#W2uPK@@b!ivrXa>70-sd7?c_EDK_@0EXI z2c&B3q|AsOlTOjY(k+@N??h9`N^8Zcc3tp@+98=*!$mFmg6c@-QrRR2sDu5|j2d~7 z7C1>Q4YX2N70Am7gP<I<j>|XJH?q*0Etjn~WV+)AY3aNo>zzr=qL6KRxN4Xwu0&=S z2uMHISvlc6C=;FgrHk{J40h&=X7s)8Okn2Ds;q`v&wS@>YP!0bF}k_ADR<Q~rLHuS z=W>}Vu6VP@Rg;yi8yc4@g;m5a%A?K=@`-byY;(TPcCK7@tP-(KNPo-8j02g><W`pq zoE)MxmCXalg0E<)E6AN6IX+F@@3t#38=RAsTS{bPtU`LlQjIg#gpo2GnQ^x(*)Q$L z63Jmyt&dgMJtjF;lT|A_G4l5&W~6D&DkM!!L9~VWHQLfxu|{NQ*Ji|GJ!V*`Z>reU z8O@VKrgbG&vaQW*)J@1>Yf7eZeP#~JX2fMBXxtCAc!->oNvZvhykW1CvGyhzZ||2E zz#sM=nF1Y8L<Tmps+gWueR}k>v8a>amjG>YSYE|P--;Z_LoQUew#d`gS=uBj1y(Xy zbt&}l`<cNgff*GN$oh%Dk(D#d%9G~SztY~iB9B{WVaq}0+cnM|l^y82Iq>Q`Jo^!3 za2&ib3;yd59Z!RP&p;1J*vV1k$r16QscYbE*1@}ONTjhYS&&u9CalDaed%Q2RiXzu zfed>mJx39#CjoK8{rS|<FLq}}7PMowyG&*$E#cb_N>zAtk{pwPk|%|>Eg#w`WLZ^( zHme(pI?RvNqE6k+f^<bL+J~hD_h-vNIbvUug*@YDkN|H@fxEv)66~j}1#*fK7Qj&+ zI5Y=I*9oh(6IMxOvO-VE?bc6nkF`>=t@UyiJLI6+t=2K=V;z#&)+PDPa+Cd$$w;<% zW`Qe|7pb>P)Xf7(rY1<u{yb+sGW`njql(pr6$BbHx~mdfH$CDBWaU;POTQYCayQZU zVp)zH-@-dKVRJ4)@6M)<ry|Xsq>Xx_OV3k>PeB`XkX>#hMcDp<Z(Sw3?Je@1eMVlg z!&28yX4c-CjH=Ey{iBJD@DIt#NV%+vl*qZrMX3=zC%vQjG9p?olfl$zP(Fxy88w&1 z>Y*)J?Y^t23^Jlk$h7ydqQH5ni2f;aW9wyvy+P_D?{-s<EsTXmNF#EUN|en*7GID7 zq9roWDwn0!b=hkjkRPDAQPytB#ZK*jWPVVpl9kq&%-SZ5qN!(2#u}IhVjayV(VH2m z(vjKPYn#U5B=Zi#YEnaq=4>$CR0>ryb3(OEy>KftE8Lq*<N@YdxGggd`j|O2U&h7G z$rk&xw4rvESpl(}l}swK<!e_0GhgJ(v#xW}*Ht8sxO~inTF>-w-^|RM{mrB9E{q7P z&1~J7%tTY0k?<YJxbMyExV`9gX~PKj+Kfy~Wrl;WtZ<x>e8&Ol?mQ(QIKy(pnQZF0 zk{Q9|Hp|?86Z6zG563k%i+t_OwD>kA%b#sl`fcfzkSCiHE=eHaikwL(md_L7%<Ty^ z%zl3zljyH&a(%VToVaW=-doqq^)z8+&6cK{yBQhd^_eZZF`1pM7+Kj3tFRjxzV*o7 zPhj>;7b~SY8HtIVV>^%^Nz8mzomIgaFe<hVGn=F{Q$T{5ja>R2ROX&H><f}_Z<GrA zH+X5k?28?joY+xW6+IviM-NGz=n2^pxgb*_XXVbwQ5g_9CiNnDvLYOnU?|Cq2-ToH zG8kp%F%3fj=@7ak_k|9~n$TwH6<#kF!)xV<$glEmWSi8Fo`j~ZNho?<9*O14yjX!u ziCvRgywefeDeYoAWJ&BV@z}fMcKc6x)7~w|>~m6ELedf|;HvE*tFIUtcU-o?_jjSK zPou3Hp?%uGt2N=P1Z=T#>5b(u5dGd4z1)(XrWCTzN+h1P8tphL!yW%hGe@3Oc6iBx z&SdmX0vR|(lIb`t0qc~6t<&OQ|FU&KKC{lttsFP8&dCrfSEgD;@)*ymYh9I%*d>qB zhtv<g?u$Lp2hH9UyQK^KsuuHftdbc>>TcML`;cL8i!BSWOA67|w_`U=#}EIQxWpRl z(=*s~SCGv=pvmuq*KH}3>sVfuu#j${{3FpzV~|1<_{Qh>!smGAL&%WM_zfQHr_1PI zCzixWZ0}w8FEy-eGW%TSX{%V4SQWAbdi~j|Z)RCd81>hb4A_pWEHRYTZtiB5>>kW4 z*^=zs`edh9F%ERA<t&$6M}_Rc6yN1YV)l*{uDi@Tj$*mPab7%*6SChz7EwpztWxo# zJ71?H7qFXp%W*k~+<6DR^q9R<9=7x431sp!c0*)$Lq?rfGH=Er5=6etjJg@E;`sm7 z6r;(^=usJ3O<`4zIA*o;GGkGK$%s`&X0>GWSWn}PwI_?a0V`i*F^bs1EX5b(AMBEe z$fAU3DRkyG$0IdNaip<HiPmDJ-6TfR1?5F#+q&pMNr%qfj{PYO?7y*dF39W9R{0HW zm5xPRhiG;idfmEUy?4j%>Wb`dLj<!88P46PudZYTH)dAfbY>oQGHYB!{-K@M(nhPO z{fStcJ83tE6iWxYT*k(V<^AXd*%jF*-6A`rQDmq55ZNPdz*}8n`{aYzL0KKUD6v>b zX4)=#J6(8H5#(oye20I~!zx2g(z{?K(ess#Et0}@Cq3O2XuDEcyh6sK<DcZ-XTWIe ztTL=)i~rkV$K=Q8R!NL*mfs?O$~}?oG9!FM+J~;o?}4zqQxTFi<t36_UMAm{iJU4+ zGn>lmn&yGlW=pUWt9Z0Eb~uC4%a`N|&v?oHT}EQ}w}ej)k?Js-;n){F$tFFnn)w<m zj7v8o<9udN9G+oZiH!DLl|#Nf+2<>kvA(G6<9q{fn-{Cy<79MOxvX`bkUO0Fu;-4- z3)popW8+P79+7FzlXAs*N#?kMGS;1F`gy9dl1sMvC$5QkGrqHFlF-=<No;J&6H`r_ zqzdVobWU0)9hTC>12R7GtbCRbl`Z}R<Mg{sr}&uEW~kFVZ@f9jR1zZ?R-5g_3c_~T zfNwPgE54D9<cQT{#i`C_TX=|B8X9AM3_fVmgM-bbKs%Ee%r;YliRNGszbaHNtwI&@ zcBnwS;ZyQ)c&F5jY?Kv|E!f5T<b3q3JQypJ8PM-wY{0}=b7nVeVfLeQS3~QsM{{LB z^a#54h+L&^7es>6B;qi?hAWxJ!*$Fg@MXBNaYf?Il!y~rw#@BOr`a5}r6V%)tJrCA zV#C~z-S@YBUWP+!CCG`%cv0WsWqgGkxrP0=pzE)=el2!N_QvvLhFyvc7Qk+c$X|{q zbzdYIu7h&g`IDqLzmO8^Yq6}gvKXm(k+{WN>mTWljQrIhvKo3H<!FLE)13_eA&d^6 z0PR1_$m9Nu7;RwEk)vnO>m9IrdL#QL;Io{xv1{!P*mEt&mafHUfhx>498bo-EqBMt z<*8VyoQehH7ds#)_<~Ewv&WHF<FS7(L+4mTc(iTF9%@ClVl6DyIKHf0X5eLAP%n@6 z+m1XOiU(DM4Y^e+<C*%Xff$xhE*A1}o_i3VZNI$3USIe!AKP#lzRx#ykvQdFnT?N= z4zGQRRh-H5=Hi!>Am4Kwm%%@h;MgI4#~yS=flP9wG7_*lvw9^lL%7HQ>hK^kpgX*| z46RceS-%nfeG~8XEvZI?sv(i8R`et^F>XrqF}_x7e69lY^EPN>Rm_hsAo3$Ra5FOC zH+0~KvA<<-Y@5`G?UpLBv(gFqHwJ&<(by1XvAdrc4u&zhb13q10JEIj!sx!v%sSo@ zG(y(ZFuzCQj3-hmS3_m8Dk$=EAkH)nR58^9*=AIrk~t8F$b{f^sU5n&Jtt*p_^jN; z{W;izU9l5Z;$Jkw_j$p}V${0Rbav*+VP~$4a)sp@zSPTZmq{X|@R7%3{P5EVuN(U$ zCbhf)S?P&M7f+nIg3UA69hMsIvohOtNUk~e$o=qj5S_aQo%)vJoV?@6l_QQa8Rc{` zqhK5};#;il<}hD*+~%6sWA60X@<x2VJncU(UTmbBu$5{il*=x^$K2shHjCqlpTv92 zM4!WKVOUZjzuD|5mpj}S<qzb>5T2a^o#!DVciPvf*NAkErkcOPRm|g|%I3CU6*D<d z)i?vyOk$v>85gK+_OML~`c1>&HR%%kTOJDjF580J<*m@a@=Lf>obX>`{JjwE^Z>TW z1ms~C`!8|eBcF*~m49Ov{&gn4b`xfuZG|mXmsv;B8Sz+&S+i=IyCaQ2dsc4l#tJJP zv7sBXYDOBflEm<-i}0t*B$4*sgs%Gt-)1awDNnMX=Bjv2ZZaox<wa=uS=lDTKo&mC z32dYF@byt_qGs4ZOVGRRut6f&)W@+;-g1;no+BnsXGF>zh4QcCg6wr%lyi;}$w0q9 z;4GE5oW;o9JQ?IXBMp$dF|Hp+#{Y$Fdw}1raaiVNM<OG{s$yAWkiCK*O!=nat3C&h zziQ_&%Dg%mfwjnLY)U3}TkLpb9yaMH%AbkPc?AA?*s@r;!f*CiIq0*ttjN%r)f3v` zYc}P$E~}NNkfB$KU3F1@B#O}mK0iTxW+f4k)%e`!B?arqLG-ag#-Xu`?FfDzew6KJ z#8DbE+Eik;fK;+(lj-U9ATJ8!0&yL@Y<Z8P0McX>zS>r6FLvHV>Bo1Ca#UqSh6ap` zuFovDY0Ls2ko%~EiO#>In-e+c_*)*vUc83g_nKu(Z**{Tt08_`3johqb;yvdYJNxm ze}Iqk2(n}h7>S&^4ZU0yTkvn%>`B=}dmWHH*sbp(lOM1zW8YrFMmQrb`-m)y9g@zm z6OxBryfqq?pQ2u~EE>;jJ3eMNh%-+yZQAH4x-)8-cIbj$Q9q++6S0ZhjL`Ej$|i%6 z!c~wjF6yE{n&I<ww*Qr3ylbv~O|IEj<#ys+AIMet3OP8JI(!E^;Y;M@Hrn$d@i2|y zRwYKz9KWpxQuGew*-&iPF>J@+&yD4Kp2Es}g>QP9UyR1~Xo#LU!|y-GQyzniPG$cy z;!Bly=Ms3L6LNkZWgkm<)A*LF5s%43r-dT6ROdVHC5E&hn!!rum6^dNk&%lD%ob6F z(NWcy{V0>!GE$fsF3yCw)&+n5duXi}Z#{ub?N5295DTq~?0p@&IDmcG&ThucfZdr9 zxtno-_{gos5$=hv*vfo@3~W=8YR;AU%-PZeGpIDhWR_MjS*2NKLTN2iwXBxuT25TB zqP95~%rb2wsmN)IUXW6`6J7Z?GVO?0q(8RIP4Tw;8&8bF-^k4Kw=h5W8=E)Tzs29s zc>P)CY<!COEZ%KA@gkiWc6$f5QGIU<^PRgJt6sEWR)cJOV?U$rZG3enBf#RQN%xJ} zF%LN+vI4v3b5Dg#i^HGd8Gkcfa*xDPc_--~S(5ylJduKxn6h1NOWiL|f!9-y%l)a> zB`+l+IVmA=Bv;7n#Hjq}_nH~LMAL++rV3mlMey`ZmdJMMYZ7|53clAt?2onKRI?vH zE-sX5?haNqhmnnM2Qtj005Tq1aYUd<-U|?q4epQ&!9S!h^tWV2&PazSzE|wB9E@ET zjm0EDdmFGf2BF7ti4)F&o_j*i=V|vxBMBxD_L({1i1Y|w5nuR#TnharzlXk&S)uQx z3;yDP;1L-T%$0&bK+Xi{ZDo4y)}ff(6E2cZBIo6|=qc#xU+HNdkj?gX87dozDQ%Dw z^tU{1?Zg*30*_vo`|(2rdUy(Zqa{4DDiV|IXoPYlFtRX%UWsIEnW)rq7D&45lI(IF zl_%UgrH<!s`O$MxPI<!evM0eTc2_koy3iHQ6nvmmvmP1I)9GQx;9~K(&&f>pF`4B4 zR~Ea@%RuKj;u@!97%`e^@LCh(@}t-~EAVL!N77AaY`j*Hd^v?LofON(H>$uhwOI8a zj+y7vm`$V}qu4u}<&K*f{n_61bmXwQVpUd+NWj!_GkXD%b>c$vv3c^P9+@aj8Ld<g z`3wJGOJrb6q@qI-BDvB#d|n)3>VYNtZbA1v8EwFdAaz)6AdA%uGK~lOq!v6sl4qPD zZo2|&YbO3+3*I{mJMTN*eZY~$N=sSH?ww_N5sPi?&NOc9@RvLd%pIPd%#?MfdDhk2 zJnn4Ai0}H$UZ2GbGSy8lM?+@+XwPb2Ehuv(W-H2<e#Ck1vR2E7)(SaieI==mpCp7F ze$l!tUt;(Dj()30wEr6X?UCAK=T#v-=;Avoh`L85iEB4g_7C`muGrH(@Bv4&orIj| z97|%Paxx>nE1Rj23{w`a&dgj@Z>(UJ7&$G&B3tFT$Ql_MSuGZJ`m*p|c|CkiwxiR> zVJ~%zR%M2SYOG$Bd}CI$PvDEA&~kNb<=Mn3YvN=7#Q!9G=So&fbXhC1PV3-@$B}tc zAm5{FWBC8~SqJ4){NX3CA5RjOv(N!ac<}9sr7wx?ffoLdcVZi5S8TJC!5=pAK8TDg z!TyV3SJbr2WRRUJuVUN3XCIO==m#HV`G#1|c<AUJY=c?EZ%Sg7nZ+v+I(9H3*(Po& za>=Hb)%Kcu?P{!M+lrNTIy2I{4Kr-CU{=*G%tYFg8Cg4;>*2<xB-E5yjoX+v15Hg_ zMTVJH<~6CMapq`obyHE)*vto)it3tU#Tn*-QeqF~A?Xw-l%}Dpk{v0MI{4hpvG3~< zPbhO_m<7by>v<gJO>b1T#ktKnUnO%XKF$2a5S94}`7#)P>`>xq2_>GF9}{yWln|1O zexG?MKGhsSF4pyCng#AGGm__w$1huh%`yTT@iFwSaUPdSu2b@n`@G!i&6NheLdlCS zmydZydQwz|&@I@H=@{%3Tb@j<kUvw4C6Ibv+-V0SFLkSYn7UaCQ?`jeWv`r0Iv^7h z_sT{;de%oQ5MR{ivBimP8zMFs!=`8kPkx5Hx;5f8t%x-a4EfEc!6cIyOk;M!6f+!T z1d`3wiga_XB9mGEGR<=VdU%3Sc>}w#0^Eu1y`1SNZ0yXz;Vk4`HS-g`-L5dbSYdik z!y=2q=)SOn+1Da+G!&6<LQ(mQ?I$5ymJmn#DMWlSL{D<)oJ<UDk*=XtQVSVbFSJQ+ z4;_>@IiDNKlL_Gh_`N_5VZ;B5eEXF+!Xdj*!o=9CTl=KBW1GZdf6sDWkU7|U?eN=Q zcKDfnJQaOT`LHp^AwM=DKgQCJ@ks276ho6m*b8^klXD4Lp6QH<+Z|_md6G=F*KgjS z8+N)kEX}+jS?ej0cAl&9hx@vWcSoctF@a<^{h;n7R)<Pu=A~+8oU4fuXDc(x*^C)) z>l+6$p*?ilJXR!4BUk0&P`*^dR~d|-QZLZNEC_VR_wHkE3*T(I5o>-BdvYrA_j~b2 zj$)_g(ib${eHoevNDKTCjom(oOs<DdmPh>KAU6L+JC8oDtFj3{{8hf~LHzLhh#5T; zYsAb;by<}x1DWAu#ffrxI8rE^sK>tHLTQYic`kg7SWUh>M=U8@Z5eFWh7Jd-DTrKg zJ576Uf(d!kS@k>3e2WjXlUT<0q$Drnda2WvkDU%P(<$<;GbopdqoukkGs9FfbJ5v@ znTBsChSuHevzn1TU4ve5A2Kc`L1bMeEaeD&dULR&%IE{R&&DFaU#(?_WC5|HWWFmC zTVXMF_K8?aRxoMIOa`^Fp>mjgC5@Tn!o-xWiHmqxCt_hG;WIJ?I%yun7Yrnt4#BF- z4oCbOnHPsWmWu5)G?HXShZC5wKGF1KI||$EJajbN7U>C(_r!jmj!!r%Rs#~RN~|pz z`Ql|Xmy6h?eIpK9N?%Yh@zIy*-#CRFe3~fQ4D9z}WZ)ER=5O%B9*4gUVjp+Ip3Fh# zy^UAX%!;9}E#lZ-R=LZ>zi7nlBrTXdy&WT<y3i{^UkldzD(t@A)WKZj;XdT)CVqF0 zI$q)q%5+bz4Dy_j_UPc}i66a-{!gWUWHi3gv!GCpVhilXZrw)Bt(OjHlezW^;@qpH zHIcf$#0Yv5zg$E-w=(+mG(N_o_!2#_8&*W|&7%Qg)1~rBEGX-cdn2$PUcjHbHIivE z!nI73P(8CCm}6eXX8Ji8Z>rtk<ExSxJ|XXg|CQ9pIoVIYN?tT1z41?eq^~wYpH8;J z$0{nEqwk?7KI=92VQJ|(Dyg39^0}LSF8HP@eA5?OalWIuaXad=a$gOy*)q&R;^42L z7bX*1oF1)^3z4vVjeVmtZjUC8Iuu>82)e0*4RqP64DV%`v7Quj0$VZ(e|k&88Tl8P z+%M^r)W)8CDRGy~OxP*+`VUC;_@i<)?u6|0UX^b>g)+xoC@&!&?{#`jTSqb@pwqEF zsxzXuCaZ>5XSUT!%z&3@#zkCaYuI8|JufSpI?*-J8}jHt%uU8}3fV?A8A;vJOm^JF zDEMBihTPpe>FQt>yBf0sO*K}ltHf*^Y0PM!#*Aml)RT`<)gJt52Q!=4(v>(-L-b%a zen4IPgWj<;RwqiJPdlDf4lP#yE0ZPIo|oYH21L0g;0Ldym+=}=(hhizZxNF^fqmTo z*>jJTMkY5p&kD;*&UeILI|Fa6z&CmhkFyh50N3&9Kf_n+NsR3>eG>1*euK9*N^x|% ztdH)MMcB4qM$gDz`oU}B<LC-EUiw;IC60K3KCD*QRj=R^?Isp<6x-%a<Xs3F9)NyX z5sOMae73E`240S4nmh4-?ub@lCed_agc;08Q=QpbvY4?lg;5_Oe_#V;U`zCZf9}Hr zeu?c;cxXHJ$6;jC5%}yF@vb6hxvllLEU>mpl4G|#ivFDIxFjQq*YAe^41I4o_%fZ5 zHV<Mi{DfcCi}q_6t4*A}4t=Cq%;J#9C_E<=>M>hrhw=0shlm9|h>yIO{(;Tdb^9G{ znC-MNEBj_LtE|I3=DaE&p{K_Yx7|pez-IVq2k)syJp2%H;v~LC1=~W}^dGQ>`dEZ@ z^cCkdtD_U~fp4LzM5{V8j?^Zmh)v7(8I3^^b65h+U9}Rig`KP<8xveI%9V(}UDNyy zKQ$uX;3zWUE%+;wc))DzsdLD`Tceld1bT4=cK4U~a;qb?nK7^#@$B}@0D3Ea^gw32 z?E?+9W#-BH^h4($b?8sL(a(=xihjHwTF0Xza!{WP&c=AcwXywD85QYZ28pmF6Q5sA zlx76I9=D?}Ungd9kpA5(eE%1;OGEV08np3L+VN|Ayt+L5PrkPoan70a3$G(~=p%Nj zvk-1}*u-3%<_+})u%*ACK3eeY8_*HA(2KPV8tqJ+^egmxSK<e?i2byoKf5Qks@g3c z<nkqW;}kaH1^D7TJhLu#PVS2BlC#nEvMjnr&P0Ee*|Fb=<sXFBbEOk9d_Mm3@095h zsB2}gx=L+E%-3VT27S-*NX}wnEvI<rVL45l;vD{0J^LbkbJ!icHy<4twS&?a{+UJ$ zs*vq4>S8H<)Q9oZ3!#7tVp4fzsa&T2z+oMbp4MNo7@r`?fe%1Ta1S=$1xFk+9i}2@ zDiaH;%xLXY^Dkw48agV*HtUV-e;=PJ3ITkNE&M%woyUml<zn-ELrgUr-Si+azJ>T& zCG=Z7O$@zuINh8HRVALEW@d%F=5u_>GUE4dg-h@U3Z*T5k(ubrIASGUbVUg<;YCns zBDVZp)^TD!x$+e;;qQq_e?aW2AO2S{**pudM~2`tRbhO=X}N=u0bN-Yvo<p#`dIZU zB5vgJHSCG1*cH>U>9Rs8CK9Y^T7>GbYIhbZFeEaAa71oJUfoaKyz4+-xlYTQo=cJ) zcTGlM=XQ_BZ;nqgL;Y3E=l(Ra&Yxr!`cuq6f1)`<Y+*21;fpu9amgkpt`e&<W3PK^ zm=W&kW)L>V5T_qM(o23u8l#{zud5Oxo{+`(QWMeb70_c5`nZWBD6cvzWVb6Kg>I3{ z3}yYEIL94vQTZ92u|KXzR>obG;c?expSMh+#D5RDQ_Nki3|36^Lnje3B`!-Yc|xu1 zt@0B6w=1Im%J2BOSMfmyhQm@h?7A^~-FM+)d@v+J<dFPE-^sLazPybMY=_;f7MDo8 zG!c34W40p?t4_u->d#3INGVbJ3rJGU#>$n6^p9<(o-@(YuhVB^N87VnM+cJ?ZN)0A zjfgF!G1Fu~eAuyb=_~o0c<ns4jqthGMhj&Uaok(*7i%MP&qb=6cO%tIFYKTO=&bSN zL0I_E+vzWS6T0d_KS3FG$0}(0F=TH;Vg}pc`vLTe{*GL&g-!h=_VLF~H?wiYo89nk z1v0BSdS(T3;%Q=OuTbwRpqbTdUm)f~G?utejF?<NK0qf7$B*m6_qIdc_riZ04xZ%O z=3s-B61zS^?GDG5AMV^G54iWpHP2yL>!nZ8TPU}9$<rY2{wg-Z3~~<ccBYzZmhVOe z-dlEMQ<+?kZqYiX1z1D>(<toTKadUI5-Vs9UM9A9oqFE{E)t*VO8u|G&Z~`1coS5i zES0f<m&1oY5r?=!KGuHxfMeb?^FHtsBMCWuriz2O9x`!0h#;?CA(lHIS>h(HdxGBi zv36}{yUH>p*iD-w^aIl;dx_ZI&(PtE@YG@A921@JhclDD=t|7Gl#D%?h+XK%XYlY{ z9up<kt10i#Wq&Mo^<iRJt-;;ckT)S8i;+bO@L^^XBfS)<WPU;3{{j95@x(u#$4;(| zFR&lkQ4d{_iyz&R*ug#c0hc0W^bepbW0%M`D1gGq=|abTLod>5V#>+*NEW*NA#CAt zbj=uYlO`e8efU{#ku%YUcvOGvh2g|o8`IbQ8}?!s<kP8Wf;mQ=Hbdus!?QKs`wy~n zI(9}E`2HetG7H`OJ$$$py|@l~zYE)KAF=HcY=+yQwZV>3`I*@LQ2OFNw+f^RxkP#N zc%48h&P31rKwt0c#Q$H0-fJMsK96CSK(noRb}#zlmSdNXvi8env~hcEp=;y^?WJ$< z58^7C|EPJb&wv8za0oWSa^f||k$V@}{!KjoG2(@Du{FHt?!Vw2Z@5efDhlLu=>@r` zn7psTgEGAEAGuO^T<R3($q_muj}v1}V7k*`p^(hO$D5BHY9ObH>YTwpI4`f_A3TrV zoJ#q><God|y;sxbub}rHf)2X5vRGxB+!uEPRtjlsZgV#=W3d(U9QBM7{yK%7G7lOW zA5ObrduJ1``~;soGvGGsgCUuW-Y-B;o~PgLuqR(8#9xpJiHGHf<o(h#^$4+nbCQvk zFPBrJG9%SzvcTRHk<U}GuZW?JNr_356nx3#m<&%&G+!juF-sF$nMnyP%!PO&&OZ8Q z>H8{il}Z5p)s(){Z;(=NqmM7)*ZxlX*T*h((xzF|U3=`!2INj0!H?{YZ#V|qzYBd0 zryT*>wM4$f&o0JRz|v=Qo0r*i5}9!^+iZvtmqw>Qh`jm^9xX<1w8l?+B@}P+gKje} z=rCsjmU)2hzEa^g&sD^mtO|1L%AICxIT8JGkrbBfu2r659xBf;=ZJ4lt7vGN1;{oH zv@wBT3lj|0MPCxnpr85AXfd)fmt4Zjl1}g0BB(|4eCrbLr)N(-#}+tlN9pVGn7zo3 zQ{-Ay!JmAASV?tayQ#?f+r#Cuj@+ODH~h>bWRMTLI1Ya<#S~-H9dy=aHI5o)Bl6=p zre(MuUnXr6%4B$ASo$ZC-J6tX(y8-p?58C;O*+$Qp7M)Kizi<su1vam^W+v{uMLQ4 zRDn)AP|oj(pXsc(Zu(7v^qUWc@2;@F1m9r><(<h_d_djK!QT3e{Fd*X*=7@YU0;*q z)!UP0Uh$CU>7nn)9d8DbBQTIY$p|sm@zDNqc;yT>elvWy-@+l{GZEPzw55T@d;+CX zQIRWeRa}z0EAnMZMVXwb2+L;y@_vGGH*(d!Bj$4$AFYIbzB23-joU3n2MmHP&XIpG z1pT}STW2R_JB=*NqaV5yJ~Ys7wj*C|bzG+ps#IoUBQ0RNoW8l`oO_#V9oViQC$kt{ zs*i;|45{%ozEDHHIY=8-BaZMfG1VurVL!%Z`39SE1UhOgw$?U$^ZEEb+1ORzLbI#T zd(TEoBn7{+2X@x?$hXRrr6cvQ9~rz6pVbR4VM+XeJ+>UX^CWcM3BT-XXu*p<9e_T4 zkNE3l`VpQc)-V`4eS#R;&QLP?Khf+YE;}UBfd0?c%vRXd+!gD_%x!I1#i21)UKTkn zsrZPtETzx+6XJd@eB)eV?T@+~tg@P9!t}lOqznt;CxhJYjZPkktR96f)m+?7(W}w} zyT2RTU-_PAkijj`rGMh9Hp3sg2VWrvOX6c})?)5|mT$cSf8iDSFshRa6or4Uk$t@e znbZz>Gz=Zqkvcm?+1jJe+hWJ>qp!nDzsI@Id3iK&QZ|+ykc#4ca!=t=NxyzsdS5G( zoIGMxS5wT>dFf{NwFL7SiCljcmdI@-SK-I=axrj@IP`VV*{U{^x9|`4_D9Y-<R503 zO!{g%FudVee?&e?3=rcik{43)q#`9>eow)-NzRvPNqMp%Ay<Bk&z1YI7q_|dutoA^ z1-{3N=ojrL`JG(76A^rT`1vt(#QW51Z>F{G81FN7V!Y{=>NXcD+2XH4E=WdL_EoKr z;h81!c4ofJ%*<n-y!}jDCRTNsSxhlLtV*2uiz#{kNGp|oDVJqY;t4qxe@HUo_7nR% zAcx48cp9BH%sxx(?2;U!kLP3JPkVwVWpeO@3}gFZ@Pe!l7RseyL{0`Rvz-2&M?hcp zTLwKQ5=b{I1LREy>Y0Io24+m4j(Lqf`bEh1g~SJ+CDz&)Y_F(f?yVr-qdeX8EKfB{ z%aTkhbWTQ@$4n}7o5XVZOF#!?;xO*(SW(v$mbWrX%iEiG%iEf7${TT<ZSJecGJ%S0 zvxUC@4Z&)x_DNhPQU!Z5joipo^BcDEXy~AT{_i`9Pe0+VVs7zdnqAo0HONOA<gH~! zd26tWRtj-!x3P(XANHWjJwe&*DHDgcRG#rxNEFP73rZS&hYOH-zIbxSn6@_u8@__$ z?|tRc!$)62T(S7$Dr79=y@ec$Ozf+B+-c?`Z0%fZqi)VB<}K{79ngLO7JM19PxB*J zlHW5Q`E)2Eay#*tE5w?YhLg?L^y`(eorX+oPCx8L`odlzCUXTF&`-QV#{*15P84A? zwL^a1$?xw9+cFNHWq#0Uf&rJAf-JMp<$qTA%mMUE(}3UXB@X^;Fw-0)_qIs;6e3N{ zA#BXA$X$2=-Sq&r%iWZ32)4~F=(rlrGTDWX(ci^)AzND!BYqEAyAQkdB12I25ocQD zCWheNEuGz)CDXl0;@vwW!F@vNxUb0|cM0*{0x5Fm$_P)M>?Y>i(tAaor%zx3cpsfG z7~dox`kvzPn^WYBH6ahBKe_({uur?=UpK;@@nMbT;m01sk3EHt;)q_6-o$#Bz>Del zYoCUSq$PP>r-FI1gnr1EgZc6#^!gHblf0QPf>&g7@UmPD77&lGko$?z&mjkP9dxrN zRNZVO5B3vc_b-RYlVtgoo%92wpbMV^f*yE<wsBx@eny<G5Al~WVpy-(@vLy~B1cFV zZxJGfRgUdK?jO3g2pOEKJ_9mHuzmJ9>zUEyDX(%hVutCa=&8o&vO44>)hAxSI04gw z9PsAM*xZ=7SS_=jSioZJ-CvQ>`N+C9#KmV}8}5K+Heie1%l=y81bOJnBxrsBzSEy! z;^p*F)CmWqoP6Hpp`iHq)-ZiQFH~HYkID*UVo6Y16uC{Of_QTxKhX@$PdA(MtD5=+ zRm`ZO6w|uYVeYO7$cw~7M?qIQQ`>vQs=mjbzY`g*x}+~Qd|h$?N4txp#8WEY#>HeT zQ^S@a_ijlH$t_8?97?jx{v?rxY;zMV)6^f6`tV9Ke4mfqrScK<G}Kke6uNTE1Wz6F zLtJh1F8%L6CZ(C3sb2F`y2$J*B83?)^Kn&lQPl+VQAV<9UM0m$O=nz4n#T-A4%T7$ z=K;x1vy0^h9_M|vz!s(nZHN3Fikz+PKPR(%r)9qPB>la|q^5H(v5oEI)$fwS(S!0( z<b(_kUzGPlxspgf+0W3+uwb!l4v>FSfh~_MmWyoKQ<`MHE=e$N6kBF)QMv3dESCO- z<WUqx<sp`$DJ@Je+ls214aGIh){-={uQVpx$|~f|@}OjsulaF>U~hO$L;B@g27L6F zFanEr#44`HpA~21Nzjq~Mimv(wZd&4LQXD3_Fb=NU>-)U<^+k|k~4oN{Zgmt7yeFT ze(1%y#NVH$kGm^8c@?=cg=ywC`zmBte1W{=XFQNUAcfTZ0rDy5`2D80Kh;#w$M<`D zg4r7HC12fVW)qi4Oh`6!64Fe3VutCHm~3h#io8T$-DH1Q{K&hham3EZhhK|Lzth#q zG<UT$XPk{#k+wD~&s1kTPlmb4S(#W^qDe+yH6^}Q4PWON{>?c0HqMfR{%rV|j0qi* z?ZM-+Hi(}Sx+ZRT*N^Yskhn_^XuT$5Jw63rV1su=*WXJ&P<Aw5eh6Qd7WA8~CZ}OE z^>}Z&-~3S)Z<e7uqO{Naa_+^q$w5Cy0>`C@cf>-+C4-nnTXb4CYzDRK<A|d~7<=U= zkEto~(3hOeSplfN>ENlxYDGRXkyuGp-+Fn{H(6fv)sp5u+g=z~VIT1p+ZR10_BnSg zx$K%H*{%xuiSA-mt5wGBa$DP6eXI@cQPy%#4{NB`SU-AyHUD@YHru^b%vA3t$?#5+ zUp&p^K2Hq^xx2}u?#Jb4*F3pIeqB9hL-UN|1y(fOL@wi1B2$*tN8+svJA$pggW1cc zvtmY5^H1=AObfgr{VVR1Tg&^(gt7s$wREC9TKcI>DaB7@THk(U^-M+C?dF&AN#^B> z7g<I4HB%gT)yxk*&*~(jneo1hIfdLi9y%e*LW^W{XtFd54Wupl%Z$({$qv6H$HFV* z%gAMUn;7@>SVzW~^&@BDK1Lhf&#dgXk@r=d6-Y12PmXosaxOwg%$BI*VSL@e*t`AY zHpeKr$1x4N<vZEuI4f7_fB1|3gQpy0SSfD`@z;suzTeI4(e0VRzY?oX<jV2zYI!;| zOYRMhm6d^^GCnXw?g@;L+X4?u<G>8LP_ayIt@uZV;vd~y*3^tH?Qag0Og0~tOf@@7 zo-yxo9Hc+|O2ryU4?Q9iBAsMMtO}m851+V>^l(m*My})7rhUx{*BbMbtA^!pJ!ZY^ zTx=ycmsuMeZ(GkhMqAAsEv&;<F>&lg^l5cxcFJ?u+6!e2+2ws04RsgeLceEjhR4W- z_yPa%S!DTM&r4>FZ>@<-{MWphQeX-zT{hVnn@u$H9n&{!kU3JLs##n!SAMOzUK-XU z13c>)=~Mk#>6JN4;xiV=pXsaR6Z*a9V<Y~NL|i7Jw(09{X_hhWB<O8s`gp3F_2}NQ z<h=BA>?Ef2sk}?}b5!nUG~*=sQfA0HG6-`SJ5&?h-HT{-W3s^3(0g{&{*+bPmoemY zfyoTdGM?ZRQ(oTRc*&W%r=(cQigwD;!f(YYTqt7;7D)8^SF-*3T3K`bsC;`pARk{( zF)v@I59m5_8oYJAjyZQd%S<lto1DTjxm3uw#-fArc=0BwUa~@dDfvw9E`3kZ%HEOu zvN>|Se7X1n<m_WZ_ClxJ8Lmyt?p9MN`T%yvL~>guvx?^gR@@lC2<Qg%lSSlBVz?_E zt0mxE44-@^9`6_OUECV!7Ec}di{!V2D(2I~j;3<beWpv&bki>Bb5l3z3sWiSU6Y>l zxapoW#4Jf_VY()#8j|E?OUgeoGIh1AN?jr|Qy0h|Da+-7<aP2a{bx<dDOd^5SH|{R zLJq@B{KjHxwwN(jQ;ADGk3RnqU2Bm8*q_>dUgpafdIc)%3DV7eL~e_{B5k5yNbATR z`t-?L#V6ky>dUH;50NME46C2KL=Nd=ra^Q7{f~`^9s5lwxfn@|#W@)IQ~CsdlUFLx zM`ee_TY6R26^lgCBSl5c%;Ms%=2A&-GpDS#nOD)%91eCeK76ng`qK7Nu6D%b`;a@8 z<XA6@9V?|5yy$f;l#{Ndvd8@c@!qZSc-#fSjW-YYtC<%Qnwde=+tI`>rXsPu`I@+h zolwivWEoFCdh%c24*4wZM{L;7Ww_@pS?+!p9si|F#-{rYd(P<z;D@A{dp*reQ%^6m z-F=s7>mFvNx$ZJQI|rL{j@wPt>cz^V?P<$~toTwD8#S5LDiT<M$Ya(JSNMn+;;WI$ z*ee<4GBKcAuyKcn(&^)_Y=Y#pY$~s6ekx-mE&6jX^>L+y9Nv=MvaV#K#Feg=MWx@% z=&~hpQ~4)SrD8t1^A~9y_(z@y;6u?@9t(6dj|E4XtHDRi_|W6z5I$knh9Bmg_Y#Zg zitUzTYGJco!3TbuJX0Oxd_TEB%kjSs<CE?t20E8`$AkEcqv+S4iPYOkl(M;XJ1dsn zW^QrxWR-)itlratezof4PC3mg#_9ZooOl`<X=?ApCfh>n><?)k-Y#2$XJs659%n^0 zGqsGdLM0u{nBtbEKW)6bFe1^yvr=BPMSd<>Dox7gO2^<F`7rV^cH{!7Pn%Z4rheLc zSaN(9B_qCAKBaGAJGRzq_#b=74?INw!Pn$8bR`b*6Juq&Ia{zwLl@${ZJ13ihklk+ zRtgev(PwfNpDqize=2xdZegs~tJsO_upR#)CvBm#sVVlhGAk0WMN_Mo;>uogG}B`$ z*YKMsvpwdAoFdtib4=oM_Q*#y$rH#T50I{jM>4X_+4RQd$+X(0RtmYkiIvQHY>L&s zupGu0O2OwENW5kqv5RWNg)Qo|HNO1k_-K>q_gV`cAST;^KFdbL66+FY3!pDXl5=vu zbBIZCK4m64W)o9>n~?)ESiSUl`pU<dnc>@s7j`nSidJSsd3{q*nr#l2<d`ePwN0hs zT4q8Kak0Wuxxa9S>?&9xbql_f+1G!O>en~Rw)~%EM*b%<J^uw+mp?($u0JBLUY{W; z1<Pb-!5*1cm@khM`AwhVcIKv%yUfti0cKuVV-sKDz@N>R0U^sIkqf>H88(jov-7gl z?qz)&o#Ds}f8^{Fe$q8G(%yYMcGB&%Zu9JLPWJS7-|ZRTuHotL+T$*BjC1d@s<^9L zKKCBe!Tk}dHg;pxxS!=QZ<c%-x6a<>TVV&{ui7~YPe{MS7Us#M%GN8%Vogr@z|lH& zlw(us5G#~QPDScDyG!bByLZall8^jrmN?R?>wm_weA(7z&kR;ar%%uEfwZ>1L~>n| zk#-|icW7$L$*r>@gRy%z*%w2D?e(E7`(UV&T_@bbUKsw)ZW<XRJBh<S6zxIm-%p<M zqjEe}VwcCl_Ajw#q(Q7Tak|5%ek9)dCG>@95qw_$s8|$xw*0%u=(0uOS)~Ibr6ucQ zpO&mPFPCg^{8bWhyjL2v)|8zv%_=&WgXD+4LEcLH$W!L;Xie)*`yqN3&(OvRtW5ct zjBxFc-`t~3fhTH8yuGZoaW$=0zO81g?<q6I*WQfx9g=aro{UYpXb<yc$Y9@5x!1Sb zO!7TyP4_)+z3UV6p>K+LpIGlqUjsAQH_J5i)vz|lt*}PMEw|F+E}6^l)K+hMS?nDt zQ}9FU5(`-5`9+So=@E6kWjAtdwMRK$r+<&Jb?|)&aqm`S13VyeWfEhU2gP!%#OPFO zQTU2!9NH*_fsM8+Fx<YY;$!>U@{v+h_Je6rmhO0|bf)7>$#QFC$r$4=c~?q{kK1V_ z{bB=3szz3o{1zHh+AjP|Ss=2dypQb-)VFeilU*61^By}?>?sfLaaqwij*M6@#yLGG zb;(4pkhbJL{3yfd>-9Uv%NLG!V}*_$(bJB#(YGA$*qM%{#7ggS2-%$vny<(pd(Y8V z-e<P^9rh6We5|IuI@ZqaX+MT-{k}cbG0v{#Du}Ifc8%p)cQ8IBEwV%AhE~XtKrPu< z{<b}<^s3#gxQ$6H9AOQ=-qvcD|FvAW7Kts*e>wI_!SPtX;%l+pWue%%U@Zwp+geWR zOUFa5DUM=K9qVWM9yj@3lg{zyWk~!;(<;8H5no$5;k(6N?Q3h_<vU_8i>oi+dY`uk zdFI5Pa;4f1$8=T=%W_5|{hjNB4(r|Wj<T<0j9e<3AkLyt?17?xqrFPv>~-ZESg~}B zqaD)s6VH#*H?fkvvC^T~*vu9ZsL{!qR4dO~S!cdkQ}>F!xb9^8yE>hvUhOufdrl8i zqvnIMr+PiPKl4*_u}W9Ri1Zh&<*7^UUy_=~KK5U;Uyb|Fn&~dH<~g3C=cN&2crIJt zMhYDZ!gH(+;rryna6S9;$Vj_=>_u8*0b`33t%se5O(pm1<Wn{_Z+TvkzMeSx{Aw^3 z?r+8+)u*Sm#Bm{(<+>b6cjkoi<ip_evF3pRc4_&i=0e#_tGx6Dt8VE_*2Iz)*1F>E zCZl+POf5Pi=L*ZEbD<^g7d&nUu3tb-<yl>?*LO6ye#G><{;aIM{)j!I;OSUKVS4O% zVIO;8(K+*2vD<l9NwRZLX_EDL*_-yy<+sJ0f%UPQgYD(H&^cBh_c<;`S~~o(Ayzj1 zm-V2lOrqOi<{sT?Jx%^eRax&?9$V<hjWlvJh|I9!qkowkdL<7tQ;yH|x@;g)Q_I`T zs^vc8SZ?{<M`KI8m%`KH&xb}NejBNjQY4?IHE|tFzuCRC%6><FMwz|3YMp3S<_i%k z^HQ{LRdV2~JmF|j`5mXE{p5HwWsP|=ahg3f{=MkS-dT}XUCp8|TSx8J>~)T9k&t_A zsL1nJptIYm*lBexA85BKe<*sfd_%NFz$NE{6Rm&4i4ITfKC7#Q$h$aU);gBTapzyL zd9IzY<F4oEUmfWD-g(UVyyHPfE~5ep?62&Pqno0Y!d;^;1T6b_Sq-ai$yR4+;Urh_ z^*bDQ<-cLKxV9nkLEfqGYkBbz*R{_hnfY%=H(uWx%P*`ZGfHkUPn6HHz6{oJo{e;N z<=Q3Ac~%`qnRB3AcfS#v?rm#tC${^K?-}!T{0QmpKOg(XUo%$VKN0mO_+u#vM{Hlh zSVy7%UH3YFyyr##K4%yItEM3Sz1WQS_ah1Mj>uQOFQa39y-Xk9i_XrzXPr5|D<&2< zM$X5*ZuZ3WajcBH!|_yHy45J|cXP-)(wgLTTSw^+$@2KEVeY3KZ@YGzdCtbsxsKMs z<yOn!c}6X@#k+h{o^b86%Up@}5yw5`Vl9r=w10`*6?;3p+x|a}&N8g3?d#%m?R}a< z92zV@LdEXxZpH5IF6{31+T9&k*sa(tc7P%veLDAE^PT_qgP-p6T!X#Wo@>l8exsiY zgvL%kh2Bvh?6xT&+}f4DH}~g%P2Rk{$wy|U@v`2u8mF7iF^{RUFwk6=ou_#}&Z5A4 z%V%_0&p{>oby()8#w2H~u*-drHKzIErhE-`xDBcjm)l7cj96BVpP)|5U6hI{&sA)s zG)U~=zM_b7z7cBKGx-JUAJ00=Ue8Z+1V3#a&fb|v3bJ_~<e2yK`Q~!?%2W&Tjj8-g z(QIi);SXtHfd?ZCl7;Mo#^Rr%O@h)AAoO!AW-q0d<WCW$wVLbhVcw%8jlmmx2K0qy zfwUD1IDqT@-8|VZU;5-z-QCUmg1eKxBR=-hD^7W(D1Ug>R(k7IiuYcbtVq{|_s|NS z05y0jD?%^@>MCO8s;cL%@nWFk1#e{=EZwmlmfzcov8_%}q)7V}PF6*{tG+@rb{$?U z;ES|1<g;`={Fl6__&p3NQH&ig{stBoi-r>6A?!_PL-AtBRq+hf03QnK&KCzh=Jf;G z!ghlV2KWwS+w{lSDD671D#!88!dZDg*U|l<IXrgUK-ucxCi5YDZ<+(gO%v%(R}Fqz zYS1q6IqCHuc^l6ezJl_I191SmOSkW}Y$!FwE#N~LIn{}yREado!E{F+!hiB%au%$V zUJ4I92p;!5xte=}wAS@U3US?$9ysgClbpp+bPi$*9qom`_Ny$;UY2#X)nwDG9U;k* z%1c|iqQyLr#aU8>%a$NvtMxYCvK7fHhlY1{wxylIH}cOM6q-p_#jSEB@fD9@=@^Mm z>D(E~4v?<!nzduG!bw;nJfs`VdA^Komv7)DNkJ@wtC;GU2p2u;h$&G7S)O2_f@Ba! z(61TNf5Ld_7n@6W+$$2La^#<KJ2_51Cm)r@@j_`Mj^`#~udNq)vo(rJ?4Rm8450bo zgx6U-=WWAYzKvL4zg27+<#KlTHj&NVwWKRvf*hy4F3(rBlTBhx`5LQDlj;*h9?F*U zT5J}dPK_`-k@BtN@e9MfqylT%AU>Y$l<%=svW2~u!-RUggU}Fn3KJkln8+H5Iqa3l z*g?e>zFk>XTA*6$siUqTpCFy+w0esWqTVb#R*q&V;t3?5BR{~$$=^J(T-_Cn`LvsC zV9UYk);f6E5`{-BcTr>A2_LPi*e6>l;g|gx%XZv@LZ=q8U0vXvy9P`0{Kw|g{MJB@ zmc6*zBlFH4a>es<EKnRQj8PsHPbfYq7KmSzo5drlGGYUD5ZkIY;Cgj5Hc}UdZ>mp} zrD=#UD$3X?_pk-ZnXI~U9DGp>fgy^g)Mlq<O+^z+7A}g7ghItvwog1nOqp}+sFcN& zQoJxho+P}b4Dw(>6gP=2#3$kaafCQp%w)^NhNPV>$3tRo^5DGVo5XB+lc<#Ei9e*) zVgs%gtHNC&oV5}<({o{!lSuVEf?m=vo+sx>v$4JB2%K?UV8PD+*mnB>=x7V&309Bi zi6vP&WFgO}B}bTJoh&Z4iR_vEf#mP}>56r|brrgXd-}QS@Luk6?3e4WU~;C2M;xLe z&TbVpT5rH#a}F<S+RSGbb-~{SXK+;hdoJb`=ZAAD@zMVV@{!p}T$r^HR%JF6=KftI zuE|)h$ogX!_x~9NU;g~{I5W(y30Y00p}8;Ma#2S`wEc{7lw4b>QaXiZ`dv8De~Vl) z#E&-!--a2*G%TWcAE9coX5zsxNl=BJhaJI6xoyx+cVOTMj~LL4YyB6pY`@atAm63J zT<=P3me)1xt<`g`S|Kl2^u+GMYT+@wp)G5FMJOdT>oX&NERN(a)t7m?egaPOp8_>Q z6WHStJ=oT$DA2@C;9ukV$Ti9sr8#kDrOz<~<%y;D;*p3a%v_?HFsoQ`Rv5Yi1A}LA zvwwfS-ghG2@%jMM)h=ch<_f2H5xeL1XTgqSxNPak9vHg_-3y<yzWMR^ICq_NCCB3# zlXF<I<S6CvyfgCoeDc5)z89><x1zyvU$|v`!3u14_Q8IPt#r)AP-lvC*jdNZ&vn|< z$$d+1?75EUc}kw2cy>@~&BjZE*k?~~=5&*D#`Tx-fZN$W2QWVe(B8fzKWl4@qHP3> zuwKW%mT7#aB@7Q+2C@iioKV8n23FYPu(9(9c`t%l4XKd(aD#k_w#RK*L-Yu{;DsWB z9arVCMVdgdm+qYqqhHE)dvAatJ|3Lnvk|{|pX2NGOXW+tb@Dn*SL~(AqsII9)P(nh zyvMJ|FXF@AdOomVcbG8MIarYGc9w0Ue4Xv5^vF8LGt^pJ4zfN%k0qQ{u{zmmYkNVm z9%n_i8gR^UjO*Oq{Eu{j9Ag`?8u_G(sg6J$O&3-}o65YjK0>~FISZnl*;6q`9>k1N zV_Yw9m-q4h(rmuSb4<3;9qy$29;|WiC*Ncu<;Uhze(VjTyKKzkI>8#bC&LlSl69cF zR!`{|>8+I6#VB4v$num>?(~e%T$3(%&F2SvTp;_66ZiUS6|DoN3Tgg*VVq$Emi4WO z3-t^64Q(CH)I)KHB9C%DX|!7{B-QSpw27Sd&-h2~&6f%7WFO@`$)rg2_=vMT`>37S zk34w>d`jAWraX%>D=$&S;<!s_FGnh?@<HnTctGoft6p)!L~omL(r1R)$u~)C<=aJ^ z=MzsMsTE-GDvK&@L;AgAWG`i3sfPGbTEga$`ZbkW{6d9vX^z;}vsIDjx}n(PTr19T z>}Ln;^DxSORF-W!q!@c6X@z~c<mEUiA9n;}2WL7rIeSVwTsPgF-Am-Uo<O0S<QB)u zSLm&IFZQK>=@zh({UaxLMOImA$u#mX)`8Drsk}Wqz~7L2u@<FVH&Jr(4!<g&l+}Eg zG>7!RAFQc6Sv=w@61%&Wiv3-c#AMecR?}S>x40Y23*Ez{99JJH+nFI9bR3gw+ZXcp z)*#qvNf54?m13Nkvm2%q*2H8LmK!T7CKr7d0}Ai5h5427TJB=`*1!AG>8v5rt-lSV z@Ql*(=ifsJ;h3m+lwMcW{<lJz_Gg%onmGfba`#AciqhO0Y}Y)&(tW;N_`;@YQbh1> zt%&fm2&MgxV$FasX?{Q_&wzmXyi-7PVPim5g<s$naeiQDVOgNeegqs~!~G9oS-<Xb zIqwGYer-SG$}sjom`b{RH9nWWmG;Sf<)`vwZXnHh20PAzl<kH4+S077Z)K1IuYoaq zHQOGMz=p@1fb=r6A*<YCI2T`pQ{vC?j^z^M6=l9ki(=dHrO_#HIO+g984(NhN~*C$ zu~XPHWCj%a|A6n_jMdQmgvG)U7%i`%d-gs!VQUUw&7XO?F<d@XbV)K6E|jMiZsu(Y zXW~K9uU8cf#x&z|n$fR7S8HpgwJ%{~9OZ>}&MM*w=LPXU=UJMF%flnb9y!r5g6995 z(i_J<xw*3^zv3K(qN^<nbVZ53oZZBc&Sdt*(E*1#R?EJQrE-e>HJ@ewiw1iQSZUh= zsn-3>WmzjkT1pCQ%@bk1IToWVfNQN@c*K5zhr8DEqn@5vf@WOG&j@c>m?B3QBs>-W z%1Mee_YI}RldF2l8_`UES!<_V+*45N$ycop<dgL}S=7^=&8s@r(=jG%Ji=b}88Je2 zOqin3u|(orG$P7ift&!RJubLUyPa{)q5PqvP`cm<=5EJ2=<96B?m0Vx-c=PsTn|}> z^M`PP?n{TA8@S*aDnD^O<S$4YE%3xLgZze><;FsLeuio23GXbQ;ESc9@-I&-X|ZR% zXRc?vhxU&0YVw$tlb;CV=`Pz)uAoej;#I!VWM!<Ukj|QA@*dYk&mdQVoaoXLM`}G+ zxChEh+_F^P^F>xl2Qgo&%8Ky=>=32gdXuiA6G!3-#SQ*IxtQ-((M(Ue^D0$iItSab zf65@ytlXritg58Aqe>8x)EnTg<{F=+9U`sMYCKx4zZ9z3!+)se!CYl&R!6a$4HtU| zUgA|j79I<J;vb=*SVh<&zJOwi;&@t-Cyh{wp4F;}?hs9ZCqvtXzHK&PmA6X~;k#Pd z&~LQzq+gg~l3!Wjqwjcd_*~(s-f{A3eW29AYmld;&e!u&^TAU={aJ3O902XbOras$ zt?<JQigf9qV04#)(XPL|lCvHLIPTMPQUxp6F3MxA6QtLc9BH8C4{vUn0FNvi*&l0~ z(AU0NbUJ<sYhAUO-Q6C2rJeE{DMRWnPnQ44dAuVJV#j%cV4%d+I!Zm|ViLK#Dv@9D zD38Ss@=!ij?l0@HGU<?ko{>!Lt|)$XmQ${9>{JHZhl<mzQ}LjAjC9Fp_xvjSDRn6r zA=k)P@|}5^d}&@Ce3Vxg<MN;3?)(sD%x^Aa=8q8C=HFv=^ER;DoT|d4f6v*4tTyQS z8!yWlZ>5;OZ>3?GH>HQ!r{%eMad6bA5?|YUC@RPWLXh|ut81cpIsF&D(kBR-`gVtO z+Q}F5IY-&e8mRSN$s2ml=J7t)ahLBzCK!4McMVg8afXXRk?$v=g7-I8LED_XqC;>y z2H*rw1>V5<L8@h6EA6+%@;CM?w6{DdwBa+vsp2HDp7y*j!M7>v60`}Mgty~?CF^oa z#A9?ty=9f7Y4aEzDLjo%WU821FgB(xZjDi6qnOjsBKnH3BFZkjEH#a#7W3eR;0xU0 zS6*)G6)QbbZj&~^D;^~+VrfoMTxAaxk6VWc{+3&iW9r7Mnd0Ra#(ep-QHy@22&ieE z!t54*!D<U-VNQSAZx5BfN#CU}d?Qgr3b~ev<b$3@8JJG+o*ke}T^H`l-bwc%P?|(8 zx+v;)cM@~YpSFz&q<qgJcib3C9u*^cLN{C}7s(yC<oU%<xYBr2ns*GgDcF;8y}isS zP{W+c(#^kwn%19!-FAq*aTH>rE0Mo+kCfkg4oPdIcuAD^NMq!&T*G(LzJs&xxK&7j zJYff`B_;?y;(MX4;1OCfx3CA);x&vAe{h4C#_tN<v7FEiMzCFM5V_K``B>Im?#4`> zm#nPkEHk-pQj_}^r1OBj{_o_r@(!u4JWif3Ri#|w4&k56U!3KP5ym<ESs?9WRyf+@ z2Io1_m}M@~eD}&zf$nbwlv(U9tZ-KsFT3UneOyQ2iR%~l_I#HEWj}rn+u?lL1^6ku zqe(T4|5Oj>Mm6%0>d`or{8^oq<ydV+C83d6#6}4{D34Q*M=?p-N={gEo6GZYFxOxm zxXaVn8h%jd!IujLp3Y9mZy`n=jz^>f-bJd&r%U_j-dhH%;Ydtk=lN7ch^$s0lLEB8 zv8(Q{utb+A?$@?wQJVXFsVY=fD+f!z#Xz~IH~|-l7FJ5}M7X1vCg_w~1W*nZt}41h zl;W<OAU2Xu2p{<xVI;(g@1QNsj3<?CSdiLZNYvaAj%jZTQ+3-|x-JvTc-`k?yqfR@ zUWvR7W%=If{<272U$KOCmUvP<Q^-(`g%XNV{DSaJKE`Ob1|~{xoDs)huyC2rz-96* z`Lt)MJkHe}2U1)t-PVDbtnJut>rz(Jwv*-9TQi00C?vaA<5$l=`LJ|eLa91E9pSjr zBeKEnMM8?pA>4NLVk&o<e8rvbR!TSBPh^L*h)$bqNM}C6D$z@PDee+03bn*Q@+xel z#K;!8vrOq+cL1MlPvgZ&D^4>$<Ufo0;+dkR5M~?+RZMkYta&e_m}kRI(<!bjx-YHH z^OF~6_re|-j2%d80IHugdC~Vna?2kvIR9r!rb+84yhumk=bu$#{Y;neCVL)y%$+J{ z7B-h^S&dRF_ddBNtmZ1(aYTFd6T1243f26V3hx54Sz4fi<pd2t?~p*bNoW(#$S~2< zAiSzHGJH875O#xI3NEL(?7vP?<h@_~qxnzB5+}1^D8MIA9ByzeCBIlVXy7ctZaKTN zQtmaB^E*mh%ntZXjK+-`8-L^778?Z+SuXTGXo^d)w`6glV?+<JUgS}sM`Q{HM;??a zMh^5mj$9{Aiqhh$s3z=Q<Xyp5>Wi3Ne5hD8v=Xx!{*o`L4`nEy6Km@wUUlWly=*S2 zl({r_7j=eag(umJ{4>J)+$W+nr<M3QXAYFk-6A`4gXAyyi+EB|d)kMN<5O&7<SfTM zxu?4Zy@zRVhHHiOloC%9{Dmz_J49=|AXax74|zr7Dg7O}g!fkIlm3LH({GZ)y|h?S zmjtm|7ki+7C2*xyOcmD%O7<VA7YpE?s}DA|cj0R-`((3ehP=zvfp0gz!&BC8(86&S zzPo}!MOnSYlzHsJKVdSxZAv`ASK|-9l=$%><ZmvmSO$$$r$JKFHdR|5MrfNsmSz)W z(Ce{D${Iqjcu=@Uee%QjV9fK}m1ny~$W<LrWsU6wm&{|KrRkawVbm(N6)D9v^gQJk zHRH#O&G|yp0E{&cg;nNX@YehlVl6%3zGXSSu~xuD@=)Dz2C|{_J(T75w7s1`&Gk!( zk1?6J7Kj5W<2Z|`U*B;%B`bQe!ElVu<<IgxVTv52*uYCFx8QtbUyN5?<XseDSVlYy zh3pIa49Ce)ok}gIZJ+_AFq&aK%Bub*1xQKhh~dPB?Ml4fqdbUC8MRoS-~^S?NIBUZ z<d1x<+`x}34Lngf5~nM-vt3FMJ<3<Y3Dp3$R(%dfYP#?&%_8}pCQml2cj86WZz!#t zNNnUbc$LMHi=!Qpes8g+cv;Ys>!g53vmg93|HfO;MsAce7z;cVp^3DCy^uE$)5A|S zT6nDKArA7oE1dJ5#1{KT!DhdBeDCMvOZ-OSAKx43<$D|becqzpI~?@-^~Bp7%2KuC zgmIc*!f(}Hp_?*XxGjb;C#y}ImR@obZj!c375FXpIh^Kf0uJ(Dy`cSkO*8RSjhn#V zSe5CFA6Pw;w-7;l3@@7&KGO4Z(K%gS><;B`Jm)b%>dGcbv=5Wk3x8xaE8?~3blJ+6 zkaqT*&A=dW9zGDSV6u3OxGkLZ6i*0E#6RpL<){y_9efkHF3aLP{(^3u4P52mkM#p~ zHU8!w^OEKH+1I7788@UazdzC4XazRPXwSN44i=tg7ZW<<7QlnNdZ5p{1`+>uF~#2- z>_wU%`}VyhocQt%e}8_3Vc*}N;!l5!%uC@3wwvS-Xpb>E;&>YBKu*wjs1mGX)dE|x zAVYcRN}BFh?O(}XlP#rc-pe<<d~lg>3kVG8$bJV^6NZMI7WM~^68r*E*c|U>te!f8 zNt6QDcs{a<_CmJE(t^#fSaE@EE`Q}LAvcgqNcjSjWX)Eosn1Y(r2k?5E@%|o4$WbC z;Y1xMK2vN|;+=S><bEM9Vlc#%Udum3zm!?5$PdQe<-V~K@kHr^xS`Z^To!%;s|FRq zUEf#2AYF=hQ<*1J7IgF!t)#s9CtlC_A8%yc#LY!nyh&bfoST(|3;*237U`|fn0A<# z{C$o;&Nzy`|31OQg5K<fIg|}_e1-a+D(o=-#u~7W!V00Q@J;X%YKjTWC?3PZioSA7 z<uA`<RXJ&?X0xpKTFrZT&*UY2yYg0k{cwQaR`%8>MO@)^PZ6vxp(rl26LjS7pXbbx z8{2kCZ!CKxw0x4A+s0re$A2)#6~K0S9zrH%w(H0i9wgU6jl7eXjBaL^D+vCmpe@fh ztSJuXOO=7Vy1F?J)_mo?HH)yZ<`ceBzeI;>A3Din7p2@x9<3g<3+cfkgd^l)t-{XB zN*3Zd%BndV30-Yl*mv^^^fk4UbBg?=jz!*5ouVXZThR+yYg~z4jJ?@H<6B|B@twHM zXcgNTDe+qL2Q<bWc;7gI`<XN342wffwBO`;uF3dGPQi!dzZj^jPMVTNFzKGMA^KC0 zq~C{1{R93+C-8CFTv<}T<o{y>_f>Xc6KGqogA~-|bZ+a}BvzToq~7vGxJeny>CVx( z(OwRl+r06zH4t6aU0B?n40(<urguMN2~uTti?1iP@ndW*7SU#BJfET>O-a2%uBeTY z+vpa^9lcU`dwoxc_Wq9@@xCl1dmj*+cy|-a=|hASx^KiPeu0BkHf|F)@O`uwxc9%! zFrUHi%jtZ&JPl6CwS+Nzgs_cvI5wg|4i+AIGQ{bgB;|JLl{!t<>z4B#dM|wBlYuP_ z&tXZxSynaZj?g{$r1&m)xHvQT080ouk81+Fv7TWpuJ&1q&%IV)CoR#h)#>0=Oef^= zb2^8Ol;GG&yzk?X?zx4#T+4Yq#~=BbHJWcS7xGkN8$4X}l>5-0vr^Gj?q$rtaV7(c zw>Vfu+Z~~iqpKL}YAZf>-xIv0e!^ktE!#sofrE5j$kJGBDF278<*JmK*~72%6GZH( zj$5f`<|29eCQ~143Q^wX@$Gz_6ow&`Gv49o57TVDVUT4eq#BQaqo5m{$)oIXZZzEc zCqZO(DdBilj<7cSlo0nXk<H8Q34bzM!O@J*P&<7f^!#3(5B~Jpv*<&<+bi{}r|p+C zSx9dH^K#n=SM5E-1hJ%O_7;Unfg@pEa3fw2)Jft2UXsagxGa0uM4R_wxNaySFX2xJ zDz0QLBlfZGrA1*!>C^0fDL?i)^a%W-tea88$w5(-yWF{Q2fK<dwe;hw%nVb^Zd_ow z0Z+(_aMCddx=E9XEj$%aaS28320q%m4PWH905=<Eu(JMws0>^$mJRV2--f?s!KJ1` zwdidaQML<qDBl!cm#>Ed%T2*WF(w>cswRYo-9jPYH9zm&ok!{}@phWt$W#w0gGiY` zsXM&4y#n7t153yZXNq4vnC{zA*6C{pmiMhWJo;4!lm9;B_FM%%C>nv8=FRxgx*fyq z%W=9R9_P7E@D|cB{sfm`bH!!ouieac()}>OuREJTKBKLHc|1IL1m7FHnePd<^I^gL zF)E099}N4*JDCP%)exd>T*3~n3uv({gX6|&tVhvh_PNLj&rH*?sx^*h*~0ls`#Ijj z{)bPrNqh+D$78I8P{n?jb#--So#aKt855x^u|2wIA7FJIWe~MJVXtN+YocB(6j!AQ z@078^Fx6}*ukOne)fc3@s+rORg@Z^n5tQK=%7SgAB^lR4Xg=}Xa%SPBoN&^}OJlqI zuXwlMIJ_@>2d#<@L#Lwmu!jC@eT=b?WZKEkS?0(~>`8Kxt3D2uX3<uu2Bi*%i4&Px zxJGxK2*qZsPJW>R&3l^drs8|=kG!^TH$K<bpAYZ};|BeHUV^-Q0V)%DM!T>+tQaNX zeVLn+YlQb=jpVhUkcMJEcRIi2jK&nYpRIQ2@qxn&*Eq*ug!?)=JomA(oJwkQLt>Dh zhOzP(%AfSa47nEPJe0??X&9sE%POcl3Y)YJR;Y_*wY?_6NZl!1q)Fx(%4l9&+|BjG z3)o7|x?{XN<MJa&CckfrOg$TNFG!aMFctR|PV=2~H+50wq$K|!G?n`+Y;vx0HP%$` zf!dmbkf5ytpLNCIg}x1x^j%5sL=+nv$b_%Ke!{X)D=5N_<KR#q%nOdh?}59qkN;>m z>)Vz!_ukJsd&ROX+FGzpJr%2wALG7|%6n6H`+d1O_wuabf1GphqT>Q(leV&d_C2i7 z{s?M2PGEn>KVHmnkEhsU@Phq2ez$KXAATfDa!zDx-R;;MX*2aaydei}3MFO|sKMts zWjAgU+oUS#?DMdSCxb6^Z{ZW%$$YE3D_(L}A}^?dRq_m={Yer`ay7zWXB-cA)Z{m9 zmGPD(3VxYJ!9rt2C|~3aX9@<w#r$9JI6s_CEU>|Z!bMO}bPns#ZmOK=u3W$9m)te4 zfX8N17XHT~h)=Bu174lN&(Er2`{ypMd^-#SzYl|QIqlgY$7J?ZaTsd(w#6@j6}cr) z%i9}>8n15#&os^0P1Sa`PZP(|eJVnFNK-r!>5o&&{lQk1{n(@`8`!N1pJ9CLBHUPf zH~;82gO5?(<ol&4oMS(Rwau*|iaaN~jg?r6*}%rz9>ZzpS<uO^;1=^@%ak-%Y96x? z{a?1!XDl=OPJju9F8DcMD7OS#<!Rvy_~DZ0v3ThP&@px??2D@jBjWVXB8C`p5!8-U zED}10B!Uo_1Q~v_A&0UFOTAuWZ_Q>LBGCKfy2Y8%fbTPj-}qw!>z3L;nD#bac=fh6 zdzktZuY8}+JN;Gie)%W(A#*-D?XRJc>muwU&V2{hEB?-9l8<;|<k7Sjnka1NZOBvc z)aQ-RE%1sE7FLPPFEJiZMRerHBfa_Ch$~!CsxIC8jxcSAkxlWd#};U-Q@*}Fj+7?x zjt+l**D{8mG!4N#<6LNDs>}p)XExpZ6Ly%DU^0i}5X%Do+;WLC+gr+@MzY)P^|UE| zLN}6~SXL}a8s%wxtvE#c)d6g<VhKB>@MCJ_7|@XSc8mHq-qq;o3?k0Asv#)ECZvl~ zPSk!CCl?LFOaD4!-HbITrYoUQ+A^q?{uwI&(K9i#DQo<%CwrXh0bRZkALg&;%M0$v zjS6+VZczv}G?jww*6Z+rTq5)3D=?9KPm|T1z~WU0F8P*)Gj!%&3k-taL5O36$x9u) z2)74`SU+$V-|zpJpZA-IK0X2PTDPBAa$Q(MMKW7NiO@&VSA5{Q%>Q%j<3`&A%1?HL z(YA~5$$lKRI(xxb_kEloh5nC+!ri<N<;=-vhR-OspG@4SNaD@!B_7mFjAPqyBI%2j zRIMOevkt!NR>5trHuM}sLNQ%wSf_r1LllL)2OG_|^7Fi;)Sq@P)c-*q(ar9)#8tjU z8SJyLQK}0aY5R9TK14Zaf!GEkh-Y?yQVpxAOCSVRDGs4ty$|<lD+1-3VTDg0R@F~r z^$gx5zE#B4{(1b6zmqTUPorOt_<a9JtnROeT?T|xeuG#UUms@FCqgwH<yq7V@VeNO z(k7|Igndfd<#;yDQHrgkEO&2f9KN$8@k5qn{HEnRZ)R<TYMT%3HeNwfdl^>IA+qky zEij6hBkSF7F+@6rHtKb_fxU>`{eYOaN8l=D(K{(>U>C(<o-3~5A)*)lA^$A#uvs^v zGrp8Nv#*{%v<I9836#^!wJ*l`w)%LDG~ocs%Ji@g1ny`LH(X{qtIpw7>UlUv{`Gig zS=d9_fKEnVsG45^PUS3xdO2w@AvYEF<W~j-?ZvAb^LX>ZP+a(LBx=(aVvkRg@X1SR zHF_-J+?08+^TmFs@VPb|$vQ^+wn6BnJ&Y-VgW-EvKXyK>mT*33olx92TCi!9?2>9P zZqgp&3;oXU-(icfd~_7tDE||WRW|dol^XMsWhd}arCQ^ufDp>&bcF##BDhO=zJ1n8 zFxm19-dP*6Z}vLuoAVU-O3!d8l*Oisde~o`iTg?4(D<}t!~GtxVTMm^slO8*1-8Yx zA<yN<;eF+)1aLkb?c$ruoW*wK)bO=z8{n}cVM}B&coaSvcLqM=Cf}X>s$N93*IjI{ zn?n1CuaKws49iI6xNjrYS>9-<o}LA5KNn+--e*C}cPpWDY8l|)9^%A|j@UCVmCrUU z=i6-?_(sQje%w(R%aCv9lcOK>aK9!m`gbTPZiKelGH}k97@$FAKnhKQ2gPc$NhNBr z*CpyeYVl-#JUm(M6mnO-=zofP^q*-*a+N4WaV(B}9ye{j$yYuD5>5SK6#0P4n+L*6 z^Cz1B4A|Selz%ks;uB3>G1=4*x?BFhEPE82?~Z2kc^Q_+y09LK8LYgrEt^8Qm{i&; z)nR3c^KgYnvOPRic)-mH0~V=h7p&Qdd)3!*7UjFk6YId^jEBAEo-jNA7L3Rq&szR1 zA(YA(Bm`u%6;@<a5>Ed`)-!7+`<}fD!gKoLzTCF_e*PJGP|+2+7Wv9b+p5w2|0V`d z9-=JQ!!*)1WyL^9(+r0&$|<xr<Y0c_Mm$d6q=8{&FfD8#riEU{Ex|^79AJQpe#N1p zw-0%FvT%v=C9WpETvK@=<T+&sw{a+8UI1$2C+u8Q4r>}`@h~%&n^^<+O#5}d%h?_4 zyW0|j@hW+w2J-Ws7yODuSwJ4nHc(5%B5{$Bt|}!&>&mk{eOs{jn9+x3?dHU*eC$g+ z8lO8D=sgGXbUkpjW*mByd$BrY3kMUI=^^nuk9vkcGxuP4P493tWk_?0Yvk~BB8K5~ z+6*j!7O;T$0rOys(3f(MK9H!oO$^TM*wAYO{_)<0Gbjsm*M9??4Xnai2Pd)(A(3oF zXd9?X{?_SXrFrqNi?S`G68{?12v7Leg-t#y;g6Ph-HOhX|NqCoxy#@cy9%0GDzY|4 zf8lXKL*ZxMMYcQl8D!<W!^1gw{6kIx-<#W=m(KUYl7->W*m#9@m@`3TdxBpaQ*o#J z9(u{OU^ccSj`%|ql(Fco)?ypYF3i?!g(sSMY^C}=xj?%xz0ii9m~q(LQ<^+tow1kg zJgz2I^IdaI_-C#N$(Azk)mk4~*%K(EF$Rv&zVZ$+-8*>pQOCsy@|!<Lllv&_boF7o zor769=RNrAu%nN2J!LbmV!Tw1dZP}4$e+OjI?K=7$3c1l^_={!j}1QV;mOa>^9GMD zVW)@XSc7MEgu@>P34U37*%C)}xUAaA5Bl|#tpVB6Im043&&$joDel8R-bKijONvv( zETMz<4|X<mA#{%Jg#{J1aYvOvZmGCQE{gS*<>K$99{%O!V`_nqpvI~ho-WYRJ%KzQ z3So=;H4FBb;gdTDhqz<tdAi5br49TGUr1iCWL{iV59fR3p~YtnR5Rp5zd&EsH5B1; zu?sN2WF<(Be1hrGDcC;N4=gb~V0`o#Xb{;GYLzGr|ApViPhk~tOxPjbCA2?Rhs@?V zf!}$A?;=c6EQV3e!)!$UY#}8*LzwVcEjIq}PuP>%NtpVz9*an?0J?uiaDCAP<d#^} z+D`F@)+pY^`dlt;&6OA1Zu1)SY%b%g*g8cYA;4>r(7^DSl?}QFw}Mwv?sfw&8&-}7 zht1<@ArtXS@KQ((iegm)0@!#T@{wp-QrAo=>X)MIq`fuFHBEvxh120xUIJ9gZ4IuR zo$w;J3VV`wn*Ge*$=(&7qHJssW?GNPsg4j?>)t3=^{n6*Jmc}UCxY0PX8>Jx@N(<f z5{bO}^rfq>)UzGhKJd@G9^UY4z}xxR<azo;-dWWh4^u|8k$ogADO>|T{|$tPnS~gh zxfai6jlq{WL$GB*cZ@Jj!8fMASjL<PQ%z4{xbZ41Dw+kB!alI2s15Wt8{oP9E@d5e z;VMcjB`N9FsH;lfePWIHNx05X6I%Iig=_u~V3z+`NH-)>=D0Ro^Yej~zFtt7SPUz* zL@iY$5>=xM<t8`ddmHs!n220om;et7_Cd$OVD_VED$|;0v8mQ7Y`6U(R3rT~+;tX5 zy8I}Ad5o`c9p;1GncP>ZL|rlo)Lm4Ac-CL}3Eg&n(C0IsZCHYafKpH=U>v+M>;Uvh zhkjnw*?x5^HeA7pTeX$i>8la#<qb9@T};F35bLTgb{69BtYGHJ!gt<VV5k<_V#EJs zibx}_r}zLnDTC5QodSJm-f8Fc3_p-Y72q=w=lX_XZ^L~)E#NL+8B`rthWx@gVFSP& zejUme3t&6K#<7jTYuGmb7Oc?wAiU9};vF#_yHbPOdrt-84X;MM<0uB%R#T>JJ}OLG zv1-v(Oe}bU$Mf!@HupT1&v}T|bEt<SrwiPn*`i|pV%EJdQV2IS5~f)<kYhQ4crf)T z+xVWxh&EnURSgAA7aXeTi%IHHI7&4e_b8SUBk=%jZ-}8x8OK(hA*`w^m+hj0m<0Pl zR@J6uC#>_x8%RtEdm_3V@3_r5oDX!b<$0cg#DQE5)1^e#Pddu}NiOQ@dxX>F1$>5l zL2kj5<Wr<IHzzLmJE0xBEXI(B(MNcOw5xYEf*l2CvD&Xqxck+1?0k1VK1pthEiZAd zyHQ9|Rw?|PHVhxwPh%flDe$K(Xp``P?0vvHwn6=zZFNVor$)pN1uyv&%1-2n59E{( z1HV`9HV>(D8ml!v3Hc2sv1e7kFjeWFObA%XLX}2hkhg;*%JJW$Jo#lO_2{^VL3vLf z=<JDxjc)2irSDloPYUnOSM!y^Gyb2tH?G#_;0xdOq!X=%wT5Jv5O4;r2K9y;Ay)F* ze8k!j5zsz*A54$Qhuh@Ec~m+IE=5(x1(7rP(8xL5P`UvoMt6pCrJJ(_CEu}=L2p?q z?QiDV>p`o`>Nw`}2EOL?5`ON*YkuI3lN-N$;2$!U@IeK`c!>2ZKVffAUO4KEG%W;U z;V-yX5W&<%b=gl#7(>q|xT{zVt@Vw;<)4eELKk4);>ECe$wFRG%7AH+WAI+oYfOxc zgq0<mL9y`S&@~_h=ji6(1U8D;^GmR-Wgm_&JcGmX9?-Ky{VO@tw(+kHy8h|WKc@xW z&ndu^ytnX#c51IoRRx;8g-P~#?3`mEu}ZF@Y+H!cZD&wt|AotlaZ*BlimBo`)Oel1 zvwj!xUBDZR3-pFK!!S6cy8%@N;eVbk_SjN|>53F=TK;vauN?tD^W#BLSQ{P}CXuew zjtwZ>%JhZPS-(P&RVx|@^Nl}ojQJX#x2ED*;tka$9z~ApIaZX;p@VNGmed?fQEkNn zFB|sp8v}6xCt*+EM(_>l1eF5IL#81D^u&`%)~~^Py2`{FjKr~u(c~2{Vpq>H$`_`? zWBPty&1Y~qw**4o7T&(#F!vaXV=>!K-0FOYH{C06sfQ6aV;Z0CuFb!?Hu8z?{>0X+ z3eDjvW%~2sz1j&zT?Po=d*PuseS^IBV}ZUi*3`Erugpwb;dP5xw1|(Wm+2zim0Bx3 ze7vxc*B~mzD`_DXmlnZqsXc9n53z7Ig~cj9!8=tMn5DUg`?R|$ySM-sdL`gfuTcC? zU&Jf<*!d&h3V7OY9o993L6PAG9Q3cvLg<-K4minf2To<XgTBM9AnLjZoQGTd2jM)Q zlaz-Hf+gZ?sL!v!c-Lh(Vw(tCNJIHYXZl=o8#rqsKcw+1q!)ezpMoPWH?Izy%sq#n zb8BP8d>8*!Sjb14O?-#V#&aA7JmwmT65X}#P`=h6wWkh`VW8j}hz@##I!+!#eepER zP$YsvNm)k4Vd}prMp>CRL~Q@gAM=v9L!OBr=>D;T_(f}_RBR+2z--S1d`UUG2c9;# z-&2|X-$uSyI?HSFLqye5Vh%ftg<@T}saycZRZC#Bsu#p4BSA|{!miZkF-PtW``pWj z$41mxa}u=AI}2a`oP>}s$6)r0|6t_Zsj%ZpFZg<~Jv2#9fLV7YK;Emha4LNboHCDx z&(IlKXxqa@T}ud81yirW9c)EAiX)DG)L*q21Jy5385#+v%guqdb#Fmj^AC{P@;g*- z@(*fP7g?Xu<w<Yt&VGvh7<WdpGL{oC%B+Pc)+MNOv_*w`F!68?V{_u})}|JxS}YO0 zL~kssJkLe-67Hkj$B%dk)bF(b-}sqvd|+Gfgf54ZB`!jhs2tcDTY;4>*Nc6PufUA) zd*ML*FRU2f7K6)`!UJV`;)U4z_$-RJ_Qi%nWkWOK_}sxIwlerL^DVFS<vH*2#=|GR zXo9a_OvgcQ6EW^f7aWpa7sqBz#Kk!(XqbBws^!G6`0Q|I%e)HRvzx)2JPA8ka*6Th z!2z0Lbe>d(x+NlDc8mx6#k;Xv#p3XxVrAG`K?6O@9Y-Er2@^^_;&SjN9_{;<eAn~o zOW%(A#Ij+!r4=(4&SZ&sGg*V2+U#8RLs*{G8cJso4>pVV#Q%r`n#1u}o(=cXth%{~ zI7g;vsBW$chb_%WYpw&Oh`CjtI9`pF$@tl88TRy_hND7=oe;Jk6GI>4iNIW(<r58) z$m@_M+o83+Ih$^5#FmjZxH7jb49R_h33<!0NB$zz6s*Kq1(R_?L47=*ufsceZazA% zBx>^q;^=}cIIie0PBU+%%=CJCE)U^p_>8@kC83=z0U~|J!Ds)CAO@v@UvM)vJa{g9 zA2gV`0&Ji$w1nB-8*zg+0;?!X6HRv`?siv%%C=*$&v+Ih3*zB!?qE#GdC6Di-sH*o z(UiM=jL%JNXh*yhTH6*ud3%3IwpW7*j%d=Eni8{fGU+_)V7#~<+G@tZOnr5*`Z{s9 ze+vE$ID*Fm_Twi1bJPv+1l#%j#-lz)+@t@4mvp=FqoyJzsowD6ii5lbInr;FyD5V9 z@8gJ9TaHblTx1sIhr?JirHYwUPw7ls0vk2d?xF1j%e`7sEq55S_PL37eVgMDLjk|$ z|B+t^u<~hvwXtN-ZhRR;oXX&CFf@21)C+0?Mt_cJzORX+@)R$rK2Rso54z70Gmv!Q zcw#B8GK%n`uoa#E2jOyo5lYiHE<3Lni_iTEEB+<I(d-b|ko^^d{@uZKIVW&d{v2Fs ztcG{2S$u-?E<fn`Mz@8k#3O!2jN}=_BBfldIEZB_hO>dHD3(Pt8fX{OoHh}db`F%# zEQcwoL^vgqw}x`(Me-gzNGX?m>dV+bvo!ZChD7-xvECojT)2X|k7FSblJPIO7B2BZ zUPJ!KYe>i|NTV>1_))p?Hu_nZiCxcOJAXx;0&8KAG>ZD{2Eq)Q!`3+>VS(c*CfP^g z2ulDa<>&L>e^hubwIh0`oWM?33eo>eAVi(41r?L}L7O`x;M0dXP%kf?lHE(u=F<(& z1<k<j0Uxl7t}@Y?`$9`sWBBB-5=ZSIp4N@U3nd1lUzL^ky3r@pw>H3%Hes-<nGeL& zqOPwpy&yU4A++}nV++I>)=Vyd8tz@N%h{f?X2d0=UIzntFO#Gu^yeQ+8NitkrJMm* zHQivi&KthzPUBmz_Gt9>!H<4!-Xt&(n}@c;J;hhx`H0JyRQfs2iT;FjO6TLF$S^n( z*#o*pZGzrW$KXKZ3OEqa1eTPr;r*bCcvZU^4|+CZNWll}kyZnSr5=XruPu=A@;Ai1 z83>xxJ^0{T2Cw~lA|IRCl|Rm2&fn*ld3N4-++FYxM-*k^J#!Xzai)@U<S9N;rePNG zEFJ}Rf=k7R!;aD|;A$B+rpKSapbGQR8NVHQ+)Er4sfXiXZNX@m2<3Fkps}!zm|sco zoP5YnjKpZkyNb)Q>SN0c58qEh?cwxE_%Ypr12e`#&+Nl+G<Q3k${$1Ar`nKQR2)vz zuBn=-0bDTmhQap5#E?A+dUE4T)?9@>#L=h|&<WZF`2z+Lk2gRIM}2F-TRJD&D%%nF zI~<;R-r_LFf9Rm|WD@1<|0`HX-&rG6E>N@A1$SwO(HQimCzxp7NPpiWSi}4SUz-e2 z)?5ktSn9xR(#{S!8^Rr_4RurxfF$Jz&}qBEIMQ@0c~h69Pa>B0t&E3!1MszPP3-Ku z0bf&(QlwWS>Y*G9^@X|Ar8Nr{+J^&}tAeZW7fvo%g<A>+V3VRLc*k@G!^t1=$@UBV z9hqoxQ17*qxYo|Uc-ZA3<`7LzQYDDRNZ3lO)p*4=;`0v2pW3$gQ(u$LhT53m-vws| z&cJU$`!O{5IhGERv1&kVSmZYehIk)`p}MD_*PMqXs%fxS*$}D{^RywIr}wC9VvOn) zW~w%0jCwkDQ?JIg>gTv!O`I)t8|bTQ38$1nP)7L{&nq_Jdc_QEpj?QbRYy^&r4DXl zE@gXDcZHt?HyZNrrNJKxX(s&S^BJajm1T|9m06yUOT7Bobmt*Xsq-%GwH-&<aul8B zi<oJ;iR+A)uvO7%oK<*&w4KxFC`iUih2#+^dWE%2*RhgiGfuP4#!0rdc+mb7pA(z! zhqF0!p*zI|;<6Bt8zL2xVI6tX@91|xy6-NSZCDIv3?rb8UoQyu?hg|*<Dr*0iIT%z zi49p2zBvD2rsE?1a_%IK>r$M^CsR6l40VhzBGSfn;u!`*71vTYV*Nq8P6b<8fbcv2 z8DPP5$S9(2Fk+u1S{&HM>c&_rbtG86VhrWnW?8P&-;HtxmhZU3NNmO2aPa>f0&i0D z@aL23Sm*YBEV{Z6Yu>nsS&trL&Zn1nJpT=KSA4{s#EdNpe~u-KU&LoYJ8_uTHoVR5 z;R52}Hk4~X9mODc<2MC{MofV{6~{oY+I?X~{kHJ1Zf$s8tpr>vn~x7lp2SjtBXOjz zDLxnaVr}Z6Smmh#4O}Ooh0_6{ZY49ye<%~Q4f2WM9if|t&3ugfz26RA#W0UQ@jJqA z`5{*ursGZW{uPp5*En!AR1O*m$wBqN8RWuOK~J$?&`Zn+@}a!ec&Je9HkgY4fb+%g zgB-R9w1G`wfG!S<v|T=LYz}+>4uE>!2g3D_O<+u_4_y0{ia);Z$ESbhqkrynoM=qM z8n$`3h<+Bw-7l$U!ij5$6RV=mnRw54JSSz6uQ3S5Dh9wx-4T!tZy_`6EnJUS2{mJU zK_9mrgJN5wI;tfODz*Xl1$Zz}KZw|To8cv21RY(~Nhf@cQ%qy=d;zrz<;Gxgc3ZS( z&Bj65d-1`)D;S^m8e<Ey@Bpz+o|#6#9n(Gl(@~I$7Q)z~8qn1E19QyVG1{>J`$@Yn zpIF%j>S#&RHG<>%VX#TR7+QO6h2q+k#04A-H&|uj$;f!pbst6hI-F!q#1loU@J8W7 z{6_q>^5(8!vCaiw=R)xH42N{7CZrKNaf{~@@$jzTY3D(#>fDY7*Lw23t|p$sIqE4Y z!j-DBuu$6(=6ZDpjlLF)^%7wSv4#?~`w%pV7^a$xe~EE*n4TLG<>j|~sBOU60!mWn z?guk5+e}H=(zpc&824feI`bBpEqL4F4^?cDV6?};Cuc><(>8(0au1^N_ald9W7tnU z=ABjFai01<cGWz>vf7_mS!c%yUJS^TM|yL4u>19ek^alzrT-=<=05?Z_?3qY?@ati zp3X4MN%T`aAojc&Rm5EGuc!)3m382isuJv1$AGMkhvJ$_a7$eiPOECeRAogtqKJl; z#BQsq=mDD*bK!z=2eeo3gDaZF#G`Kn3A#eOs-th5ZW~V5ZNf6T!}vt|n7DoU*pT|6 zf{FV(ht9VEV#RQ3K)WRsgWbe%`(jVRW7g?33-!RM=E>NBe4^uM2eIFr0bht`prkoj zVX4V-%}QoAKZ3?I6J}dl!ngnRR}uT@x?>6Yx?534M=a6k>)?A~HmX$5Z~}3QI_tGi z#wQ2S=Q65&=VQ3f5V|8L;(g6c;wwZD<8~U1AihP6oCxnc9jJG=5ghOgqVLld=;^r( zzV1`d+&K;o*nMHF?Gd)LuEczE7tAx2!Q-Y79Bv9Dk5_3tP#A}^={bH;&=j8)jl#~B zt;iiusN39&_`7{!1nh&8?(3i}Is(pLbD;gJp3v!bTj+eTCmcwc4STQdfXB~Pg5`HJ zI6%IwWxnTdRS7y{qc-E!5~L*<QgE912DdoxV|Oc^^Uke!T0Dwz^v+i=Q-qUile@I3 z05@9L@M~jYh1Dp)!Es7rAI8)B(4Tr~H^D^b8F1V7kcK`Gh7w1xCvivY(n`usPoO@U zv82z>BA)CP`p%ppPQWEBslAL=?HydJ|AI(7>>K`J&?k`C`$2^`AowkI38qf#pci;L z=qtvBc(7G?b(mUm2271Q4R@ojf>-o5m|kiyEDw%{GxW3g>@L7T`DUd06s+@Egiaqg z4oRg3->;eYAngx+%=$_i-vb<GK7cET{WaZs8eh?TT+>3#XfyRJSZc#s;#ePYE69^; zC1#5Sw;8A-CR`6MB7<OkY!LJ;ql4r)j+dhWYLy~JX-EQ$_8SFTv_rrsbOe#Q0=^JC zwv-9r2WcJS{!wet-xyey5eY5-I<X-0Ia;!hVOH*b98h=>C({|z#z=jeh2>yCK^aKT zBgSE#6TR}Y>FjXhGFt`eb{+t0>04J`KbZ8@I?$Z-o>u`T^flz;Fufbg5jTH6wG%0c zkA2#Hn>=`nu(P!v@y+_-Tl;+c>rBSt^xuZM>p^w*G|Dk70E@Fb+@{{%4|GQ`(=*<{ z`2y!shxbA`gOX1cq<;c9sv*87bwe1vOAt3Z8bW<bK^q?fczbiaLhQ!kx-`sFf2O-( z8ub`cPZzP0Pf-`fL}C%0D;fZX{FQJwXBn9O^@9qzG0>pEihqr%7-)S--i!~Zqj_g7 z^_rD&Qs2FU`f;2oXmp*yENLtCWGux(<s3|+Z`Dqp`8d%q9|Hnb<CcKaI3OSk(Z4Ee z^B)C)bndJ)w1WqJ#3A>6h4s9*P`~d2e4yTrRjK<(Cq}_zHkP~|$BF;{7<!8LAVzTj zo+&0lfubIaRuDg5yh<I5OL43?3QvgxF+njE^Od_Wn9jXobmn}do{W{=^`V|`AK30U z9@-kFLk9!-w*9(5Ch^<L=!p}h@!%)oN&hC6c~4@}FLh_)aN28suvdqxwgHf7odIc< z@le^^3d$P8VR9jzQ1tK7FyDa>^4wS@KM$W4q+pD36P`DZ#0cA1nqT)~Kk8Es_QaEB zH3m4}4!zk0xGdfVwdxYxOHa|PokSVbvv5nd7e*1!V-TIEPZimur60#@xDmtnA?jv% z_5U4Cy{N+?)zcXE5;y6+6b-AWi=w>r60doVV;W^I=D6nKWyc)Mx2?p5*2B1wW||O7 z9#*G4SsLxfGOf*Eki8f6c=m+~?iS=BD+YCmN1A8)h+ngxqxbiR82;)OZoGE`-(I_c zlddJ>=zGU;?%SPMDQgG$3{Io3?<d?59td|z_JPD=o5A2ujl8rgK88t9f*MkOlHOXA z=2v&A1Xx?SF+8nb1Ku~O49yx>fUmXV;AVUb{4Ewod(~3JDW*;#2ZN0!>Q6R0@Vu!A z$62z`Y)!+m#Mf*r{lpr?>Yqm42bbvmXiQxYLlh<87j**8*AQ3Uo4OhN-{9`xi+DEt z95yL=9h*ix!7~xBaZJQB^oqEOKTB=KaS@}?9@zp9madK;OV_~Wk?pZju}L`7uoK%T zZs7>>%2dxz#nkUK$E4oH*6*)leCmC4effYL)0{Xivp8hr#KZ3VIM5Wv!-m3U;6v}n zFXJRQWt~7-g<f!*(vnwHfwVh$iH4A6xU@uHycyLCL*i!Rs<O!#Sk{jHV(Y=osF4s+ zVgfjVdO>%eGQ{pA_9&!af-42*nlmx1AP5%yYYqh&qd}cMAKX9Z!j_+-;LOi<(Eb-` zN$DkFa)v*2$fnMtybSzNcmsQy4`Z(F1om+~LVwZ+D^Z8VK4<{9#DU<eo&|c{B3PrJ z0&zawh-X*}4(X%e1^EG-N;)%H7wWbj0UsPwiR(FrzNsCF4Oj^-8Yv}a@`I6-2is+J zVUg`C<~dH{AJW9L+{7jHj776&ImXIYs9);`PJnb&i>Y`(^#af6QgDFJ2b@E_i<tqD zpblz9--X@~>fagEz7=6B@!M{z?RcDKqc@})43)lMHtEOZY)5gGX)U%aT!9<%w%}FL zGAid>#_-%rSSSB5`V_51op}t-v-U@)Z6uzwufo#Aek^n-;XhYX;vW*f1O9_|%A?@t zb&T$myWx%hT8Iyv4S4}0;kAEHNHo-kc)vi<k{2T0CmUyYXX6Uu(0X(__)5KfXX$77 znAp&fB6S&1_gi~n?=5A-4JRJo7-1l6CVo_=kO-T_<}iSI&)tfTc$B;WC#VzcwVJxZ zHLZ!O*$eLLx<XfdQ}Tz@hk3sBAjz*5tT)8b{l<e!{qA9HpS9SR^zIs(`S?n)iaJ8q z;|NN(G>}%~4fi(kCSSzkbcbI?J8H8n7<{d9;392rJI$fN1w|M}+DE0_EbN-=!jkmO zIh|hyS{Idv1Lk57Vwb6#{1@GaUJ_gM6LnTQNQWy9Nvi6wlV&#$vBxuLF1(;VLY}XK z#38?e<<!4$7BT)BDSJ}i$|~w?`H%YO6CuUjnX=54prx%C?6ZV{&QcC)(`<Fp(ho*i zhrlgcKk7(t3<I1c;E97{Q{oK!+MePU%RNjorC<;00NGKPO?n-ocaaw~%JYJzf3<M# zyC3X-7Xe!zN5jk8A<*ik8pQh^T=?3ElYalh%Cy7yLp_{6A<<x^-Ar()RxmWQF6{G- zg%;Eg+ET~BN}64d(2v+7_8Qu2>_<h@4OpesMm*MHKMrho6Q5W4f!`u6INyLc?Eg4A z>+q(}_xqnz(<b%Q-Dqi{#ic-Tw+$P^b@*_G4;V6r+ZZrpzy}yE!`-bw3$)bT+f-6d z+nnG1{r%Bv7rVH&G|BsUZaL?5B=4w1@-C{hwH#lR!==TaIkQA~E8^uISN)BTC9iF= zq`P!BSio2Km&4`9PS}zal6`YtvM)A>&a|88jHb%2bb{+IwDVoVfS`T+KIAqpge1_e zX$coMF~v)Ne<b;K!V90?xZ&LoKX`UWTbFjIwF$>DsgcvAukqJ*$CLDFnDK23EWaGU zKc9Ev^_OKBANL(PCxzfux&@wROWt{2x$KxkhgBr`Kcb(QrgKKB)MdkEx<A)Uv<-I6 zvCXqDG{NKWDttEPww;e79VTK!`$*hx>4Py%h288U*?`VL@*V7gC(2P+ZS<4;PEv=6 z&%H;P6Y2{xI5<=Ki==&g`E4)Pd^^F%-_CME{1HYbtzll;2x_v!`8YRFdaj<FRJ5Kg zO5Y17#vG0EyJT`O_DkOHkE#eP7QKv%gB8x%yQ70`J6Kx{5k}q!$z$v$>^&z85>C(r z{aLd1H<s1>&X}sp^s0#C_;RW7%ZfO$ERFq2W4NT`A@wD<xVY>kGs_FPr@|ef)xCu& zJWgDBqhMyz5zj1K(I|N!!yVia@6-aDTsz=jx3*BY`C*ic5mq>*ag^pE!|eXY)9S1I z&OCv(Mhdt|c6dWgQydhIQIxhV<`f2@d%hzM=9;2eP93|-`)-$=Bl_`=)a2f0W8QU6 zE4(lBr+B_8H^E(*F_($XW~^eE%vyTF+o}!r+BcQg;D!yZCK&9N%ag888R&A5j~r)n zoP955Tesjgbq7vYjp9VhUl_04!?ohe`Xsa7C#D9@7M;Udgh}rmf+XRV`sk}^U-yOm zr2ekg3zw)-dJ)O)8!B0rLo5s|QcE3RGX&1|KjDtUJp7{>hg3~V$zYJYCXEu)G)Cwp z_2oLdEN-{SmYPaOSIKsmEDY)w!h_$=E?C|$15@k%!i(w$u&nxm)QV^v(p`YL=(~EC zevet&_E=ve8RiB4$jWm=cCH#z@=S55z(%-mP4Kb2r)0&9k!;bqXd=$yYSZ<Yr(BDB z78B*CHI_*2dBH42c>T}B+jw8Ha31ruQ4~cB!%aey86-Jj3xxHbDfQbv$x#1OxIXTZ zr8QeTe`R%vw5g3_L3JFLNu7DKI)?pfK1fz+G`*!R__eN($0U#7k>n@MmRz^i4U$78 z86)2dJ0M&#bv<R)q!AW<ZfO)v^Pez2=@k<`2-p8fIumYYaopt$zPpq`i`zw9`?i+J z=|=KgNhX9!c%rTqwD8X7W%mTxmAsLRv!}dm^oT8u?n}P=Lk@8H%D+O(nb^e)(E}yZ zWJCaFjMSjZKpmfVh~=e#kBqVVN*|$iqC`9%Svr1~nZxLuR0b8q@n7wI{#|uaxV|TZ zUw%#UbfYChvV?6Ub8C>Wln&^<kgRWwsq7})=N_149f^mI5xDHx9y<ct!!NWW{%GDA zbHjRKU-$@2YcUnJ;XmP9=w$2+{vJ&NA~D}RTo}dP_+65D)|G3yF*}0;5+sK$M#t-) zYB(pRg2A!*)Fvczerf`L%*diHQ!-eyg~6X=3zd}TPxI<IyVx8TD;)8mK2WlI18_og zDMviDeBJaNKeWC;`%Zfp6S<kaBKPo6$Fuxj%NML`lF52E$##&uq}}F4l97|a5c$lE zb&?}0eAK7;=Q%j*BKxF1kuxWS`3ZV<OR&bT369v7XorJI8k|aQf(5CaV4Kkk$nK7p zdF`Rs`eI)-@FVj?w_nI@)@D#Uwt~iW4CcAc!y%^yXl6eZZdQFT-P~7lm5gy;xbK0Y z<=j$T!4%O5j1|^?AL;Fis={!jx-<G$_mcdhp|GtShdkX+s4tralnRTyBnZ<>B?q%y zvZkw&IiWtE&5ZSQk^F$SQa|i+?t|_geX-K3E3SKnz|mcW8s`%3*L>w>+o!Zp-;rV5 zJ(<1UmwV$LON39?R)2$!s_#gB`--Kdv7A+$#)yI}?#)f&#O&9+mid4Q886wGk;>pK zU`|dTqVv0BsdfnZRD35{g}so5VE9TF!VnwD6O+C=()AVfZjU*^{Q>v6z2pxr@$Btb zAgu2qez8sDIGfLWV3j8IO)2YD<?JIFulb@U>M4G#gHosMGKpb~<g9NKR_EY)3v3cb z@}cTbs6~6xvZfPaB@g_(WFrqXYK1WKF8EK?4l8ZE5NvOZoeo-lbcp3p(Mt@lf6V)~ zuW4$N!sk}igq4}hRjlxvaQ|<}J^j)mU$mWHB$weiM;krkW5XBOZ%GbwO(PQ}U;K^S zLj|(qTU*o(cM61~oWB6`@|I(6-fR@*_ruI0cMLA6<B@V5Csj4DW1Sk8B(v@~n`4Yo zB+N~FA<{eyXC#~8JBv8Bws^x)%2<Y*XK{jA8VAZbn`HKa8%0~1Wd2y{v=3}Fi{&ko z|I41t<66l_=_$S5Jh{`Fl&g?eqLw{|5gcXjP+V5Vr4_ZJsWrxL^^!GY0Pe_hm2R+s zyJVzv*Bc>PzE?42<~XLc$LwNjcuGySFuRz)CzmiyW*9#2B#-v79s1pILeXsv<~(sl z+vuiPp4}1Sr4Or>dvdkAa8!H;;G<VBWH@!g0IRk*WY!IKX2Wn;ymhXwqW5Y#0FOKM z#q<HaF!}okG!AJFyIy|Kw{pdEFKZ07H1L6Bacn3k=G{y!?`7rkVSX%sDtXD@D{pa2 z{lDxfoQOE16PzR+o1*cmXbP`$Ma?aGRlQ=U%o6hT70i%&_m-s+;f_lD>g|f4peC3a z+60@L`(sy_FG`!c;YO$>mNu>9yPzum90(lov4F}&vLR%yu%<DFdrPmdW7aOJ5?0ga z%X-fF@)yJ7Z}UpZS4L)vCOp?3z6C+JQqTg*{C4;ww>6ICHbu95S9~kB!s;ru=;keO zN@a>K&gNJXXpG2K)f^j9P5&-N$n0zZ_Xrg-TiHM_evW${I%e2^WH-yJ++lQvCZc<} zRee*md2guK%1*2Rc$4jeD`}CaO&WpS2~*Ja+Z;50osH#RXQFM~d^E-{hAMd)=A`$> z%G_XlEjEQuMHx%$vUyR`JO`Pji*6@Jc1G!(>k!TJnm1e_JI6A+WVW(RV6<9hy2=ln zEYH<gMY2#-vW2-)z=pb7@mboTS4}XMRJTJ`RSQ7Qp%oQ6(M*4(U)gh>DS5~3+6-Ei zNZwmnH5XM$E|^|)O^Omuv&f;=CXZ2?D)w`c>>4*=>$?SDrHeOSI7)`NgAxw5z*2Rs zu&heiQF86B7?;yl^vbrPd;VE=m!8$l5mDYr=2IiFA$LCNGM2+9Z9clBjz&gmf80+W zga=t8up)0TM#^*8yEFpDGEZAr7l}ww{q;3%hnFgEsO{?+<@A{gTrcpj+X2?P?c^M{ zJ-q31gughQ<Z;b;dN@4d9J_d)uo0WObs#3G`=FQQNNh15BKv?)xXbHW(kSOrT^h5h z>gZdc5j{;)<jLzxspy4{(oamTZ!MjRt7w-?xkdSa?^Qc_-fAAFT94&5>j_lbEanB9 z9Xw(C53TKQutv_I2FH(F>->f0E=la|{FVP|-qJ#ti_I+G(ADIl^jGncLy^bBm6ePu zYoyq=v8u?xi3N?ko2Ta*(Nx^YNuguzQ#Q@N!b3&ZxT^Fnhg95WSj~U*5<=h&!=K!x z*erU)<(wk(&|PM``J4F#{;rfAnQ)`mOYT-v$wP^f_iCHEFI=n^B1U}x3sqNPWFguk z(`&*uJC4l_d$F-*BhKkoz`0~Gx);ubQT|X^=eI=vLMJ3^t?<3h3kPbtOOC-zY!f~A zPQ|Y{Af2|i=z~2ar|Mmaq{0`(vPt$cI;1`4m4pNi`&z@PpRC~eUeZxshd}XqAPU~j zf-YtyPN$0YT02vAa3iqRv^z|#TS8~=3pz*^xV>aqI%p8=B=buT$*B*}Q5#-LpU&m< z>|MaF{UpPz_e-wt{D{AV3wz%C4Na`S(nRuClPW4i8v+y*THs}|EoRAl%(606@}VN7 zf9wT{-f3CGC`_pvf)SE4;8Yb3R(eQ=h&ldOtD{ab1#`^{m>~1egYKnV98kp>p>+%l zZ{WG`dJYRKU}oqW4h}xUJpb(+=e?Gv-8S;NX1~myuX2*n7cP^mn=i$Zdz0lVy`}J1 zzXjpeH*YLYu)*6T`J7Yr(pO4eWtJ@(vLyRcep=_q8IxbmCfYd8t-Qy74QKe!@^7|t zKEO5p`)Lz?hM^rEFsbu<hIC2cqzEme+f;H_vqJ9l`y{>R75d3{aILv$YD6#Cx#4Gy zsM*4Ix*L2Vd#PcCwrI=_$ECD>n3FUL1L8-aF}53&u`ZYzSHvd?@0gu(pH^9S*jONU zsAOi|t!?CcLkPN?jKB%yEVNcl!4K+4D6G_IW0l3(>i4u&J!gzX6c0<Tgx*Z{lqTII zyKg+AIY;v8XW@>1oa~Q=VPsWLI9IeprZDSW%RMoq%m>M(O_5&O0V$=!aHaHTsLFnk zXK#*phDPFQO;<!Tguuke2~W&Tuu#sEK&j(&_SKBk)bWXf>@?->UnjHLVb=2b$#;CW zg$u?h&BV`D%4TMwO*5(CO6jwNrY$=%QxsN7{z{o2u1TL2mm~Rpnf~aRslkG*M#klo zN==+Yl{T3#B;(^{#XHWbj%JAD=M8A6l5}5%?2?R7uB?!{B88T6zK1xzV6IaX4>_mt ziE}yII7|MlV+bxfbVsJ$P)x8LfTgnADwjN>sTS#MV*ZvdO{7jz#7hQZB?n1Z#iDv! z{3Cf>vueH3yw(>tr0#iJSHZtTbI{W8n30P6oGBjWnetq}v^Y++>Ii4b&l=SMUYB#I zh59HvTYX@-jbuvNMW9gnua?d~!@*@b>YTdDY~K#HHsu^+k;V|?cQPZpLZ##`cvk*F z$MWMmS|V)tVpsfFGzirNlkhTsBu3@8Mnb+3j0@v<qUavKY0r!Q|EzEwFG%LlWp>bC z<vy9UHCH_2W|=v)H`fWHUhZI(Cl*<Cm3*q%sIuNHK8>w7X#ESKB%`FgoV|ajYq-WT zksFjzl9Bd;UlmU|u;Ddl$Xy>TXW#+hY_*m%|Dx=B8?#4ac76}2OZ?EbQt~k*%i+(4 z2h=s5<J`v6T&%yq$CdK_lt_(P5QvMpQ}8A87#1Z*p<`?o3O=PHE$RU_y<3P=Z|zY3 zLH0xOQ`tAK74s|orR!|L4i>{`Vj~<J+gqGyoha`su+Y*Ic2=Qy?jZg-uVFYBvH-{1 zZpRN@4#BDW?^w`vG_JR^hfVN9c5qq5^On7&hV062mCMBEtmRhiR*cdGD*Dx)R>U`C zC~o1I;-SefMUeSjWSII$e(ZVXiDxgoE<!w!-6XGVG>0|J=3b-4d~LamgETv-_IgP7 zCctkYBM}gK1-hmNtO^cNbZg?K_`&ak=yQf(m+NiLa&ll#yY+@SN?*w<FgA><Y-uPf zI%epR-GY5ng@&Ir9s`n}qBJ!hpEJI}I{OM{<?Mic?jp?19WC!!Cm4xdYfyd$t7XPn zplc`k*hE9U`7y&ThuwzW-Y*QdLwd2SH88uwE39ijO_AQ}p<;BiCyGG<a}{UZVz5j0 zw1bsbs5TZ485c0JVH-c!p5e!;>wG1%U{&c#?kMcZyE&rG&Csx4N@w0kJj|8}E;t>3 z5c-5tq^4LYo@LeGPT@n*%uJ9xnOrVc%;$acKwee(aH7?4{$q8XPFA+~tXhIBi&r>o zUMV}^e7KqXgR#avgwrYNRjDU8VhhKJ3wwm&E;AdFIYVDWr<yFrRz$H~xy+1Zo;#>` z0}Beyuw#Li357$%TXPi&<yG*laaCMt6i<{%qhyYJLaO!OIAS*giS`|lAl}D7`yA?R zqq$u4aow#yv&QN@TUtL9cEM9-s`EHr)fB5OR$!&sBP>wF<3Igne68q*J=({-kr&B{ zB9Qzu^}S(qN}l0-YBTQ7*i2PU9^d3gg2ijmP4oiFs)uqGyprtE+j54k2aWyFN%@RZ z)w|hJ>I;8|I9fRxVT_YAhB({eC+AxJ?UX9>om3h$jXdJe5-NGksaCsTq!PWB@)Ty8 z91?Bs7RjZVC%lm%cqB8Y{gS=5u=*OKYZh{yelYJfisl)UB;RTsKbu^ko#YqhnuTG3 z`2xvp{|8Gf9$>HPCT3XwiX^)x_{;GQ3th%=g?lhtdHQj`XK!lVx3Im-7j}0r$0IAr zq&6?7gXkPy>d&*JY8U(H*70S@LQXE4$aDF_cs}=gTIG!8|FV|zQ|58nWIf~mvSax} zUJ}0+X3(g#kpEWvUq2*uV}ln4OV8<S;){#srg&!=$K_V1SYfk?q4w)|!C{Zg*dB4M z+zq~(FvQz`k5jhegsb@jMp^ck`A&O`r;ptGMsTUjVzKCh)P<+GHupE~&tAdYESdFZ z|3~ZG9L_7yAXjEi2X&+5J26-G?2GZYWU-u)&m+Mgsn8ALjjS6gb%QUimQ*n?FO|Df zQ}}aiHA6r6<H+k_z^m0b_vUZ>_vt+963^jX{y&oUvlrf6E<S*<=waRmj%Mx9+o%~1 zGaNk?9Z+cA8mH|2@w1O9^26iVHu4Au_npp9{eIxAo-1Xh^PY)KTcWw^7SXX@htLtx zuJ%{ltct`p$-XR>?6@qUAE-o^^W3a6^2|m^UfXy;G)wJ;P1jB5iua`@JYM>kLv+G| zs=Y*0Nh4WmSw~Zi1D<$zqNl$tIt68LP}9Fy*R&6NH#Os!paw&3Kr43e+avm*8s>;L z&%$95TrKAdTk3lpsB*=U;;-zPbA*4SZ{)qy9lVfsm#;E_R#}5_Hfx7)LQX@Uxe?bg zB2b-POjV}zdpSGVyy#cHuUN)d!xB2n4&tTktAYZKup;a~-e?ykb&hC0J7&|dT?`+D zzu>8$cl^mKgV~aqI6>`?H>Q1%fKgc3FdTI?ePp-T8IiIxvX%YVDe2*q8LcoexfM3W z%S<%3iWXnLaL(8JTo!kk{)tz3Hth`)a?5C5>WRTMeKD9b<h@&qTk6f|Yr6{1?8YF^ z&L5SwNo=$}%<1aYylAn7)6B0(jZwt?rp-kwKNhcK?$}Indp7b9$#k9rm1sWiNL`s) z20YdlFsLYsrTN!6JMS#5^Zv)M{F8JjI>`;CH{?D_qIbO=#tZ+u+F}P>Z66@d;j3tq zpCiI~H%2%Q#vmtaEYhU#Z~Hr3V|R+Fw(|bSjANPTdyiU9#Y*!N_}%ysVj3^wuj&O@ zSn7t+;ycRETFuX?BiNWYn13bA;OxYs{5iRhGt<H`J?lGE<_$u8aX12WvY)TXrc+}Q zO(ny*LB5;4)W5>r?lMMe{=+n<{TSmiS!UV+_}xv!Y%=4S?s|uTuCIB@rGQPGWv8PV zju^Yu_#~Q2mFicRntg{UqOR*vAH^0myXaCml^We}-Yy>_+P6v6R!@{3f4aDymU6k# zR*pA4Df6_~;(O9_g+(aN%5z(-`W`x|DLn055T(hXnag$lEPbAf$9m>@>|lt;Sx#|% zPMv7SAKGZpO>$S}NnYdkhUQpX8-TZ>P3j^UmVu&Stt+@9@BN=NWJ}&x)@Clt+`#`b zc5z4MX^zgh!L<bsxUl4nu;#PKIy>xRcQiHmzg)u=xMVpS=hWTBCn9?l>(}gP`xkH8 z{mRSszj3+4NnX*UQti|fZJegVTeDm|b@TB|JsMZ#nQo*B##cviq;@YC=1K-r#u#2m z{*lp%W4S417Jtp&!@A-pd{ddr>UvA$N=E8olYwwCo`GJXd)!#F1`kU`|Cl!iMrl3J zD&88MJ|}Qu)Mc8!IY5us+qv-VQFi$7m8(8CM~@^)@)CXig7R3IsozEKx((>x&{HyR zEwQsPg}21Jk%P}PQx!AVMbc&i{qVJQII6le!NC4D=rn-RXX$9ysfhn;R?hYwDx4ON zvX}8sk_)>MGis)b7PSR_lljae$ro*BDx7xFd@fT;9;<R79?0Ikn_(}at7pm#KLD#r zQh2oVKWZz^b71`==1C6pO#2WF^_q*#K?iZa`F4zJISQUKJGvg8OPkPV+!c6_+q^$B z$Hl;wveS5^>Wx*BXIN6-9D6IO*-CqX7xU-yboLxNWt`#hG&PFSe!-fw*O;18fVYY9 zXqs>gDe*&aHbHV>lg`sLV+AJ^EMnKnBixJv$xe;HSoa063*La~t>$8F$5!alMau<U zZZNy!5iW0imerxJI5r@k-+LHih3qp%TUWE(B9ZS*@39ysd0+gLizKhHP_(A=@)X#c z+8I@GV^J186j4!<O!(d$xlsiSiFwKi-*ymbKXQ3qbIDW<;{2Mvl3~7_WyU9|m095L zmS4GBbpL&=OS#_05~F2LtFoJn2)kwIVLL-~{Gn3+L<<*VK1)pksfF-x8=G-%-R~SG z{p+yut>{vs6Rk{p#qh%K6demBsk|T>+Y1I_ci{{ESv-fCr9ZG&<pRme-NztYr<*)) zwdz>9+9lFT^M&<}aa`|I$0WxV$P!kQi)I`8IP61f`&IC^8;oolH@uTf?bV`}t1{ip zWNxCmcE9+}&#@%;D-+Yaur_fu!oPjN*f?WF+_wfKCf>$fnd_uw%6uSiD^C`!Ws9;) zoK{)JCi0A0HFWy_IeHJw0x)0gg%Z0~nCd(d{XACV4{zbt`}~dFKEGgycWc;q>e$8Y z12;H7;%<%Xa%845&MKWdEE^drxw_$|gM?^417i$h(Mt4FzIyUwjj$Z6Z}VWyP3DO% z;ksy8WCG4Cql2XBEFM?(=4q+pyQpXJjMWL@1!nL+TW=h)AB-LvIa?in!g%pW#5uLY zGAA!w(Ada%BssKdH<*}Piw7f*!Ho~Nv-S#2tDf+IE}pN-w9=c9y^Ca@kS{ZcTw7d} zS^Dz~Q&?wsqA{Zze$W01zvZvT3+)!vRII{&{VZgnAM7PZF2$mnAJvJRX!Ddk>~08q zL+1GQUpP`@j#G|<@ZND7_G-@IrTt0KPOiWxnV+<_{K#IW^SBoN3~#7345}?O#8=u# zUdnLVl%8SlV!d#gBJezKGUn&b!|9xf7?&FXb)n2Y%3@esbC`P@r_o9B0<IYM;2_ia z%r}0(4F)IivP{RBvcs?`IE_D3mmoPtGJ0RVX3E2ZTzq#ccij1lcOE?D_Sco1@y#E$ zQqvkF$2>#MzNMzO`K##7cN({1u&{3LONOKn&G5-=Dh505gK6*)42oEd#=a3K7+S_R z-#_D^K{r_!`H|n6sU$mQgybFnfxk@-3x!`iA$77-5)Y`UVKsXx=CRJ`U(u{;;9;^7 z6OGQx?(!e>tDTAi6{gr;c9Sbhce6$LAx^D+DO73UpDMfIw8I><@LGdDLCeJdG!!RV zgkWaNApF&$3%)fUi=d{nF~xr}hIqCUUReRZSnZ~Zac{|n59NQt1$mNxi9cjDg-iNj zY)?zWrSuXk&UlTZ>5H&G)e57NFZ27v`MeT8iTC1X(>8e-(=#_p#>OF{_BIF0{&ayu z4d441Xwppl7H#r*Eh3XoI_vl#!UNT9C*fxJIoJlrLGSe*R~#3LHZ+?F%7F|ri86dP z95?K%OEI(-PV(upCTLUm9IZ0F6xR}i6is52FeYXIwtf7Ykslm*_hXtN{<FcbGJXOb z(~@{RcL)kfj!Aa?1EH55#1XUJIHRuQ8{3C$>TpAzt2kz8d}N=!3Vm$fqO+9_o~k@d zu{etX=7TZVw1yi@u5pielD8YrlC<1$!flz$w>2l&OE{U$MSmD9Ugxbj!_XqTDNJ(G z`5^BE2NZAP7~NIrea#Vwd9qWyi_z*&$hSF)OTwD`$6j^<4xK48WG37B^O)^6`q{eU zlg%-?b1PtGWu*8&Zu|@7cubHxq^;c0)9R+k_qz{&DD1^nS&R58`7J%-TcSzaPGrPA z#e#(A=#+90O)~qVNHh#Z+T(m&v0O6Iw~DX+ExQ|sV3zrM(LtXR&*@gA+O<WY!)K;A zuBWr~H^y$u*w_67yLfbk!t(@-JwM}(do&iho<vipACM@T&i|=J7i7L$G&;LEs_~F` zU607_<G6UDWfolhne$|>n6Fpjo$P3~LFS~!8GLT~Su!J|#NQPq+Ut)rwfsV@WfrZ~ z24+bv^;_FO@xuC|-bwPFMOV_&^?#h{vWv?dPw=9xcsNu;@ZR(sKH?cVH|!SOZ%f!$ zz2{HTV|^+8na#9&_-El)j>;EJZ>}3w<`}_0Cy6I>UNB7bWyXaD7HHd`i*7!4RBuD2 zeyQweJBXGjmpjak)6!xSb5ti7Vw1$?_8yp_8H75=QGjztq{;oD6z|w;yN+CERbd#V zOf&ptB+&oHK9XsCnMW$UF}{4Gum?WLJUJ8LCAV=!I}zE!6MRyzfv57@u`J(}-3vQQ zHst{}mwnZks>L#+yDh1Mui#+xFBHa0vCXI>x{BXDPydax${*7zTYR-&-*NfN54?5f zEn8o`$4!@I4t47@x4qI}L()$;S9%6J`9L)7Cve?n3S6yy#6On7_p<lQt$R$bMlIi( zHN!>6SqKU~gvd_k5jEf_Y=+N;-!MBo>vx)mJN9E_ur*&f>kY{ku3XHiJSIB)MYYZd z*8hOMQr{nI9D^f<NXSG?`Zp(;EBlG=C=`z>e6XcVf!Y%B*OyMGV}+8l^l^r{COX3s zo2jgHwZ^}G?@$puQE|T6CB@*dqlzJ6p^A)V3o$?BB5wyZVR3+h&c2a+EBn-VyFvKX z{1PrVyhBa-8O+ZYO-+U?yi)V2NEMA+S~4{mS`Nq%jY;}>o=ly`ImvyvCGk7XOZ<yJ zrP#xebrN5-wvv(3TCrZT(>^*%4xhgrYQlGMONVBR>#UHOvLo9^OyS`+v8-$MBYp^Y z1%-zQj~(A)q`Z%VEoGi+D!HMGLEPWalf7%kvu)WXuFSi}IjOPS7MIFd(I03Wb(6|> z=h*B0Bes$KzR}liXdAyx1kBIzZ~7Bd<u1dP67eZiZ=<!4bzGI^d}rH)-#KsKY{^*N z;wIiI*EIQ#HArsRTR7W}6zy6RFImjz0p(;KRG#HmWeC<N|3iwIiQ<y6UV8F_2$Na0 zwsayl=T#cQGcpXVQk(Ndip<f{enddlCrm3W#V-{XWu_d4tHRwawfLEt)=Rik^bzyy z=HiM?J*=!F6??246+5iA<B809#yPlfprerP9M2eLYi!xp?jG-}mO^QwQjDnYr!cDU zP)sX20^e-O08IITj5lM%HzmJ*8^N6kANe|ID9q9>V|UhjT*&`R_9!i}xZ;_74`(wU z-NY+3iaphT^R0~neMCQ#;BXyRH3?Ya7>^jI>&SFjh=uO%2=kJCoX;-4^j*xZzT0`- ztC0R~3-Ht-52-32#m~l2l+^FWwCY;=RQ$}ma+xyd)cmKig|L^_(MS08DUHsMNve?d zJK%tE3-Lw-<DJY>%1ynYHE)WEmL1VnvXZlHMQ<P;onKw=GuM3?fAZ+VU)(zjmt{0< zo&MlZySKclazsnB>6oiHgC32K5GXwR%F0P_E3ap&cDwYo?YTYQnNxFnurm81e-q8R zcg`QUlKTo(`5*AG=p<C4ZAj8(v%Go>?dm5`P7<CoPUd1|Zw$BEjMsL5Vxi+^%yOB4 zvu-{Z;U359u6t?jG?^Xj`bl=(5YhiH=2=m79MWg8Ta6#mD#zolZW|_-|1FyNUD#DN z55JalLQ#<^(hEN_z32q{YB$liWHXnS?qihh7zb4Uk2`9vFhMfpLL~FHWA#v=`Y6s+ zeu2L(1}9~n8<FFR4hhFNCMtrzKe43WZ98UP@5T1Fck;!HFMRb)&%h#JWJ4Ku$<A$} zLp94}k5y;Y9S-Kxgl#SQS(83!Z$bX<aGhuTHgQ<%bzIkNFFW_W!9jhKY1`ctW7-B` zSCdE-IrqaV)lg(9M6)LT8$+!veysb<CHnpJt)ESY2FXHg+{m4VI~>ud5Kq=nT&v!M zBbAcVQn40mDo3G0yvIUSmAu$gw$bF$*~<dDzz&!kIv$Z>(=a`(KSnf@xqs6lo^0}o zqXS~Z51Pq#^4;p{TFOE8wQ?_!3Zc49s_cYag}>lX<^?QDxr4<?`>`TvFy1FMGCk=A zHOb34FL?~NC(9l*`6(?^y<n3$3$_JEFjRD0&W#7q+G4tJrJLi6Up;?q9!E{vx9rm~ znyn%dXx1Tvom=PgR<l}84RnFhD*_JAeT9M825VL3;s=kFn)Eg;gp=F4GG2Tc#XOc( z&YHwBKKhc&g&#j~%=>>C`))T=qjoSh`Zx<?-|>d*+9ESUu%n<8+RIKix>f;q#K@lX z6rZa$%FcE*XWRcpYt1KK)u^Pd?~MVPxxx)uitBbWVPZ27nX=QUQ|5Dq*(=cqKjkd( zE$bVe@>1Ou(S@F2W%(IKXs^pGIff^4jnFM85}k9F!$0pdf{LyQr{XWPsF@-B&oJ~i zA=g-BP$~V>Dw|T#1KL6>bx)>UC=%?<Fh%P7GW(0d^!%5@Y(MZ%D<w8s_LL0rpK$@} z&{97aS0(T8du<-|x%+9AF`na+zvHTeX`B*&l11^xVB!o+N&OeQGVdcG?{ByjkHe~R z7j&)>ZB^q<J~4j85c!VkZ5**o6N=f+O`vjB;*o1AU%1}lEZ3uKCO`9BpU}$92rJ!& zz{G72rn%h3OUGO2VZRPBR)ILJjNwG%Q=+#%Df8V=qI-77jOtk!Q~fXgs(B?@<To(3 zaV0b|%UEynmEW5m;6E1Yxk0s=chrBfx7B?{TjjFET7lWNPKc8kTXP3LoY1%+-cbc7 z;hyDcqB+<89yK<n*hD_BRI_=!W;9Ev`@-R?za;FfWL~JWhEw@K1ZvkHtY8n!bJt^5 z_CUC0S2H&IZ)$Uga%Euv6G{SUS22=btIu<R-V$t_f<{rMml|CZU*ry~G#!OF(HxHz z&g@*vqnvKFlW%R$a;ZZCcWI;^cNmAOcH6}ZdlX;IHcQ>y3wgDY15>$O^0P<C-lq#M z6c1#x5_xU1Ka403LuC1KB$l7TCf!vu*ByYLZZyVK+F)p{?DiT?^A&e;mGPfEYx;<{ zjVl?z0IU}upRT?cTG!d*PsxRMmA(2A@%>Qd3dcT8!uZFtG5fy(IDEwxy|28b`K_%? zez}BK6ZY|3k@)n5z4}`G^1H2%Al~K>e5^LXNIeyktlQuh`vxjyUN>6itJhntV6(0> zc&*P2F6jRYbNl|y5#2vg;3oVh*auba&GFf`DJGczA6>YCCnZC@tTKoHD{thhQg`S| zBC)MxCOVXC#a8VBm=>=?XyIV=5l!Z%!elNhxy|EMr-V~*LKtu7xZeE{8=7SBX}F$8 z+XDOA*D$qhG4HoZWlgyFB${8Ledq=L7xa>|{2Tb2X9r=ROvEYiLJer_fF0#k{3u?h zP3hxhuho%<<A-zlx1(I~t&z3ghNHFA7#HGCAu{nG>XN79P`W49NxeH+^3Ml}wl{+x zg~L+KWiC!Q70?`?!rH^Fo#@9S)OZo0<Hz<DoFw|4*w7F>3up(WXdGiT;&Zm@E1u_m zLOJe;<#k~gp!3D5LQ<I-$B2YyJQn?!E#AIj&lhpbdsfb-FJ0mIt~b_2Pes(XpRhZv zr_AlFai%1lU#gzTeDz-rGWmxpsjcH=pVO#0&N<E}=<0fjhuofVmHQ|5bbn7*xBFb= z@|bO$a+qo#fOWD*y>D?Bw@f}_ByWgzdmhGA+F`Tklh5S;#+O;^n4W%>S!u=yOc#H7 z=56fHO+a()8+>268#C(rV2_brd}#Oh$a)t$%FaYD9;iR$|36nF9so@yXK74uN_q}6 zO<Rn&?;(Ae_zKjWU~V3aG+H64rj9n^Nsh}mhf?<DhNNJe`qmvsV@Km->_nXXCXCHQ zPkczt<K?XTG$}a2DJ3Vlx#F#Ovy?dA*d5P=0r<gusLXkq;DBub|I)}F*JU*ydMu%- z&tF{Zm&#rNVdxmR2x|ilp~!a!f@Kf;(AB`x@^_O&Z&Rvl&EJgs$=P#AcF~r?$6JE6 zl4p6K;w|n~oItJIe{*Zh@k#%d3k>Ilm3Toil3#O)X$4nHZg8ZzxcZe{u+Ks?;_4K+ z2M+Oz!%|i`FX3wUZM@<6h)!OOJnPX3&s}F@m!mM-ZA8;*5rI|4COBkx!Q*;)?yAR& z9_KqADEpZ=OD+j3qKb;b_E;rzTG!kSsK{A{t-0UhYMuuQ3dGB$ea|uFFF0HJw5@e1 z!k4aMdm|-UnAzf-g%x(F75LX$$0Qrse@c&+EgYHmww9P=<AVk2W}=xFzk#Vn{2$fw zdwt~)VOPJazQ>kTQb)-ys!Dc^C&~w*ZD||)tu@1y;%{^<z9dYR{oGr0m|4a5xVubt znBqNHC`^Es(uIFC2|{O!rud{19jdAgd@VZ2eyS}N8Cu9bq$#GA`(jVAFZ9_iSdeH6 z*U!}~jH;ySwSfUo>~Z~J0DgJi0<j;uVZpb4_>|Efv&;J87efTnOg-h^FJXYyO->W$ zQFq(lc+chlLq!YkDs#LQfz8pm`E=}UzaBliFU8niop7{U4u9*ohu^pOiM9UI+1GIk zqs_(3*C_hmYMJMii}qC84y%jppe~lVZ1GDzEI!L&#RutGw3oXJWzJJ{fnSSXh<-nT zimH6>FzEP2e7)lw6Zy*L86!h4azN|zH0cn<8y(fi?Jyjl+it|7mb>BGd>u{(PedF4 z_PFAq!9+(rms)9QY%0ud(RHVahQ+72qp<Hikt|x}A!%oso4lRJ6aVD;gok`4v*uNa zEzl<E2Sg=L!07aW@?G%7CT*e2pKh=gTZN_h3x~TNpw2&wb)kLGwB=FsX#E*3t)dYU zCUtLcXJkk%mgjbs`y5V4kMM#cOso0U5QrVMJ#j`i5?RGla3=Rh98D8uWxN$8d@g3# z$FH0kb&n1oPH{-|VOqqU;)0ZWe3_lZQ-$?>Q|gK@qIZgvJLZ<6DelVmZl4-3c4!nW zpMmq-Eil5<8(+NI!OFWQ=+P2WU2ECj@ivoe_sQ!xN`>+*!%fUFLa3fbqPOo|BX@xK zU9*afa4JuB0a=H6B7Fn*$sVvS^8}spK684pLGE7hIf>TA*jUHT7Vo&p>L_D`rF`9f zA-mfjW{_<fovi)vK>ZyS30pnRVhu(ME9aG2F9ev_p@X<P7S_LES=CD(F8##Z{3O{K zSJFJy6;Bg;qIbeH_$1E3oRlB%r__Ag^Gg_5a*gdPb_st(-UrdOzm?=M3)73RQ)VMY zRgOHH7sCFShFMZ;w0GM<2e0o~=`(<P{MORcU!E!7S;+ND!vQxxMTnEP;<{Y{K8b$r zjd>^78JF;m;W}^WcL_gz2TLlCb7aLW#_GO_A6|iR;{Elg3B;m0H!Kogz+$1pD2yzy z&_oGGb0s!en25%|mY>u)oNW^$ETD(%>3E#8oPXm^VFL%bAElT3E1CN=(#)wXYV1ZK zNj(`2W+MS%0}K>BQ`71)I_M1iMRtAdO4^FfK%T$izNjt|K1@*(U1ZkyUGW0;DE@^k z{#SSyC0wU#CM@4Eu&$d8&&C0e4;1^&?$XS11!L8tIn`zYui9=E{%aJ6SleK_x*Zl- zwug<<O?V#_+#tS*A&~mi@E2dz|0B8E&&2On!M`g)#XC6#+e?4N0__SkDH;vSg7zrL z^TYUj4OE3H%q%v+iPBmgk~-pSeGHwAAM&m8Dl61Ccw5*<FPw^L<KlvY4(%{jc78F+ zwm4?&hI-MgPS7T>ch(F3lJbnHanWr3K8~v%f8fCTk7)bwF?T-x#JSHic=LTJt>O)m z<7bT?vePwGg<!G1o8(uIKoj9VJg}IC1e?*QcW#Q8ei?KOKg1moqL=GAm81G?;ko|r z_-7v{xO5!`<2Ex<95@cy^8UZFG!oBU43+i&@yCjrtk%Bb4#_rnTU183{6?P2sv|Sx zeGu=0PnH>e&vHR~**~u;ZjX}6ev+a(5}D>QLvs+$xQ`#6hpKSAO#?f3YUG-(YB+Qc z!sf2R$?7x;@7qqmt`=i4IpjNx^Xq^yqOt8FddNX46?}}0(5z0+<>kdZU6{!>+3{?j zDn8GIdu$r}4;izUdp_=G{QEO}@ct7we>B5^FD;RlDEU9xz3@j_2p%*VVYn)pdCo7y zv;T<YAusv1MJyMzE}~iM2Iht<5EWven{dM3dDn<nzKCk64_aC0vqD)T-bxeUPn%1> zX^c><G2(MnIF)LL3*W4<Eyf08J~(62`%rkl9}340i;x$y1=;aCa5H@)e#xH)yRy-E zQ_~a6*c47?c37Y?!h2gKespre9qIM|@C?N|Z`pzRxTC*MHUIN^&XFGb_{?PqUpma= z&(<4hWO0Qw%Hf&@SMeBj#K^LCa4&L__q>P!nGb24E=-5?rM#4}j?=O)(;(-8zvvAQ zR1L-%@k|X?biyDrADCO3pohAM-ooL@Ro`P*wfOi|XSh*yjSAHp23W?kMw!JH=2h%% zqL8hj8J6gcaILbKBg7wewD2MK<=*Awtmj-Seu;S*O1NdU#Lb-E_&2{B0*k{iLzp1B z@?IUTZQv&H@Le+m<8R?&Trum8)t2E{U~MaU*8;wFe#c|(-?-1q6bfItPyLo+sNY`P z^4W=U@#$*Zx}dvod2DQ@E>xZ3Wnt(vDsITmCWdqL_3TmG1l_B}3sN~6>na9I{}760 zm1-1=e!IM;giD3nyQ8s)&cY+uY9ibZsqGJ01Y)Zy1ShPTAWin??)HtGuhB}rL<;Y? zq)_itA+Jm31i}V;V>cR;t;XVxa=7%e-SIPm@TX`PuhbVwHbI=|+1~SXmH6f>Gx)o% zijAe!G}31C@4`2nRd9pT3hr}fq3o@-YJ4m20bTVJ$)cNvN$8Id6MJkld(L0Ye_@Gv zA1;*|@3FEM`zcp*sCf*3lHK58Q|V<*7RlKwvob{=I4gp&O!Ng)SjLyK*N&?%5cWwU zJJecXV6|w`D`iKeYl0_bZSlOcJC>JpMN+Y7N{j9BMed}1rIpe@Hu8URFFi79iU-Qh zm?s|De>6>`?lZ<dw>S=Uy2|smC%MDwB1fn`^R9`BWGaLpMcWabbK78Hx<A%_6W#w? z!InML^X+X@gx+(;#Rq{%c+d>rJqtp|7+XxqEN3s#_I{^(!G@Yg?1cNAYWA2Tl)_n) z97Me)o<6?mJl`ybBijqVsapZ(^)6<M-WBZLUB~bU@gs)4<`%E(JZO7?gT&KwO1hfG zH7@v8)?a$DX;@u45obzU;X|=}e)-p!oV$}<a{u6`>{A?*6(<@8;f@Q}zFu_ydyPEd zXd_Gt&uCt6_JE^0$Qck>&apiL;nJ%g7W5d7)m{2yd;2DcXr<${=J)tKcrT9xY~@;? zWBly)kx}-R!mH_t<A%j}R<R#R`3G?<bv=?|XJW*st_XW?jHhp2^XsdljCi?+w_hIR z*|#t08ePrLqKEF8(HbqaVYs5V#sTv*KDU2HmB&;1`zO;_*cj;{9k3!)`tqhfLK!41 ztN<6>@HKF{R{=k`rtq64izjWhw2|Fa7t<nsX!yeW;w_n^J;kV;OME5%j-TTkVG=VJ z%|70O(Z_g%M}LIj%il<jm-;MKiIkj&RBLy#QnyvKaMyUDF^~U>ekw}tpO+5(Fv+Dm z>^$2b(Z?Iz{DcqSn?Y}%D6aE*%{Cs<eBzSLp_+O=lS~M`c?eXB2z0EE6n05_xR(Xu zJLwf~<$hvy&RKfr?iJ0`0r@=s;}OxBjVyFUS8Y!WFByqtr30}|*8<hmws@=8@nB;P zlf~!ZX`0E?%1XAgv_zDp8~zk#*eJChg5>9!rD(Usm)yj(k_v^EQyNNnO&A6hI=M4T zT0*Uj5Pzi9$|cRPv(z8Y%bX=o+7^2x&+f5s<f?1E;HdXNkZ^;-ng0L%P)??o`Bk*W z->L3$ym+=s?ZrdmsK9w=2UNLw<EXngF1fp6pqn*%yEL-KF<16=ahz!r%^y`CIo3Rh zW2H7yNyg1h*}Xf8S7~#l8H$9ZIa>bT-W5&=lw64IHTGCjXNJJ~GVvd#a)-F@B}IcP zj9v&c<1<UlN_g2qiJodl=&e1)ukVd?;kopYTFpZ=*UcU8@vDQ>19s^Q7XMw6r61-h zLlG<IL|;=ond?;ZB)`$N;TbR2K4L`GE50g^r?Rw+9kiyfFZRH-qL!Fk+#T`SzL;Oy z8)K!n=vvtuf7W!wDZPX6mvT8DpBQNTp1n=uXklI=epw5wv-E<KstKIspMFXu+KE<j zgNg7Oj2;ME`ziYwV(8mY!by4!9Asv2R<!JMtNKAz(GBy;1I3eIA~{I;REjQUuxP_> zX&c$P)K)w(u86D*M5uU~TZ_+SuAH&El`@l8w-6Ry05V1M8SW-)2Db#xaD5~DsYg8T zbesA1_u1d#CAaB6)4MR8C5d@5tIlPc2iZJ)F^9U-GH3a>R{W+)^m}H9<)17OnO4U% zIh#L-#@(du4LjE)@~qTxMZykB7T%?`q6ZGC`XS7{9i}z&KvIMS{Cd?hwy%62`iKvv z8(H7h8jr<~rE=|tV)aO=uSN)4QR>ioV|*1}KtJhsSb19XCg+$^ew|%}3AjH$i@7<L z=$8|WHgbOY6@<yT<&I=2pR{I4j1f)84L?cDZn2+(IvwSe9?$uEpAtUmV}s8<rEcmf zn!Zk9FlyTw8^Z?ReDEL~@EeHhZha6h`uCekUvv^)`hD3$Q}&-rvfgn@@;kPQi(y0b zHwH%~^Pks+jDN1@pHGCd@W>61o&>_^RS=>-_~LTB4|?aefTpTHtWCbhHGBDPc(=ic zU=J{iRJG2gvdw4y+A4<2!!!6GR8RY0TdWB1MuvAFvRwU<;^2k~@kop@1Nt`_IIz+j z?~62ep5=&k$!fU9D$whbj=Q7sc>Y5&E22O1MeIlJN{*o-Cy|yVS^Tpqk1y)993yw@ zSkdH#D5Au_{FaMkK6yng=d`^WEL=NdkM|(l@$ZVO0q)TI7xI<gT{d_hr<2<`7TA3h z50)u@KsZj+c0!J@+GC5H;gKgk@9ca!W+k&K;~NXplXx*blNlKW+?uUpZ}C<;6u85p z$Op|zoKRJ6DJ&yB2Z&!OSbR%i;$K>7`GFa-8;)?OrI*GIKR7ta4BH09vdbDS9&by_ z4E}8v&p(V)d0MKbiH+6N=q<3b#tVJK*V$26HuuH9-bs9DFKUD{QmaCKtpx()?mjDL zpsHGp_-Z94%b#cJJ@LEbOtd%Z0b^w!=&kx=l6Wk(Ifo+8)edW9P8}<LceRTe(Hd8b zmAPfQ_(RtzBjwo~fC!V}!m{p->+pgC)m*_8$#9M4jmEG1u0ee1dIO(I7EF_x5qMrT z9oH+r$F#}-EUhXPZPOh-t=}oRSF3s1<PRRSxXzQ}eR*bMhViy;pltwx?7eVZ^x;nS zHM}Ukp)U41ezlhwi~RcuGT;BnHW)o^Y*3{xV>|J@elfW(jKBv>mYq(siW2^+RY~?t zGpx)Th^X92xRW;pl?A==SY{l%N|Sj~cTpH4+j+nCcMjGclMI`;oY_z#Y(9Hb2o+mY z@EE8t#Y6Gubu&t3AEP*i8)b5{Q6;w-HLzS!$1?d@EbNUM@vuEI&f+gjlo|RL{vdUm zUrny`t-!+)XBdliqn*@C=X4#htFi+Q)ie`dyAxi+2zTVa^}Vt9%}ug--aJDzSE8X) z7c<AYjIQ##Z*bD_hFdnLd8Bi&TOI=(wHzq(tP3W3s;ezgn(2u*AN}z1fg{2%n_|Oh zQ)o|G;_G>5{C&q8LtlHKbDSG8ax@sJGeJmo4cq8+T%s+fiME1&lon7?ktUfGNgSb$ zV~x*8hP8gj=<eS*Ww4f=hMOXHs5>V2Y7UEbEifn84QX!GOtAXGW5U)6!fhHE9?E<7 zR<b)X>8BUwSdBl-MKfHb6^(S^M1;wHeR|$VjLh$X3B_LcwNf<9qGEa_{lQlEByJ7P zX45uWj_uOO=RHi(&{KsWJ?xMj=>XFRTe!8cgGZPHHp!VV(~rFDmd;ytuQ*$IPrPMM zB`YMF?!`qsn59NRk`LO)x?|)g@s7SV!NwQHX!}@ljqW+1-JPZwcefMt54+>y%TCCR z4uf&J%;CzNu|$|KKRMR3ML;E&wvaQs1JJdz2bOp0g7gmGqi@^67}25~c7`}%aiE@a zee>z=8P6qhU(ohn;V+zHzT!HoYMyY4_A8HO<;gCshQq(uV)=&-c>ZoER=w|w10UOA z!52T|B$#1#Mh3eSJYinhIkpkDpbKwus%Z=tS?2P#RXv~Ds6_kggx@so*ywDJNV%uP z=*cZUdIks7^Y_3SVGvcZzlUD@kwCnK0%xTUtre}r4bi3?OE!fe)*Mqmo5A9<8a=<- z$X_z>lxUT8GG}X<m&u=sq?afu<VD#9#8w(1M{0<nGRIWG7tKY}@k||xKnEA`CyRH< ztCDSf3+UjNMt7eSws+6ukD4MXtmGLq(+dez34_dz&(#=VitNp8s;f9heEB0P8yHd{ z+8E(LjW098+Y(dJ=b7NV*1%1o_3uz7&$h0T%c~n$qPIc`y)ec!6g^a}(Mq26_R_<a z$js)gM;Z5c6?3fYQ$0M2c+Ew}*TTYBE?kmVayB(H?}~QDtz@d@k8cecw9}hmL2VV= ziC4v>I*rCv(yz(ySX*HQrwVJ?AIVNkr$D2wROTmX!W#Na51FA1Kmub;bLp?Dp~}__ zyW}jMCo`08?k>ppaKTMaUwrj!1+`}c0^Qr<XO|F+ck~AA?ci-)!{-*sG8g~Ab>ah9 zDNK}tT6xwgO);U=1^z_==$hvbMYbn8WV&H}rYk<n9Qb;^gY3msu$9-<v{r+T!bZ$6 zh~^Ig7$6(g@la#8BsP6P4i_onm|&E`9VQhVW2(k5Q<*25hDg?AFdmutiKkq+iYB)5 zUYMa=@-+XGUhYM`u#{`$nXZWC4)Gysg~f8ItelymrT<xHjDb}O;il-hzD^ivQY&wg zyJa`Z`B-$A4JJ9Fkt^dTs|IG-De#x<G?qIzaEW^v4|-`i(W{8F-3vL?xs;P6_e5!8 zjb;^o=$ausoKM0fd+3507tFE!XalbuZeYuk^?ZG?hGTEnaP!MrI>%SAd44`$l_YV9 za9B3Wob9#LQ4{1lX<20iJ7H$dvZ<#<Kpv;HOQ61YG{c5RalqIZz8jOlS;MM1tB*5^ zI)vkkcsYi+hoZUMAw!hTC{&o?bwedf<ep8fP3JxN9_*JnPsbt!N^|WHB>h`)mVxIp z%eX$Ph+YMy{9i>mmqW`SVMjf1&7@wK7eTEvY1=84XCjlB+ck~tx@Oa|vv?cZXYo?Y zBziSVU}#_p*LW0io`astgd4qEK0DXyaJ1L9z>(bMIF;^)x&#eQe33i-qd9K9tKsz* z**yC&o^9?X(CKb5|9qf8$LDgcf3U`y6j%IS<_?X_YV#b)c7X+4+cKVib`*_U=Pxwr zoX!6_)UaI}3$zXQz>ttov}w`~g?^nd(z^w2x;bE(V-@GwWHQ2B_J<95yiz8)3pw6+ zofL+jK6ixAyAEjovNbd>g_Hlr6@5QiKoh5cWjc^lsFrz@F9I8c->3*fXR{W#Z5fPw z=^YB}tT9Yu24@#x;&>`?*VhI&{2dT08mK|ycllfXZ0RX|yPT>2_Z*e8nm>s)`C36X zx1^`=L3{=`e9mRgNBOROG{K~3dxU+_VA3}i6pFseCRYh_VKk%&o9vU!SbEB~%+55A z<;oKJ$o;s?rkKeNI(C<H!N$uHp1u}H^fN-C>^UF!%Q^1bKnst08atXGK`nKhWY!oY z&u^FRJGc}@igr&j2{TP`FtdOsvZ8r6`vrq@h1HT@!9hj7=&0?Dn<bKsQ1&B?EBiwy zjI7Nvb1qisgtscX1e?2@=Pc}RuP1a6_P1A1IX!~SVISm(+5YaB=;@4KoUEXgBlofF zNlqK5bD$xM*Y%lPAvqy4B!?xuvWDYyjjSwdU=Nw$78O?rn^-H^Hu7%e0}l#>D<SN! zhq7asEPSp~VFzUyNtTFsi>BJ8GTm9|Y93LX?i0g@e(6m2FXNB?z&c+K4E1h{M2|?( zRJIY#c`)qcjC`VUz!G!etc(BGQ15}G)xNl=^G7S0=~@+8!A)w|m)Z3kkZpw1*=o@j z313Qdj=SV_WN0NVPM60a)iUE04&@`sY^V_)oQ3&UdRruLztpBHRe7RsEM`-6Jr}7h z@kDJWtbE}@tA(Ybs^EUn%}f^E$scldwJ{WPv&^6!<@ugpuEdcNYs``v(sS`t#}!yh zt!68k8xB|?T&&V^H<|TGZlCnmt_?<5CVs5{$I*GmHF>Um{0bpt00BaPu!jsqoVZtA zt=e6?d%E}T>9Bj9F1uSh?6ga}m#wYVTCIBzMA;yFg}o9&2-o}d{ew?W&&QTRp69-= z>o=#G26QWT&R+Zx<zYcm7RfW@Fw2u*ZPz-Rb&;!7A516$Yb())*b@CGwp=q~YqSo2 z^d=LzbOYTwyOB(<lWp3$qg~(n$*=hz#>nk&<Vo1u^JL%0%OvsJWwPQ=a(NCU%8FWp zWc0V`9DkKo4waFGT(3XDft_XWa|REqk1T{+nN2>O5zsfz>(+s5>NVl^DlNP7lxE(_ zd2>}jpIic8F)3cYO-hv@I~<GACch00fa^8t@s1L*PfzMU9W6TDZIq354rwcola%6E z$vYV(eT5duEgaSbMSU7u)2YYF&Dt7Vr?X?KG(D?E-<#T?6$=~nyk+(J=dx;ja7ne^ zv$#g{=93dQi`>EdcI_P7L|0g=hH{TT9vje0!-8d(T4h6Dh%DiIPOc;41RqTMkx<#c z$0CPz*v0j)OUzrq?lw-9&;MK?Pi<Z%SL|3MmmZoTSC&kW3ii4vcH7&@IvfWEA2Hr3 zr8A7;o8J%C)~4s3S*IT@IH9l2IjnC^KdO&U=6ug9*JrXSHIUq-Z^x3~X&=x(;X(f5 zJ+JDl(<)}C56Zz^3cb4FP(YvAYmt9;C&`|@<K^l@lV$nwEV;QfR5sW2Yp}ao&%}rN zuz!y(gGYJFQmd=&%p%S>x!5&c#w5b!fi;~-9V464T@syPmb=q>_3`8~?LfETjQN-T z<Gq@Tp5}UAtNJ=cHaEt|OI4%flHzgVW=6dBXr}ZWbxLNTLCz`Z(<4<4dP`%ac6T(< z#WSKaN0McYak|`Wo-bb8V%b8bQw#c|7xDiExs0-(bLgV<0j(Y7)k&Gb(v}e=m!zdg zBYF@=%rvovjgtu8>*_)H?4Dyft?htb+jNv{sUrQYp1TDvT|7M?=d=aO-((<kgS7;A z`O#*A3DHmH>N}<H^Iop>SCdoFOfFN8ZY8H@uCrgiNbu_Qj3xz~kMCzV<;D!WAZa=B zLNcBv*BCjEeQJA{Lk^kQ6@$X0B@iQ-zH|v6$d(h}Dz|i{$s-*pva>B&Qr)Sth5VM0 z<`_wZf9h(9ljZI>GT39}qMm4ZfSvO;ei!eWM#;gjEO?nb`7L3ZT%1O>Q05{j%2_V= zkGTmSz->~SeVO!TfN>;`m)Wiu8AtBOg>VM*%;W$EHRvO}Th1W^Sx#p8t%sktV_2uQ zxb@72GHtCrs!cU})myVkUnkoxscEBL+O}U`@2S*l2D^2hlKpE62Zv9PkNEG{g2(45 z`M4KHM9MGxUQ*x(mxP|uLE9-^ZL82ntp)m=d9UV}w&<>)zjdqb(+m8SYGHnTrN=7I zbw<j3GHYHS|Dpv5<RLeBe_NGCwH5Py$(Zk`(1Tqi`gBhre(xjXnH?h|r$X-z=6$m? zXk}=PE{rVE?wA5?bsg2oaV2zv*6NpN2$lKygrkSdnLfSI&gaFukizW$t0fr!wUtb~ zP%*>v`A(YT(;a<k`>j^<J}=U5-YnIjSL*b&)jc}?C)El6hKr*hS#Cxb(J3Y=fM35V zv`Rgu6PjW!)?9kLD%mG)jmeSoGH1!O*^4CX!n0-j)$C|Doh!fGJVUlzOBdgT$+CTR zoV=6eke)~f`t?Y;p*KQ~p+VZvV39SoUcI%ZSud<@z<U8UQroEyRrYE`u}Jp`hg?+> zCu=Ln`8pLUelqvQ3=QiKQQd0F?9}JktG<}y)dkDQb-mD|C(awu+m{5(_lv9&yuc>c z%np%rrjX@0K3FWH$#hN$l`Eoc@}Ai)RqPd(cGbL79(}H;SMMt5)&Cy!Xzi{MeQdi) zTsv%%yE8&Q-kvD8Z<{C|ZJ#Io`{&9XC&~3>$Ger!FkS{U%2}izXYbaEDTnmqdE8}- zJvzK3N_x)9l${I4N&2kuvS(73{5mE~Zq4Y@PZBHjeY_h>!b@~v$SGY)K3NSM@o01@ zf7N)@Rno8D9_!QV4h-m{yL+{0C%D=k{8Wck=bg04zm*Z<YqZL$E|bh0G|SC!UAK}6 z_%2!P<0HsOMJI4BXT(QI2AP{`U~UVRXPBE_NMIh18Ps1Q2DF-djJa_9KJLtoLu6GB zkU7<Dl~2iyoZlQRzt%crpu#3!m!bhLHON8s&cDzLecw>8_o3&g?(fh+GA^G8##dnr zA=@LM26QmL@VUe|xw~Tc?_<Xrj!l*A>@t@m=F4kIW95m&B)L33LiWX)$X10T;9hSs z2H25A-tGgN=;+it$yeFl;L*$mgB)oJmlbY@EbU<D?FyA|dxGWDzF=wYAJ8KM<c4}H zHN@AVhxq4vG)`_XWrMemm01yE(1)gqCoW3diALF#?A3|MojNtKN3TUgVZ$RBX*Z+U zH;}J9qJ!}CSCRpEeP5)wx}(@5qa~g*$WD$}Z)>Iuw&Y1780bMad8!?8va_4an|=%X z&4A{@MJzEk>U67H^X={0%)7VR<<U~^#C@mdr|f2(nNy|9b1L<$?0TXC$d^m*W4H0? zil|{d9y+9FF?W1qV1F6u!=rP0x1c|ez4^cZyj6d`bo9=Xo4RL{?KYl_#Zh8HJMbbi z<+k<=8Pk=@Zsd}A=#OtEe>947e{M*athAbCNoW8ac#po!9F<H+-$Jsjf3^(i3n6Cm z`JM7(P_!f)tg>x{eVQJIRQB43`>OQP?k2sm!>i{ouix67C1*EIkoOxBWn$y7E^BJi zdCkSz*HWMn_;t_htJEueU~u?We+)`Pb2>);wojIsj!6;^AHFTRo6eFW^flnC#uNQR z1U^dpX7c!2wSbvLqUOjQ&L#2`y%W3fkS>jgl9Vtn-ItY`;XA?^U7#z9;cxaZtNalv zPp>7{d9__mt+L6^kI4D@aafDCw`*Q8x`MW9y`OD;Vgwmnjv(?(!ey5=Ok6e-cVa-> z?Son$N6*%1gPfWbEEg|R4O!l<=U-Z?am$aO@!q4>={s~r=59SV@{kS%3N)27c#gYJ zGn<O^U|oxTgkL_o!6paL3trJen^2=k{;Bipm$hVbads7>cZubkI*V+#fR7%X&;*H1 zO_L`kq)FPGL}@%LnjE$;nR*eJ)OqX}XR%YyXRn!Um%H-q^28XcWT%EnW=xp8Yjenl zJlBW%qvd+HMV?@0TvtJ-b*Wb?ihO!|p-9V7gWP)9B2x}VN%lUc^z1^rx(jW?KBKHC zP+eWwu9MnIb@p(v*4S&bBduFoCWz?F2s!JFBsnraP1ejymq%yB%jyYWx!D6+pVFis z#FyzGF=aXcR$3Y!Ec>huX$p49MS)a#qc>M>Y{JWkw(z3DDCs<eUuu85?%G$UYY$au zYhkHgTT!KV)wk<2_!j@yoeiHgUu;9mWcA1*5jr1!gqNA`aLTIqFnN!2>Ir6<XEQtW z8TO7zDFynD>!4odIHGg#y(Vyn2Z3n@M*MpD5cBweM-#i-^(0w9&0t<xWz~B0c$t2C z<e(lqyjN3>6>_H6YG-wiUf1r^<Ad}t2b-iUJW4)yIwi~Hl(=|@l;Nvh<T8`bNRDNk zU7mC~<l4jpNk~nhYbjQK9c2-3x>tWrYSBq(D^^-t$>8wn^j<q2iA<SSKVHIW^W;6g z0`+-ve{-%3yT?djN2a{Md)d_$Bd>Om%SF#xM7Kqj!LP0Igv*(MNEtB2OI8H_vAEGP zAvsTurcIOY)2GW@@EA)ICrcJO{4n&^SHdBt;H6m}JQjR6MP}3g@S)GEUk%i2Yj>&s z-bUs<@8f&*RotPCWIObzq0YlIIG_>j{rYupkD9??{3AX3U-IhzV{O)hcyULf;Gf{> zZb%$ZXS!eC&h~40F8Oiex^?Y@Dm6_wpuXH4`dsE-U7n1lhF#|o=HL*sONwL+`CMb+ z21iRS9){=vmxMF(AH&0cZYOyy=xqv^FRws@x{=)RM_SOJw9!e{C9<2Y_uOH)SoWMo zQ$WA8jA*BIn9lV8J*p;&WX`%jC_<)#PwgYO_)f5zB_ktb?04!-%uvN}R{aB&c<AU5 z=<w)*76aZPtMpWd%GuRc?q;i8S7(u~hG6-Qop%j?rmD9?S9x2=I&aiDh6X*`?A8yN z+g>CC<vmw|+?13l?J1+AIW<lyQ!Fw*X@uv0NUsAAydka*uO<8o^VV##9HJsx^@4D8 z&dgK48Y5*b^UVElX{!dj8q54#(%h^L@X(e+UiJM$#^P^d<omA|%B>%tCtFvaFHd~2 zRQ7CGBHQ*Yk+tP><=O5jvXOiWLsXhP8HJXSjHua>eSAI*y4V4a71M*qUgY8lF%p<F zTCO^Cf;_z}TV7ojA@?rs)AE@m>dj^A!iTmE&0Z><;s5r4qcL0Bn-k^3rVM$zIaLBJ z;o@<3p?@tyZ(XcM$(H@Rxk{g50R5${U#SPu*YIAvWggOoc#nRR>(hs3kR`sjP33|P z{bIT5`{##B{t~O4J>Mut!HHg((58=MH)>Z(gT5Ze{AfR>rjR=Qm~7ft`fbwLDpFNV zgG%XfonN?Ltw+d%+rL}ecOTL6osIhL&M<j&*92+Zy;xlPm&)%)r^pI2Kptu^%VXfT zV}soKu%k&|03&{B+@StB)g<@L3XzlOu~y9FewyOf^Tr3slF>%lnj!L7$}st+boRyi z^_R#XX|{&Q`9Yzw3H<Yx4$hi7t86SoAA7<qk;j;Mj<#uDL5<#gvRZ@6TlH8?KxemD z#nNTx%#EQh9nMQ_5)U^r#?q*h!%pgLktg&9XSqHQ$DZ#pNHx1g8F|?s#^lLV_}?5d zUr%zkCX@LY&a8U*fY65)F1NHN$dxVGbb{o`)@tzGifqX%&5?b@+0s*zF4tF%l0)@r z;%4qR0uK{}{^uE65nR<aO^-#h=-Nh)!bx45=tI*GC&Ni&<eQW!GA@0Bd@w3r9>`Sn zX0+?Asa5zFPw4#)GRD#MCb5s7;mMU((AG4&7s~PGd>P*~N|xhwuWJtIE95KP$<Ev8 zF2(bIQV+Bj>BXI8`a*Y&?&|B({|u6gHWDGDOb!_r%3Xy1=pynX_s0zD)0`hRv;_w8 zV;{5+Yqw40e6vw5Glt6?O_00k;7S`zkX(9)#`KOu?~sqzC10kwr^$z{6QrayUfSKk za<HRUzX1z+kA3yC5jQw=D;Z=BS|3rZRng?##@6Ybt`6M@PZXUj@?fe(CTCb>QWj@U zj+y<>E;o*jk)>JD@_bsPR3(JVHOzSDkSn{5S?6zqS*~C{u?$C&_Z%%x4BFu>Z4w1m zw6E8vzjgJXzwFYRT3hu!a)Kh8kEykV9w7HFGKlu;w!RY@H&~*pz`Q4qbn4r9w&KxF zoEtF7Wq$S;Uo?J^XmThc=|c{ejUM<2kI1#~507vz6!yV$^f1GB_Gm+!hdVKtcOzP^ zVb{H-JyvqNBk6?*r^C}MTR0obWe^UKJ{yZu3el6y3y+Y9NUIDu&}YU(%T;j+;&G+Q z_wgyR!IdJP#->X=Uhw`%LOsI=)yO?{J2|%RF+&{+#&;LgrDy7pe#Kc@KVl_g${@!* z0o~UZpxex+EBTz2jQi?Sby`pej(?zBr*AFSvwn2z+BIaSu8ES`@11ht<_Iwzu#wdh z0{1HNgLP2fj_y|%xann)<oQK_H8KOg$*$;$?AFGFE}cE5OJk<P#Vu&p9ZT44mf>$W zGobg+23H&(Dy^xp@=7H6IADl{gLLTjMWe}ykb~^U%iF;GI`Cw}DJ<_A)+GGUAK>4* zoI9na)j)m_I{)r4+3tteCX?cl6mYe?D491SNG@C0qbru;msm>1=AuH)pIfTSrdMeD zM09UsdiCmzaJeff1%G&k{1KicKciu7_R(=m=HU%ZF1fwZDUKqiRDdHdIzo5W0XjtX zj+RY(CraV|NpknW(Q*r!nJbRk<ntoGzE#crf^M#4phy>x6P)X;)VD^R((n0xm(Qx# z8|K$(!@_bcTu`Zx&286==|gIt=+_gY`*djrzTKo+eT<B-1w8W>bBneI(B||-$ipq^ z5>tgv^TY&+IGimr_uJ*oy?xrc7Yyzoc)+nvJyA^mcGU<tYe1{qgL)P`ht=Dwj}E)_ z*`O93w6It6xqKAeqMdP#dTwH~rYCjky7+$eql?-S5sqFaT~gVfK7;G(CKLTPZ<qx7 zl^h`aB>0;K-3Ga(#U@WTI^-pIrUEo|H`nIKs|`7FpmmhI1h4Qu@4!w2xGx!f3!}Tx zMHlNcN&o6!$?MgX@{?Ye@|T{OQmDI<yEQJ^EW4A^$l;wLF??0<EceG4C5;{O*U);+ zHgPx6O>~63*9*I%<t+DTw0x80R%WifWI{gB5G@Cpv%hT_(l5}>C!ukDgjp*Cea^GJ zIdWP5Wa&f0Fk{FiNh5Z7AqXxp#6WM3YA$_7_i$dVXK#HYoE|EhU#mm>Iu*_A?J#8L zfH_?_oFmJI#>%n5aWZOfv^<U`Vgj0nqx~cLKtFuUfJvV8I^~6-EZHzJMSe2Q#``fv zo)6EE8Z;Kq#6aJ<y0tx?j>p84cvZ@^H?>bq={6aaahlhNkvU)@{h3xeUOakJN`*em zxxFE}6287k7n#`onRnj;vx*utO18%+!ElX7z_z=YD<^g)OLZHa2Jn0zah9(mhy7?{ zxLn%ApKtDicWBe)ZJk=!iT<85?rGlhpW*6#gPnSEs7Bv}pTCuPYJ$HOth0&y%vPO? z?(|#yE|;T+SwD=gjZVVn{KI5EgO3b0=_8&R{cE66uk-Zk`($zN81$iaVBQ<<Py_td zeQ<ks8SAvrSgjj^Pw6RoqTUK=)b$~7fc)-Hn#1HdJTw=F21{|+u(qH<d6hlzHZn6J znMvQXu``%!)WrF}S>U0_0l5lK$vGo&(ydwYwTzM)?v?5hr+ho&lKV$uWWlgqF6YdB z0UgHn8nX6^>=Jd*CLe9F%0E9^<>cCcUif{N`ZhLe=$<A`I6?knqhDvT^Jmj_^|#$6 z<3quzzzw=XN6UONN>{UY^@0C?lIqiYCiZLk+)m~oyc=hCXvVosdh?P7ePK5GO)_T> zC;D|PJmy>jzGSp9&-I`qYB$JB?tV43p|9wu(Xn9APq#PeAFaHPEd%5S2g$6qP?=6{ z_*H0sGc;6|aaWB`G{~RX2C1AFA}eRwrEqSne2Qk^!x<S;G==Q5N$hxe;qqvfRo-T2 z+LX|PH>?@{s!cDT6Jd@YuBlJ;dCtu<;2~$#hKa8#Qi{s>9l_f#D^#6(+^ccN$;3WB zs9zQO_4N{?B-c3QJ9nNG4$PF3hQ;)xoG+IqT___tOT;{JmQ0;8POhAqAzShj<oO9s z`DctxT1Oe=gA^kjuoh{9x7!?Hm-DTuvdxeqk-jtubRr;VApfnbO>ZcmC;33B{<x<| zSMM&<C-*jK&guF1xLNYZ@UOt9wgH@{odM#19v?Y9Zv8a4l5Y0nWTqa_b<um-2M_DE zM0Rm{7DnP~bfvRVkFdjhYlk1T)#;b;Knu}4bsLW8T_Z<z_Rw)n0>d^lS8VR+)(hak zu5E1BRdscGO>McJQ&+BMG@-*o=dp$NIV@l#gM#xXa)enH&op@1L_UxF#1ZXF9M+&D zWO4~cDM&C$H91r7ryAwfG@HDg5-H}yaJeuxOx8qLWpxPpmf;Zjs-JxGPMdtm4)h6F z)-QD<x)pwKS3TN2`1xiyfs=G(#5D)YpH1vVO-6}jM!(vfBJ(=N$O}E$VjUbMs6xo# zvCDJl?~~xH*Wvm8&gs>y{CXpzVq~*@9Nkz8<fhQGq{}i*wudCkQ>Gwx?0W6SN1YTn zrbfKKCEk-7?y1!QIKp*gr9U#5AuH&cy;|~Q3;C7n$py}`M#|Jst31iGcoWb6cYKf5 z*dbk>Fr;(H6r7zgtlmtU{FD_h<Faz3Zq!8CpO!DT!jB(>A6aS_x`JBuL3&QF_TyLg zp3nmNZa4RL>V)254PpN~*v>uP)}c?eRO#A=0&>>)Y{{a&t>&O!RadD;8tCt0r~421 z$rZh+@}wt6cKJrJZ^D0$m}Q0b>S4Mv?g8idkS>C2gSs_2D4@3(LS+{!lV0ZT|1smd z#H_b_C|36PTyl;tLVoA0I^?Y*gW#k-N;gQt-~q7xBXrT7)F%gPHHDnC>zRu-lK&D2 z#FGJ;O;5>KS#26kmSu*FSkTvpa>m$0C4h$Gl1QI!L#Ogz{HnY02~DDl@(g3Plxx1k z=|m|<?=sgIBj4a9ipG~V9e(kr;6XjD&w2>2?lpd&PJj<^p>J<%^6J^uaGWJxU3s`m zpV)@Cf5U)2_?uZS-4ri(Y)g~9d(*{Jlp(LTr7*+ceX+*KbMVl|BgiCnCQCvLJAuP4 z%g_NQrw(c4*nn=!50>X<T4e7$aJ+>Pa{K&9`DA*SEF5c=RVhJefd)0z)J=|Fn_k`1 zqTjjObwgu6JdsyzjXq6k8PW4w{W{c)ZKgRyyzU?wO^@B9UFh-2k+^SgNK1`mn@0BQ zf0G9E#?ga1d#cFIXISORMbUE4q9iF^m@GHWcS;1>)XOG~=$m7_`p&3M9b*27adzqV zHn(nspYaV<>4M&JJ(FGJjfQ6RRP$bzqsK1_=&IxJF9q<|#{wFA%%k5O>()b@<9And z=pvq%9CrK`PcXilFfvV@^e2sy6KP}Rg`9NB%ri^y_;xh=Wg0i;fWDdex1N{!x6X_| zpiPcy^^;j04<GQ1BuSDlQw%+s@@Pv8XQE&4DXrFo!U7#RQlzgRKBa4pH0nqJ=SeYq zAG-A0n_bL3Y0RxT^19~96~P&DgE>l`Vei~XZ)&97D9hpNQzD>cA}q3rT(&F0rYpiG z%RD@sw}(uZuHby$zdSi%NJ7ONB9UOgGts@3(Pi^hZ!tU&ynIJH_s4)PX!mPr2lGqM zkbVXRwsXisi(EH-Vr|-FYtwvm_V>lKkr9CY4SnC6Np;$l*oLmkr#B~{qeXLcHoL;5 z(OL3a<S0qw?ptHC(hn_o1y!emqhHEi@F@QATba8X-O+MMYqD%<&SYO4B~eZBGSn1- z{w_o&whroT?r!*iHod&7Nqt}})4hZGj6a}Dm<CFMf@K5e=|^~XZVI=_e7i%ohl5Rr zn`Cjg>Onk>6>tZmEK&5zCCX31X|mLqCdC3?5y+6YhT`RJIuKs;*wHxJWGgvgnRsF^ zU`I;C*ECyf;t7tB0Ql}ywB<FCMtRG@yTv@)5$n?>@yx(rTkj@`<Z@5l!d?DODt)2k zl7=S1)w!C;jcL_x`1@eI31uM``N9xK&ryo}%B;7oFG-rZ>B&GxP!3OY2AI}TcZ;s# z4!^9WTfMxqk2H;_r5TSad;N8-WAO8hmP9oCkM_ngJF_F<#f~28)Ma!Oy^D_ZDek5B zwMcJ3t2hV7;<%EBC&T&}c~j@8>h0hr2ZlXlKy>Iu+<~27^7jw5>Fw~?Px;&RFuz+& zaq{#~j^z0#$~AaIYlbI_XE;e7L8tffNC#(QmA0Zc^BPKYi?M<X?^e75UUmSqD^~al zbXVKa?WdSp^gT2rG3Zctkz)Lg6l!`<C7Fe_+8a_!XDeMG{Mnz#?E4@zM9${38fP)d z2KM_*GrSO-;Q#nc{z4a+U15}%0*kc#8zFJO#>nAs<Hh@Pl05Nuyqvc?Qc{kH*sA*V zN_x8<rN8f2=EDd0KFi4L7+_ybjiN^dUhew%5cvxnW9tNln5k}!oYkr_kLT-*PCb7% zI?BmDU7s_otCN`J>EycvZ`l9HzR&edl$-h|$i^<--Hv#1b~@P`(L2L2&O*=auOUCX z!6}Pc!(|p)!T<4$OK`Uuoedg}_Ha+$DXp7|erPToGYkCs@O=DA^AhEmIb&q+j45)% z<Y_W`>?FA}bCi6S93^+gSmasm<CAFNj^btV_6+NloRjnFeELR}SD!EAJTL0k<HtMI zP|&V_A0u<1z^k7Y`1$|9v5V?8qpDb?5q(g{ajo(e>&3=O{mI^>8S!0O2e%(S+N+z# zdUV1#v^!&4b;syh{Wr4=uV0O(CEz`A21y$nR*oe??v^MyjnjOGZ{oEkex_43T2M@1 z6W?oA!LT}xTjbpn2@+X4P7a<z0||D&vz<G&H%4Z#=iNh|>BID8mIuYlHne~3meKMe zUiQZ$PU|IS$uo4X&H{K@2L6x%#4tYGr}bnX?qg?q&1mK(j*%<4pPv8+*@PZ^Mc=R< z>GtV0T|V8}K`wt=JG)4;e%fBEA9hvin|-w!%O0{jFs!pUd*Z`Iu8Iavakc43NoY<| zTlL3O{2D2pYD*s0*Av6g9mSAu>y&xXr+MTsd7YpAUYnUt*ATf!ncIepatAZlyPe^( zyOlko$u8IMnOD}i<mS30d8<A}zHUsEMev)ClDGCG`joFbM(FiWeH<L*L-3j~zgd!* zAx;Ea#b6DUG2ziNDJovN_}O2=Z}xihSP6AxOLqjF!C~=oqs1;ugAI6neR}VRN5>8G z-1_h^4tg}0ey}e%yN-CG<r8lLUW+7odniuw;OL%5*O~~vv(Bt~8ywwRXnnq5)|wk< zB3q05IvF2P8hm}mh+aHuNY8*9c_gD-pGt$}O!n!wF4aT)`8T*<D!`$!b<5UapYBBi zwy>vK=eNVbG}q}od;*u&j_3>3=&(+ONE!amN2}4&)v%+~8RSsoh?-gh+${!qpV|Ai z0jJ!6*XV<h6e%%8$!ozuvMFRxkDEL6Jad%>Gh;7@|G(FS<`Zlw4E@{~-lH`}uP!wX zXi|`u_q$I|a8}*MO!d(~nTGb!Vb)!wt(_(MLT9Zuf|2L-a)+}=A0ZEWFC9tm=%99@ zi_d^ZeU5YC7J4B@%mX@PfgiPse8^q;b-0oKQ?ta{P4WrPOCI;fuXJ1Wz#rFhcim_( z$g4)9G~jzLHksrPbX+m~xj*>xSMaWen*2I@1pTcC!xNf|RTV+xeuv7)-e~!eKFKRL zxMcLtE;;gRoJ`srCtvMKlzWdP$YC<@m*D{`!6%d&5<=eci0+IW)U#vY+QG>`B_rWF z@SDofZvAG$fVNB-(JeDn6K2EL^Ob;p>z_#;eSA!V{x6M=pSV*xAB^WRb2CZ&19W`R zt&Da#!1J2LS#@TOOFpYgk`<MF?^8VMaE<95BA?>zxMsv4Yv|5!IgMgU<=KVDTs8^K z)$|~-&rzK`k2!swSFe~ep#PiEu0Kz1*89eyeImmkHn9Q!c02u{eLA1-djvgoQ770m zJZ4F4qIC29BFiFWLlHYop-t{Du*sfdoU?o#E8v|djF7#>QBqQAm7NVnIRM^r2G4jW zd#}On*Ppm=U*=hzH<ssqVz|uD4;4c`n#+lyvMSdp?}1S#B*lPJa?a56)oC;d(n_5J z#`GE--Mx)Ndhk?09h{xXoSji8{OGlU#CHO%PKil+D$MLqR(fyXwbAc<PIkx$JDZ2k ze+AFM1H4C{p>z2V4aECV%$8tXtE16&M>8`y!et#fPS@e@SQi#f&qs*l!#%x?&!pbp zp{G3cdR`A&-nKeTZ*I}_hEDynu1#Nr?>%1Mpj&vC+B@hjK(DvL@6~sMY;qyE?9r$k zaiIwtOv;nKv`n#P#><ARC|Q$bk=V@By2)WZ%=u+xN8S*fAm^hS+JIL~jEm&Qz!`FA zaH1siC&|rS7Kv*kXQ0_lcW{-?s%OWoDJ3ttSZ!!qSJc+&mbwPLrlCn+Z>A@#9sIJl zPxA+R@t4qJ6YSSl`1$jr2K4%vK3(S;)Dm{KH1^h=eD7!CV&%V1daLPy*g^L898)fy zTsjMe6C{Hf>mIZWr?vFYboc93<oVyqdwM%rI9*+h`b=+~&K)S##q3I-;mNoKO<We; zY`em$wJ*}GJD8zP;wPy_Lq8v`bY}+r9GMpRH!Dug%o-(uj4@(PBR?x?yaf1NZQ~5R zAUp?+!f5!tJQ+dHJV1ZQ4b72c?&9;V9M=4@Ud=9T*F|N08qD9Xst%Sn>g^KVV#gb7 zlZW{HA4RirnUCi@(5;`Lq0Kgt@5X$R85$uM;qyEc86!VNq1}l}kbn8#kAY8o6-GZ7 z&&rvcSC`Z6vUC`%%jeVo@D84h|Lab4{4==|w~^Iw7#^n3Z6~wUBCmmc9zfrHai>}0 z;C^r7j$4f%=@^`<)7YxZIIl+2t@Evwp2SeU4s+hj4h@xfcC-L_Rq1pDUmt?z30=l# zA>r(lVR90zafV??Hv_U3`{;t?eca7E9^yTn<D~jPK%_c|xeD)SnH4<*-H0i{Eg(hB zaG>q_DBSM)sviCPIKTG;t@`GUUY)iDOl8Y}rtR(3FHR0<IhusZjt>2Y^LQd2kSa&J zE<+zQH_9e&;4OGRCQ|N-rLQ^GAmQu?@1UuQ8qd6iwsYmwHvN5Cr*_g`^wl`OF3x~c z!#ngUS~n+i<=UYl`j<=SE^pTC?moSr+~PC%J&kjl=l~7FA9dQpHVTeoEZ*)sIo~@@ z(gKsDCpcG<ncc>q%Xysh;vIO#%P0AC>NMuA=^~d+waSB&9P&qAguI_^<(vzWyW{$` zG_pmnwpHn4XoORlr9bsH<2xGGkJ^p$3A^b=ygC^*oRyXAtfgHVN!I1Iq7t26T(9Fx zd>T_8CWX~0G6#;np>r%}SE`(8;QkJy_YofJr_@>vWLN7ud98Zh1TVazL2k<pk+ZUR zF2H);KvVT-RH!&ZBPG}rEQdzu%^R%KndBq>+}5kR8+@8^$|PDEBfUkVWX#Dil750N zi<5RS!a1(5=B{REu+#H&72N%WVDmX(7x`eL>n!l{Hahsgy?+d=*N?-|6LYu!!87}9 zgoDocNa+qYlRadl|DC&@y~=^scda^Qhd&*hd!mf)oh|D+7vLRVD0|&==|!9@YuwrB ztYgp}(23{q>!09*?-{!FT)fJEz~#Gn7Cdo5;9MqIfkte83O<Zv)wdGq=ZfcUk8RLl zN3(8<Xx2BvTJ&7_#1Bn_`n|y@sbK2WLwFCp6Q!$nvY5zi@Pkb}(dq!x3Xxp2LeDh} z;Ai)1d^39`bH-)ugL*$_%w+?;dNzAa>qwp6ZY)rXWsg1^R-nendd+h9^a}crdYHMs zh|Z7@2iZsHB=&>LhJe8|f~nld&s{teC4Vzp-34DX41e}emqTj69H+w-+=GYuiQXg` zN9V;<IHf22q2glKN-?6FH3!s(R<1rApKxTmUJs6FbCsz*u}JSqF3`f%LwY-1T~V1u z`q-#4{f0YxEqnC8aZUP4lv_)zXu5cBr}`{1y_fIb9uL1BD}R9NeNY=C$7@sM&-!c$ zYRZ)e_QLbsE_n<e&cYt}333ch(CPA&uU*%|ZM=pLa85{r-pbjr%r>CUfr&@LOKe16 za14F>F1q>l!UYWlH|yPa$MZ(OY}o;4(~nXD7hyQ9sikx8<KFqQwR@3#+PO#q@T-kv zY>aCg);rqT)ZczepFvA{Zf}*28)((b!ED~+_c0#~X}-853$4Xf!6IYm0Q@qfSRV-4 zuaAdpN1M1!tAh{d(V%MGgg(B@5Fy76=`xQzhe1OopF<*AjYuis?s0(gJIp8WO%~~W z))Io(sx{w6_G74OYM50H+0dEcorw>MlC{iy@8h>$U**^4<K$ZIt<+=xRA~KQyc65V zQ8*YRlS(Xdpe{l##n<}PP^2t2@vjW+qRXsVkAyd>JF1ahCHi<1s`PjEp)t%}SrZ5K zhbcy}O$(EtX;E_96o<@5GjVQqv=k<iX~Yb01vC9ovUKk8gHH`a;iXKHhv3&z8^{N) zC5w~u;f2aLnNblZFH||Ds@^8~?aUYWOs)vD=za?sov~n3=}qV(S~Y)CyRMnmMiv(S zx*2GUr{Wc!)TED(Yt{Z7_>1%)c^xwBUa--U@C3OoBwB8!Uva7@L{_nf*5Tppu4U%0 zG)QMjkUVhGD(4jPtfC8_c+yLD9<xxzkiJ=iHmb#|Zn!wBe?V_#);5I==<hMTnw#p; z)!C|nu}0Z9Ayk4mJ8$6U-a6JPcV|b*oYV+85^I%nnS(nyw<6)J&Ey*%<6V6mEyBlD zQ)GDw*?omGB&;Bpnb;*g1$O!J1ZQcfRUSJP2JaS)-qj`d45Y{%L)r3HAX`4bQ#aY* zkY@1AVV=*~_%_PXpE&Jgdq*GFlQA{;|GU+J_joos$6|Z1%pxDbLWW59NVKeB=lqfR z@$+8pO1RxBe0wcjefk|9vg>;KwS&y0R5B25!=sVR-t=!ET`msFkY;lt`5)nO23pqC z#8YTb4(cmuJM?hcHhm^-x5m&%u{N<$BjUVtZkogx6(&h`yA*&E-C?rG9YJK~z%5-l z+^Z(9N0;H(>tbj8h<9cadYS7QGUUm+iBelTN7CwMqVbv_*Ei;}GiJ*>?Wyu(PppJ^ z!)22{M4HfrU&0>uuO(Cx!dQ&KhV#MtmeGOtEjz-!5%{sfy7V&mcpE)5{haqO`#KG7 zH_1Pwj4b*i@A6sbJue%?+v)94pQk~Wc=45ZYqbW>Z5QWc8+ed4s8!SWcid_9>kPaw zkH9rt$PTz0tSdL(r&wC#M{p5MMo*X=Doc{^;>U+dc3iNObI!jQF{p2H#@tR0g$b1W zYB;^!{p1aR<<4vm5t|ziSxc;3)siS@w<M4a?-ai~T&B@0`Epm7<n)HfJhUt~4XWm_ zC%;Oj3=TlDsq8Y<NZtaw*E>d$)L_+J=z?c(E=)pqfZ|cFLF0V3x^-KC*>wn9gS?3= zJ!V-vV3b9D0sN|idN(+D4cf8uJFE4(j$;H3?9uzXj_4&lRr+k7TNlDPe!#3&3Mcsv zSlIykUJ*OQW^{dX+4rKsq?9a*3qx)47`VVs?2Xg#HGRR){HLW$ZQx+P2DRx(5HnD4 zJDDB*Y6)R4hOc=8jmU+3%|j2o-hy_{%B+P>?n!jBTO(TZH8|-r@L>+H3m2o$y`&2t zYPDC(&{v-JlBA=RpS2mS*XA(UkNz_1M3juJMqkOi+D;$#*Foqs;DzTzCd;49ru)fJ zx{8dTZ82TC)>*?IS)x-$9oM=sC-nNURqD!X(;ef7)j0ueLry%pY35P(mwvF?m>}L? z^o*YFE*)ua(CF3{-Nx+k1)8_~dWYOYrj-|7{_46}@<a1txwmVc+(9N^MIci)T4JRq z#xCjUcKHSG^8~oO<x^eq{0x^oIXy<M!WVu2Bz&IZ(I=vpAC0$VEL_(b`pd>L2OMYq z`UULn$^aTV4_X=YEcZ71^_E(*Jd9qVq0}LFmB4|b8^5!H-sw|xLDqEOg~OMFR`ZI^ zP92ADH`+(1BAGxv+~-k_(Xu*WytvYHWmOh=JUIzs&aufY%!Y%>JvuwCSC{b~9SP~v zJ<MEg-jUqiCUk7|dNI3NGg`+Nt3_U`43_cbL2_xCYI?bW+)Mh|tNA^%KmQDG(ZP(m z)x&*1+@==Z!zpG#Tf<x)hL4So5O)|l6n4V}JU@b7xF4)^bZD(U6IP+$v+G=qe%fs9 z(C^^oyJ!pgh&yzeH;UX&2U&mo-g}*Le_x!`pc{Jw+-L6~`T&2h+%gg_9~x5RZ_{|G zvrVISce>o<oFW5p<K_CqEZ$c-!c&~G8_(m0L^ySqPd{_|^e4`d0vmIA$gnOk&}YMQ z_oxr;uBTbQ=`YdHUbw5S{q)7`)AQXs^s{FAz#9%|P<;g+mL|Qs-mS0Gm+5Kg(-j^4 zdVQ~7gS-Zr2FCv?+NJI2X)8nOb+Yxix<mJ9Qp8@}5_L%X9L1U(-Kjer@EcJsnSe(7 z9xGltW`uR@Ovi^>^h!^e&hA6U(NnBv@P4M^8Cs9#(9j14kB;dA`1l9l!fk#q;Xt^I zNSu5Jz8^zh)cWwLvNkGTj4`=#zbj2Xz!UI5a=dH;S9LIhI+MKmenPt@g3o_RcF=*y z1|1jPu2aAp&){r1fhP1fU!-IVM9|x1m8y1X+|Zi-r)5~bL<`aa4*Oagy7vyeKIrbY z^e4!6@cbn{a$v})IE+v6;}QIu5+iFkyH28i|H^2QN5TJ(qE9G-Yn@?=pm&(;ePaY& zC83hbIk%cK?*RFzuQPLgNOwY9Uxp;~Cexvi3{Q|F)$BOK-RbfJ+NJI6^M)?&e(=vT z(0!eS{%Z%i*BH+FcZQAR+=bHW<B%u7ZEZmzvccG=Uk1170(hKj$f=38w4vqn=xe<1 zUG${}SrWx-ij()5w`Q2phjX?ySh+v&4m{4hxXNLWZ}44Q<Q&kv=pLOz9?)xWLH|XE zwGn<Tidn4Ks`@ei?D*ht`GR+^hPmo3v{S#-iR?MaUa-GICvEN1=QoUK_j<Gue_5n+ zSFqf0%p}R=p?J_&45Oi&4HkDfc;(v2fKpqc*T>?ib(&>^BSiiaGooHR+*2|dbVqiT zJ}|aKubWt@8z!MS%InlPvIQQ5Pu|0Se*oO?Jbp*#GzE*ZHb^c!#cOxUugT=|RpF!D zgMa(q(`QC|tJd~-G>Z4>-T)pRW0?Fm+$t}`2g#~TAKf!O+Lhm@kIiCU0{eP>9{!uz zejPu<EDz;J%A4b&r8?Uwv(qBw82?P4qfc)L?a&=Yx9;>ev%jK~Y4vDYZGg_pAbG8b zz2*3@K7MRS=NI(poD<#padD$QTvn!!Ru$^H`V+d%eM)caY2_^HB-#Enw_=p59acFN zkDehlpvj|p^o}faS!6%V0|Ppk7$kSZzy~phgqZQWF*|kol4NJUQ{us0t?aPfEkW`H zI)HZ?MzpfdC`*}tL+TUYEfQr@W1KvWKW+{_nDyWfUwLh^5{<!m+y$LxGkO}coSw7q z3$x4HVAh-9K(j+#5-_KbADS+Ah2)6SG==`Vd1R2BAy*rw$w!9MdKxr~=tG}@SO1** z{PZ*aypQx1xbhA#i95)BI+r{9N;t+lg8MZe>@Y60mz)i_UgjGw{P9f=Fbs!LUIv#x zjd7VA@p54VUP*kqA2a_?xAc-n(xx_TLYv&E7yI1WOm4#QUUFeMH*7tP`Wk+dhr4R^ zZ?cv)p*<}GE3WJ;*0iodt!D;U+*6>-@ulRUKl;~qO8<fzYc$~9ARF~}E8Gs+zxTtl zCB!~jO2fy<XJMnnK}T#uNVd!k273s~CIt^oe;|pR$#^-%O!>%wq6;6;^zL4;y&m0# z{_{w?TQBLvzm1=NnFkM+-$QRsx6Y);=6hzi*_=avNANyJ`ScRF#!JwTFC_13DR=6} z%-AjX2)=hk$_w}l9>#n0008uV$edZqT=*9A=L&KRuGI+nafms=V--)IMMC&I2fFc3 zv$LMwC-cz*P4a+u!=)Z2YoY*e%^}X*^=P!Fff*bmvnqfV9+poV*a>H{)2=lJiHWoE zhG1rK@X+VTpZr(MvYtt=a|G--08j59)GLMt^(tnl@IiEx%yN93n%rZM$GVJC4#xaA z`}zL1F22BY*c+$QFMlsHd3leS&PMVi24dt-G;hiL_lFIOY!AR|Nu@3_p3n*Gj&s=i ziupY~!0!41XHywxR5dvMe7c86gK^w~Z~boaXjX^uY;k@}a@yqA*hs0td$G_JE}xP~ za!X9Cd`(8lFU-@|avndz8JvSp=}GjVKL$lgB4@QBBv>9GGpQB7K+%Xv5_^K^Nfg;g z&cOWrMw$N?@6%64+4Q5x1snXDx{aK%173Zx#IGNtX*dFBH<|N35bBhx?1^+3;ERTT zoE433ggr4OCQ9B;vdM`o=FGf+ZbYZK0PayHx0A8gpwEN%k9PLq+w$ov_)&i74wet$ z#C_n?<7&X{*w-E*OE9CUi=I+^{AB%o($&HK-3A8Z)~^k2eU<*}iz0k_7o2A`83)(r zB}#VwXc?I?Nv@ikFN@BYED7_#aAxI-Wm<x4od}Mb>(!)DZTd}uTOSAG?ts_57*1d% zT=QZ#em(H77s`yXgzTz!@OO_caLP`6#yMd5o)aSP@$+Yv`}LhFbi4I*Tcbq|>l3+# z&oh+W{C~DMNkbd(MZ!dhPMa!kj>?yN(fJgkQ_Ka=ZiGXBGQL;OaiH;GHm)Y8sFG(Z z-78{Zk9rK9=*l+yW-ZOSt`ToOo|LS*Ms2BW(_8U&Zf7R>vWfGT9*#r!V7=r<Rf1?H zgJ)&n`6>Wk*&5TJ=ioKj5?#d(RjWUeThtlq)4C9TR&a>qkzmOT(DCQ@)7#XciM{Pw z#60fn8o{?l4-ucm^ggT1^WszRhs(GT=2`ApGrqVVcvq6pyG$n|?tQ#)kD`g4;;6^l zQbk{CwSJt`q{+$n*^|2Tcmh}q#N_kNB(mL7<Rz0!KH=Y!g5I!qz#`wGWx5z_;7Yi& z=60(T&>?pNSkFIr1TSizC>N9Ix2I#WIKaiqnGx2|YrfkTj23lBZ)0bU<7X}gukK^U zdo7I4a?WoT^XGBy{Abzm*7JOH;@8>3&wLJi&9&gfzYh(O)yK{U@BSGWcnk0CcO7_Q z+d||gW}sNNNBiLs5<0;v@f*$Nxwy+`=FADFbI(aWZh~AEnJ%BiWJybWCfPHinLYF5 zP->2BO~sqZ9O?!uam6!ZaId#8SC}J$<xMoRJ*E-e%g%NAh+mg-E>0Wl)BDJx+ub*y z-}MdYWoT1>?hln;@T$Ezkbq{@Av4&KFM#8H74P+n(xnf8ThxQ)>|^IT%GXS^1X0|b zQ^2@8_<U`q9$iVdRkxu+U(-@uIZO{G-R>WH8?|PDuHpW2?dl=dq`O=<be8LCG7c`m z%MwDq%TzM;7P)J6Iv&99&{|%=F8LrHu`Dv?Dh4{#$$qW;{*%##3EI(MHq*P5ECPH+ z8F(+#$*ElvRG}}i-<;OdJZbLMPt15~;b`4vun=p6#9Dcd$QHcF;?udIje5dP4t`{n z#zY?19ry+NqfY3vXcEtbgBlF;=)%x`@G#CkGk=BWo@la3mB}h!qlMjT#<R;zHkEnm z2K3U~EM~bCj4hv;U}-(r6z}gty9_d8LqP9d=h5k(cj$s|TeW9nyE^IbyR&3O8C^8W zIIQ=<aV5Bhv;%Kr8Xk!WNq7*!1LET%Wqf>+T%DFIV{%gD!Q51G0<*~E8!NYr%NI}9 zJXw>lRBo~_llg}E@b(ks!{%h!QB7V<`Jnz$(xSa34SHWyiym$0(09OaUv7_-HE677 z`jTY{ck1Wl$Daikp352jpG>lRCiLs_8QuEWe7sppf@JL3QS#f;47qyo1X($6noOEL zRVI$lmo=GFWi?p}uQ_JY6*ohgNAlq~N6Tz{GAYbH#!}UF$GSB2V69%euUL=lJ*ijh zFV>R7WqR+)I=!T-9c;Nvon)MB;T}hTq&+-iOGC&qv*9HsH)xzobsXNQ_{?EFkTay8 z<dTU$wo8A`8PuUPt88{fNP47ACi5I3dD6vjN)6;ZHZ%`wVm-Wkb&yP`vdGWulEfbB zZ+I^^!MRMTacd!bTuoDn-iv-?-#~?C;|ux3G^}rd&72t>&m52;VTq$;YC?*vii?wP z@WPI<qfIkM%NAyUWj?!<@xI&){`Deva5UY%9^UKSa8Vn$qvObqyE%Z?ldlta4)=lm zUWhN`MYINE;MwzxKK&Q~X+M|v#q6g4#ZP`q<bJv*cj`Jaic4K(IsrY!Ht?a>ooHGk zdGEkOb_Dn8Y?AGMMW;|oF46Cu-TDZ6%yH<IJ2^w1hr_v)ood->jUPMXG5jl~@QiEF zB7Mg!Xd-!M5qhN#&VrrH9i7Y_tKbA$`MtMds2@Cyb+IS^3|5j#4)33aFxd>=cLEHr z%LDS(7cW2cgp=iIl<U!7xX`ry(&ppKt8LsJr|_5iI@|ED4d_c~1m5;q#N)@SWQdV@ z;1@TskDl*LkoI_&e3cR{U!te~1D(Xv8Dy~Yzk8Bh@^1Vn8FA)-vt-EQVJ>>;V`Vin z#I5X(x8T)F^3mhu4V6FG)34^QYuW2cd~|YfuGJ4W;6W<K<AYwGDJzk?`W4<W2?>>J z$ht|kIR3u}A`ohkt?1eY!W|MF?viZYfy~fY*=mWD%bD{M746569p8YJ*$F&>`$EW^ zD1k@(fb;r8G8mfh4@WUK+})yjKfCL)W{+Og)JYycc{8oGy1T7h<CujDx=ZxRe)v{z zo7RJ$<?^hiD!wVSDx-s3vH<;VFWS@GU~+f(-d%hyE<9@n?vEm7?+o<x?=ioZft6j% z4p|Ehz04Xd7Pzc;;VIL@Eb?WzL4Jl4IvC!gZ-%)!znZk!j+Q^NPD8<du7FG5L;lBM z=aAkB?r3(H<Ssl(%gN9@8{P25=!c&VPL!JrPT4dRDk0qOXE%k)UFBqLA2!IR|A<8X zN)GwgX!5_Z%YtvCB=mPQ(A%AItT0?mXmXxszgz*wmV-B>W)x@Q=ppUQ?a_Nicj$~! zbj+iP8Jmuu81K$8Fs#q``ybN=bw(<lBQk#9!9(z_0WCaQo=eCw__GE)6F#ougk9W) za8m4c*O!xvflqsXONTbm|5|}Q@4*o6rKljuO0vpl*%o<ovR|jnYtsI+N_54!Csi&i z)5k8V)>RkOY53U<I=H~CPt0gk!}tbWlY#ymFW_jj!1=}@9nW(#3LnbdWMVZ`kh5C2 zP?jHDB(ru;lX*MR<dYqC>Dg_PiHFSOTi{ithjbA-wfTLg{b^Q7N7J|i4fe?>zkU|u z)swDaHRE|(nLeT`Imcej!v6**`A8<e|8%2Vo=E-+yY~(&nO$fi7vXE`ZRay-1iJu( z+*eNiYYDyc#R0XKqDMqi`%q=SM%JjVY&6O@%woGZf1Vo@bYubj!$L+{WT&1Ni#IX} zZFM^Suu-c2WY}aI{@6bgvZc&1UYyqP@&X#^>&UjA)s4pzKi1O5fX-<c)^8g)GwKKM z%X{@HvK-o4`t@@>evg0=?S+FniN5uDxUVP8#ac;r`?uVq-Ht|`AKQb^5B(@QdvBsm zeo1ohSFp8&Ncq-f6?1F|+2`;_=+jRyJ0ba`-va*yyt(7F-mKlL$6Neb&<IA{XqJW+ zhuqB0oXV_p2;F-DI_J$=tse%L>s#h(eHM)OzR)&$t~me5!2B(o9hW(DfsN<RJgk1+ zp>vqOg23w^9~@LGc=;xBaxQ5LlIxoBFEv=DwLV;)Xo!_cKJUurEIH)PkncO=>9_-< zLMPxI43a5e)>osK^rI{Lh+Kvlb}(ahjZ5H^r{jfkr&Z}68F))G@O!3}lc&_AXW(Ns zlB3aXXXdopBnO^hJ=*q%{SJvAjFm4vXxqq7|B0N49bj$C$;tdLy4dX_Xkr9h9e&u1 z?%)z@x|D{cOAtHGQZS0=>AkCEw%!}PPv=Mf3zxQ2e~UP*y<tW4E!OG#ybCX*J9r=8 z&2?yPf9C8u++~n!(7+;dP%nDVRrNt&%;<7zZE|moU2eg5v$Qr^Hj^=RH921so0!jA zjI!N5tO@A<UP71nBbe>8o>Mw&s8TZnbYOu8+)Vaq30%SV%tkpTvRH#-;15!z)R-id zXc0>du~Ng=PR_Up&bBC1CO^}7$uZ|kgLyK!&J$%ST16MV7v10>+u1Wq&2`#q;oP** z@nI{|6=1kN&ayM{CQf2+-@#W~6e4PT#owX-EF&}LbDq8L&;f6b9MF|f=(X@ZyoBen z5B<iMmLzf@ljJG5(!=Cz9K^eEve<<WFG1ekh{j=Egv5LhCdb~h$i7d}K7Oxy$L4PR z>lnLB8~O<L;#7QaGcv05=ImCD8tqYkmQl`14V9!ga_*vsbrhLZ(-P{?3RUaNX?6NR zMvERGD<&hgU%O%lH6wIHyWs7jdu>wD93m-b3D%dI#Z(+FHDK<OIp=OA3;4FaQSu6! znnv3s`8bZ=o{S8+C^u0SPl}ZT)1xGLo>`_Y8rJ*I@@mx50o}F4r|pYHK0d=BcTW$N z{b=RSN`tSA4wt2taPCXH1P@qc4g$k{yw}60eA-ktLSHC&|53~yheG9|gGNa?Jfim= z^XtZw!@9jPNT$JS{?<!(0ngAfG%s(`Q8JD^m|C#j_fnGNyObD-PKl6j!My)S0<XZw z6o_?eCHj<Ubnaz^w&+q*jouch)zACgx}x2qAv|}5RW`Y##4P3HUTnv|6nnB?$CrBk zUvv8~T7!4n$zWsF{||iGQ_MMa%sT_84+(zH7qidrNVUrP^l;gn5g~77SmbXsbYtSZ zdM)17P3CrejJe1OM=+K-<my`0!U~(5Qx-4hmW-B5i^;$*%@arUD4Eslkgq$z_6PdO zbFbItpmKFuO7(uYf;8s;oiXGt#FO8~&-ZA0v~0^n7m#H~+iaAd(9v|_&ln3P_<@sr z_wW?Sw&ckZK~v@O;py^;XS#gRJ6^K86Qman{touJPss3_04B4cy-}Y<mvx-|r-zKL zZEzu5@R4j~7U+V5TMK{n0l2Xh%y)oyc{V+UO(9L%z;5&1NQ3S|>lVfi+072Q2Tgq$ zT;{^=6p8B^EsM#P$#2V&M0{A!y94S52RhNw1~%8BH}v;t0i07B*%N0P65!*>skfxd zx8(nwi}t=c(ja!Qu+N?0QqP%{5@(Rl<2XauA(NdVPVUws&g^dZxy9^2|8N%G5%BA3 ze~%u-KlsWJ{GK1(GUtMWy>AmPn%jaZwI;Ym?fC9vL&;4-b9@fp=Y!}Vxd#mStGGUW zIIc%4V*7MDGp+&b`F=3Dx0zv<+xm5ONHa5PmG%yo>y=(~@aSTlWPsk?f_?xTLgDWc zs;n{_u74VRXw%9w<<kmy-cxu0>oVjzIPcHhBL8-Jb#1R#7km138FRT4PGcV&!n4B} z(gvP*1^EEq^V}R7Db<64eY!lbT|L8lG>p8J_xRZ+`G&P|&?s}6iI%c^-h%#jC0OgF zV6F$aum3fM(rYMk2U=<qd;fo#!zv>2B|6|?W5`L5&yXqjWN%AKked@@<Qew!=p<%8 zG~jEQI}Vcfb#XMjCfZIT8BA$p+{{9w`i0dXv%tq5WY4aH_iqTY$~XA<bB7&ro<9nl zH%y*}e=UPUDQd$<i9WieC`}^wr%K5`@zS|IQXX7umLEP1k}ubS^>6TK*6sl<JTase z?tw4Jg8kh^_J5j1=BF8DOu9kZna$QE+2u;G;QeTpLecfV;#6|Vg5{Su_#p1|#mQ(d z5-su|*x%FmsonwC+r)iVjdthK<_P(wj`;-~>#T-w@{J;77g_hOfV=cEuQt)w`V$z% zy*c>h^Q`jcM7#&n=t7)>eqcer4lZifR~I$wmIbYPAD+$6ruOOxJ6}0jOm~v^?Fs2( zr$WO+7u)0AcsSt}N|*yn8u8`U59zPfs!vy%rKv1JD6WtXOVB~UCze)qYhQgmIkHuH zxDSkAxKziYfj$yeru!Wgx}AK28(bdtE|Xjx6Cn>d>}ZyP<W=_nY_O&<vbILZD?Nt{ z+*&d!^ZC86?~0Ir-Q*DCHUCdNoj5g7vJ$Pu610v#)%kQyGfp;qi`&T(ZX|=wdRng- z>;d!h=q#S^<>bq|>}}d-Cr2ZqMz=<uQY-h^9S*n70UNy0&YZ^_lVdW=6rQ=?;i22f z8?ZLSFc(J2=&CTOstS_oTC(EcTK*vKVPLRItKsX%qYqnzUZW9>;Hua}c_=<j7A2<8 zH;H~X3A}_eyBeOSD4|m;T%3WiWQRms<S;&R7du5vNW5HRprdR!7ao*3aUe@p_9e(C z@T7irzt4M^-+Dw|V)uQm&&*k5ksR~@M&_7}yeH3+kMk3`N9S<&Uk(3Oj%MQpdJ*H% zon?U+t_s*?KJU^;XtERO;7sSAdmVVE+2hl92L?0&zhNx6&kQ(*7_j^ta3EWEtEQ82 z`Ep;2-U)YonXdyqE6)V{&6nVD7s78kz@}{Y^eV_s4>y(TV|dVCMxT`nAGeot_2E#X z%w*qrh?#69ex}v%Q0I{=6%snA-|+6nqdA9^kSFm1-oV`TQs@MED}1J$idY~|I2Oop z=L~Vj<dE$gEw^(no+3M86nxzeQC|H%f*zJ|x(C8?<Qp`)%b9C>=zpG$*6P!M6Cb-# z9zw733uo~QaEgVUV7Fv+twVcg#Fs=6lDe9j^-gqmuQo=>@<z_4#x(jR@eH<Ppka-Z z-R&0kZn9p`EMCGsxgJdI8h#hK-aajabBF<>TnDci)R!x_(aH0DPl`N74&%k#<#m1V z-gJUp#Xs|jr%_YkqJKb(mWW6DWw@9T@WCh0)s^ArKIy2`v&l$}jxW<xvejQrXw<jy zp@k+5X!L16ZM=!>apvO0)1KNPy_6h+FXB4Y&CW3^woB)r88X3tUx41x2)C8UZqtKy z=Vi28P3%a6c;eq1>QUPuxnTWu8qa6_GxvV-P`A1QUHTe#@-%-r-IJxvn054^_3Nws zCaGfI9;viT?(rC@-kBgRzeUOi>qMUXQe^cvX7T=NlW(?$N*sM$-`A2INTyn)%_YO& z4Ob*2lD85sAEw30xHOks0cRZ^A1iOc_w=Iix-ro#N4WE^cJ*iw84Fi9nd2i1(FC7F zt5U{&(5!p;{Bn8LO?1E9-2*n%mnfD&oBYkpz6w41IG&|;M?f#<_fpG#moW}JINv32 z%^W43dE;g6qN(!infbDAVXo|-ok3ohOB}iQ{!_v^bHb#YyY=-Ui)`e*`V<_?h)3@Y zJRtMvj96JsK3a8^rqtAH99b2cPm$wBUexYJa@*a_dLDS`&3%1jWU@aQ0vc+?TR}$B zQM4~J`CR_MQ`nBqdw)EgdgS-5rQ0IUo+aZg8FagY?U0@KlsiOB<ex1lZ_uYtRB7(f zS{-+|LvJ}csJ=q9-KFr^r^ujeBJ%)z>4(7%eT^LE5IQK%w$Zy}uUAi0m$t)W`(x2j z$Kk8TSFkj(Qx_)n=ue45T1jM_H#S(Na^5Vm+vsbvNj;4b!SFCE`MIt9H~h_BGK1MI z4jtjtlfiN`-+MmVI^na=!CU+Uoe^V<&6>*&FqQp1d19O9&LFdCR+Anj+jeleTMtYc z)Rm{R*wQ2AGI)UV95$H<MnB0+20SArt(Ed98jx{#d)D`jk<r~V=rBK9dYUhi@WwM` ze*Hu_lPvbkI((4zbSX9U=y~AtyWrX4dchREcA3e0J=qX1eP}6Tz^K-O{r`y{^%4C1 z!?qetv{vW^AvJo`(5@BmcSYcn-fqrIH1KD)+N8OebB{eM$~^>Dgr>Ixy%lHOw%%s# z>qm3rY14DKJKl!(%L@d{MS@lf{oNdJv{U31T^x}pB@Tz!(SXk*7x9E^Kp%3o=xkSw znqAd8ljr#VSUT&#D6i-1&u+5OjeCdy!9tM+_ux<p!L?|y0)^t*LMaq26nCe%Q)q!w z9Ev-HxDj_xHoJS@&whXJA5Rm~$nNvpJ9p-sGiUxoV;II6{@ESnIldO5ZZ<N^wUYgr zt1dWYs3T}HKRafs?;Q)&Z3m+Yq)$+f{;D_E*IcFWbj|3u$Rii&3UAkuIGfD+T8Vb9 zE;Y?+xTi!o#b4+>N-L@+U!bLElUGOP<<yezsHG>MMf(RFsV>}j|1=}Dy-AJyOdgn` zlR=;H^+@%WvE*uHtf{Gl!A!8k+GvcwF3whqOW~W~=r32A@eV`R!I{y&%0Zri(L}<5 zI>8An=Kr67Ur=bd)8OWYNr~#GLtAFgOe8eeHsqTRy_5=JEgHes=Yq2jrEcHqqnE4T z5zD;ch`ke3h39*8k5Ou-dy*OpUKT_?7KEqxeEbO_T=LXWc;gT>WdFfsIdd)-!Xb>u zYpXYy@m_iX(zNJN;HiVPVKP?JSh@+lhHzKkn7}NJdifc>^D=ykI&s!TR@lhBa%*V| zhx-xzTo(OyN8mu)X4=WA7)SZ=QYVH7W|e*oEbkO^$_}8<Jdmy2PU0E-7rnCofuF{N zN<e87>E+r~VnZ6sj)t|QWfM;sPS1D`w6yMc<oMxN@*RCnx8XC&=#gE*8P^P~ydhdU zUwD!6U<GC9R>tG|(TX`|tH`xWD`V6}?&qm8w4Z35`@v%?w2mX0_2h$oe3ENAzA)&v zLb6m?W9ph#rD}hN3N^SZy<R=5)TCYp^|FUq9bln&x3HDlq42!K!w-4`{+Ly&nD^Nl ztZ-K{d^EjMt&+UuAiW_Q(`?ZJ>7;^Qs-Kukva%E(8vKLJ6|7k!ShdPmowR8x%L+XM zyzQTGFX8ZRS2<%Iz`@LSfP>@wZp{Ddg1);UXIl<>?O)(D@1~<AO)OO(!Oy0@HLEi( z$=_f2%E}kj#qCv)#J%;Fi&5zGlilP#Icp^z!|TjS1yGM|#Lum>H{P{=_@Qw|><vUO z8YFTeh%*yUi3Xg5_T-H_sh>RH+Vl=qvXOcq5ZuWYp5M=4nQv36ekpU5FVWvVEoLrH zQA_Ds&`y5HZ7do*VD#umoD1@llqRDQNLS-*t5jb&>`^sq$xQlIuYTE7HZ^N3<6G2} z3r+Bws_!gYt22j!^?V<H;N55;^YL>XSyreFg~h5_o>DJ~qc@3_73{l1pGE#j#v%%x zPPJqkdI!PFQ>>(Onnt4Wva&8<t__^)m*`S1!ubUXJ!xoDc3ElUU+YqJ9#4oU2kKY6 z+^;(nQ=e6;*7Swf084KU)^pwHC)>#L>!Fc<i*_pm@51%eXvIm1sxm1`4fq_bK4rwH zhH!o@ig_V;8%+QMx3$uO1zCv`&vF94^8wi1H!jS+0l&QFR-}4(6swuk;>pyD!+h|f z!`Gvf^ZC7Bn#%A?P*43ns5HM9Y6iaD1AXqRmmW{mW0xr9iaw|ZF<=uKt^HMgGP2T# z`C#C(;L0Ht`Ra95Dm6FyLo~U+(EqreecY4hwhrB3ch=A-{2mgtN=>8A9Yu`$f!ysX zy89UL`(fyMn{zcR&!q1NzuS@`)d>D-SV6fm;$zU1Ghz_$za@Caw3K3Hn_Q$`B)~+( zm#8&~_z|WsuO}5h_%vozWSdocc=r@IhPhR~Vh<jhW>rsqw5x-6Xt4A|1GAiuEA&1R z0iJb{zPq0tm{UTI9;SB@4P2FhGiSMji+qh1A|1_8p@X+HVb;V+o=*Y3NXOvPzI8Au zORw!td~sf*5opZ!hT-w;PYyiK#ap8Bgd5}PDEq+8oWWZxTJNWN`t!)!&f$m9j(Q;9 zx{frpZX&a++MwrXjVD_}KKjWcjjdcDZSDj{`a?yPs*PuwmRxi_{$leBD>?7-RXX|I zZtmS|@`VfJ_MXg_iAuxQJ2p+-dr_?XZkd%_wv&=mj<V?l9;RqN3a)8n$TQ9tiw2Y$ zqYoPGhyZWNMPIt5zPqdog)^^XQh%V&T8h_W5#B24#J4~^%?g;GnnSJl%qD}}KShaM zyn3sPRI@a1)g9wob&VLe3_r=1;6I;<5nf=t{pi292BSR)c5e@UcG_Rh{-bX))Jb}T zIZ3Zp%=2q+Bg;F9lyyPg+*PSzT}&#v9lDAz{I%&Bd<*a1nm!-eR>eSEx63Y756S60 z)8f@MuHhNXdZ1?gl0CW(%CmbVK7mFLIco}%`)2%=@u2YH-1t|}*n{P#q4R#l^qWq2 z4ZI|Fb~d_5QALQ%CGKx4Y$-OmEyXpnm3%`#`1zC?@(LWWCOxP7Vk~tpJ$Ik*wEUE% ze*N@W1;ym3aR~(~=`;HaFN!+!&_73uu>mgou2ZpE?wLU>1200eYY40$wrRmBoMkzA zb3dP2^4`5J>m@|&(I7mdC$1?v#Om5Ag=-CSzOvM8GjnLzQ%C70->hN2jy6ffYNO~a zc&S>@TQJR*J}b1h#l)1!XaEbW+~gHLgC$zdJZlH^KyJ)H@Rb3s%!VOPne8sp)1#Cb zY+!p%naTt%{2p$<tx8l)D>?6r^2o)gqqCUjlbNR$WTvQDS<$LSZlqdU@K(8%JXbR- zo~!(-*Z5m~P~DA*%8}SQ0I#bq^bIC}qm3Yk_#G_mHqYOSoT4#D-5X}!G$G&EQ>Bw| z>ev}3e_3U!E%nS_$~ESrjls8}T}4B=2-j^Wt}Z?3Q@V`)>mWM7jr3{NA;(kY+;{#) z5q%2FsjIqx|NpM{l2rEEB6qwPJ(#0HK4xG(MOSjOmGHZ*J*aQooFpFY)H<-ED*7IC zU3{e`_v9A*<SqJ7KA~gr#*erT_i6}ud0Wnz?L330=z+uGIC{}rvVvT35W3}NXe|e# zd;OW2Wlg~yR^SKWgZ}#t{`L_L;B@#iUPRk)5}qU;-m8$l@7A1G!Q@c7icIwdxNQi0 zPYrrI3g|C5mT52N@uaGstd}Bqb(aLAdK6!*?#Ab<YYEJ3Li6ZFp4XE;giCn;%tM<B zw7|0}QeWb05vM6chi6a`?9r+4Gy(VvexlD}BE0r0u$IqovDU<;U65rb@hR?(R?HgQ z$fEyQ!gGi>xq*MVG1=W)J~993ftHzU@C_rFZM>4))S5W=1svWy@MkaZlPdQNHO(uX zS>M@eFj(V#^tA>zD`K3jyaCUy<LJja4v`JS+X_vH91(AMgVs3(jY%av=F8xuoJyz> zikKT_nPpJyCQq4{*Uw-pv+!3-ruX<X{8CTu-#Rdz<HVZQwlOM}-r7IyUMhp`iTaIR z+cOHi3*7tT0xKDjsFiPCm8o|3@|6x9NZ83N)o4F`ntSnkJEqjstB&&iAw2n~06APx zPg*#BDG!3akQ?=aq^bcvXN{><8U@P3dV#Vhn3*Adfs*a*CH1}S<PUsP{5dbXQGYFA zhIAK)6!6z%bsxWuKImi*mglIZ<Ojjj6UVFa)n;>nnoG}qgiWp*1!ue%Zg>NnReR#; z`%r6Xh?ljlt&0rmXeUd%;4#(>jsU;f+u<3iRZH~g4RTc*xLX%^uuW*2KjM!NPQO=V zngjlRIypoA-H!gNNBp~bwoX>Dj-KNYf1I;_6?OhJ^zeRWVjLRBsTx;e3I30ox>9To zmCIEj_@@WTE;RWrxi(@-H>eWM(uwrLjzODuEP=k$c=F~r>V-JG<KwL5M|2)Zu?{jK z&PF`B&za;r%g{o+D?nREuisYi^)q<a7`&|HEBb7ls0+ht(Wh98MuHHd+8B&Zts1_U zKKS6kl`FKOchN&EMB7~-jovKu9v#Z)zd(=Pj@~mX^7l#9+8^<a=*;&#wJA{(>`T-P zu%zeUx8AJhMf4@CbgU^FW+dg?){#BT;d+BUy#bmjJ$Y0oJsK3}1XbTHO|@ao-gm+? z#x_cA&^%N5h9}H;eyb+u#i++wQR;r?do?fXqe{<4LzNo~-j{;EYpyzq-efra7zVU* z!@!4g@B!I~K76>?NMmYTBe`=kFojv<b`Q|2e2HGw9bLT*8uyxLIG*HN%X_qDpNU-! z$d4XY(zg#Mo6fWOhxp~J%~ON8=4(pTc&SwJ%D|ekxCL7Ly4+<x`0p?@3)jIv_E1lZ zL(}L+Z4^cyPOdEhm43~&Xs*oga31y{($St?3b5ds<XgeuO=kKr52EGsf#cf=|9=WR zbfZhLnhRGT^f^Dl6LlMX|L2_?Wj|VnX7~@fq5a%U+*=5y+6sM50$Re(RT>$@-0ubC zqD#!RK<4YoJj=W-dKbP$%P|7&$P=Tryrl2jvyzF9Xkw<67cwU$7mvz3X2F#y=sM+v zrq`)RFHONYyRc^~;14qJZ_30!;1)iB@AH$<JSV9fFu45E4D|(i=%Mg3zZ36cOyn%e zR>qPy+JklO;w^O7R;oa}{q}QhWu4T+Z|f`kK2mr-lla~?ysp8->c`Z!8AeZuGP$EY z!2_Oqdmhb9fBI!F6X$xP|C`SBLFXm$=syzBA$>>x%_#dodYXM@v>s1IJvtro!kPG_ zKL?8(%QalDml=*WXhoRk!#$sDr;%<pTA4(y^Dk#_0k72x|CI>1zQ56rcVm8NI{T#` z>!~m6$qP@eFVM~$Bk!!B2XU~QK{azNQ(^jI6-eCc&$?)j&ip34+ZyI<n)8cPe6~UL zqi5KVXeZ&|@SUF0&wA5GOc(v7$!RZHd0a0pC#<E{1+&VyU9S8-FrNnf(hM=E>E8J0 zQQw?_@6@$tmP1>;ylg>lSR;CCLd>d?|KA?HOC6oFY!O#k%l&$dzNiiJKxV>sCxAoS z;xpx0tQ9@|<&T(cnZ@({5B%jVy6RZ441*iK{a}9iXd)Wa$FnO;D}!1x6Q><DV<$9C z-Idx+4I9?otlD%2n`r~e+_+G^fYaUMfyaXt@f9zLlj()(pE#q+`KXos@9o4Fyy{&n z9?G8$DiO}J9zAas+&`OhFA!`c0(?;KWM-B&{vGz8RWSOAoAkrqQgP}!HA!1?()7YS zb()_YnZbNCa<ylPX{t#=wCbDiRxL<)r)nogs-sD9s!mF>`uB6X(xm69ztJcU&0!7* zI$8sI&MuXfxupht*+jmvWganW;1r%am%!ZSgM|$8Ms7zObc4fbj%WFAPI%+lGgp$n z85^_%d+=FFuPRcb@YL(i@0tb9;)_?q<tn4PLCzS4e}>t{LB7yid<Jc0GWkpsFE0sY z=HVUp+A_qsj?`kWH$hKy1b_8U?9GZw`eB%D^)+Ybx9p9x@EVioOIk?Z*4NH>*6<oe zfz|5CEr;O+=t-ZAiFh;%U;6k$XRvI%p^05%=}(F-bC<cyW;j{pDJCPF1-zysx$$_s zp)Gw&t;)3YRg3IK_x>I)@Kbp%_^skqo@a*-v5kBz&`59k*yeK1C&LLI#xr#ax}zr6 zct_hrt9#^{|JY@zK4{+mvnf-5bIxy}9y}}fsnGk=*<>TRyrSKiN0=wr{4`#y*F z+^GGeK3T`{bDvd!9rK0h0S}@td;~SsGw^{s_?n+{)5&yqJJ~}1_Ygd;2RYDd=SsB> z|C5Vo1?;I|w$Ly4JGJQyVs9U!`av-8*3_bB@k;ihZ(lK2d>h`}rz?CV5v^_>IcyAZ ztpoi9@9DFf$kbXR@p>jW#8_>y3Zq|agf>_CNw%8H+?f4v?49`DSNzOVxY5=n%ul0d z*9vU2XQ5t>6?jU=Li)?WxNC!3B$hEdmcKU%FUAoDk)deq{5ivi;CHr}>lbw7uQ(@} z=pviNUP73&=mzKG%bfDT%)<Q$A3U92^bAcVHAAUNH<{EOw0xh5HJ#Cs|HU)CRf<js zP2U*$!%B$dH+jFGn2Gxkj4g{^guTq0DRDL{Gd1dbIJ%qeUQ(C!yOe(7mBfTd2Rq`T zLXT3$yiU9@=(oKHA9P!%m2l48v&78>)UxSlRN9h1ZbN@pim!kz>s?R$&Vh@+%(}Zv zOlhT<gDs8Z2W_Z4vks9ooxj9Uv-E?9y+9n<V3~h_*WXSfeRKFSjA3mjv6eP6H}fo> zBQN9a#QCF6?9hn~{Fj-NmklcHe4eU%34Hb@Gi9FVsCsc=!Ufb>^tJa!Q_=hje~D^R zO=dUqk)IpWr&iZZb_F`g7V7fjR%Oi7El@9+Q}>wu>b>|kz5_dOCeBr$-5y$@ks9P9 zA9x*stmn0y-H-4|8I5n;J_^!$=&oLad2R{B3!8a>sUd;VrmnYCg?ftze>Z^sg&GaL z<);QN(*6ra@d!oNUkmL>piXMj`&0~mupRwUTQpIp*h8Usd7lGU+m=<N?t)$2ptiTn zM)u__ZwTkmz^6<VzzzALlTf~n%){`KiPSdx&>WoPIrKtTdY2k(JaP0Wo*J3VEI*r) zpcW<I@f{tlRz#+#DR{`7jV@A#m@<_YPk%W${Je}x{IN>ai30Fp_^e&@Qx0O5=P+Xu z=WmRfgYNTp4IXRo1Iy@Z4<o;=PfoJKMyWBZqXSm(6Lfw%;$2Z_NKn-)VwubS8Es~P z+E`IS?MIIdan283>@92AgMI%6_}ahBQ0wf-3^i9YWoRf*SYoKJwG4(6KU0lfeRRTK zpvf=ut|P5H@XeuLxGA;FF>09M^m>)hBR+|A$b^<)HSvS7Z?X_y7<WCr;rdLq*daq@ zgR{-&Y#D7zRh{6*V(B-z2)?9>%ajTI+Z^!NZ>UcV6`Y3#7fA&(S_ZzghdBq6D&6E3 zTG(s&THi0i-<rOkbmlo{=2ogyxTM{=JcnGpyuo{V8huKG@LFpF{_M-|v*B!PL1+6M zEtmyyIT_vAF<XBbiEb)eR~;=^9eM}r;}KU^_K};nF^0$?JRX;+VCl*}a$rxz(Z{ug z`HrRJY5U-HY+Q8G(S<%k_G>g4?IYHY20W>sEt&wGw_N>Sf2OVU1rHctrRe9w2abO5 z8F0A~|I0N?=$a@~k9b|P;ToE=_NEfO4uO$PRgLA5xrHR*M{@#Sf$h|VIpk8^nFST2 ztxyxeEQf(L7`S?&%V^L3AArx@7S`NN<-yN*OC#cFQ}FoTxL<3*fO1OU=a~neUz(`i z<1^dAkfU~?;oi(_r3w7~-ikRDr~oWJ{1Z7_o6*lP6D*-Wd(xeCJg!oy2WT*{h*fLx z*8Zs+zhG*FCVcHM+QZ-Iw`juLUkjh}nA~$bb#XX#(Eh3nHH&`i<tkPE!EBS=;M;ZR zqxc&=_DRm4G3=+G(NkU3C#obT`Xrn`(Z83Ve9%0u#;YjF&Q2DwpFFMoq!S*bM!39H z@avgIt+Yp@Q%PK2NPM%Uz8^y`+*|JL6msVZEwhNY-$U@<OGjTa101$BxnVT3Tx!A_ zo^dHvSE$ct(IYsPUco{=v&}h|%E3m9c_w=D0?Rz-#bx=d(G0b`FkQ`nyV{Dk)$&wy z*zsm{<-L{o{il=4Tei&ng;&3cUgf4%o<6mc*m!5Ooj$T$f@P6ch<vJ1OE%T7E-$EY z>we)aJL&ga2<HC5#X(}}!QO-C@rNR?Y4omb(yP=<;=p#|k1sgtubCxkHN9^$DBIG( zpdXM22Egq(XsKZx-Nk@z|24CU`r$$N2;R3bI@tNlKAc?JRb05H5NEH$!$#EC%V_dJ zj|L)d>Q||ewVCY|Y*53&7awphE`k$JXO9dgF0AH^*o_m#9qxNA`p_4lohYV{c9$=@ zFhBb8{HxRkG$pS*%2hXd8A{+N2II$Pna3SSA8}*ynua;H(lA3O&Z+PWiOe-iq-P<i zO#MlJf>TP8`YSV54Fxmr!EEN<#K~v$69#}oPXwE=Ex{*@`#m;?_y_;nBQsNdjc5FG zu4?$ke1%^3FSw6&1tzs0zrKa6@6)At=#f)}vPS2@kKAB=)L~5z<vd$PO_0mk`G$Eu zP4r3yJ6AC;sD#?INL_}{od-|W3_vHeS{3~%%#8E5m0056Wb*Nz<THoa<2K;<lj$WG zh%R&u=TBF3tnuUl=g_SmKv&TT@4I@AI$4ZHsu<t?g?#MD&sBqS++^!2TH->wrkc#e zzrU!8-dSQ?HXb9JN{uQF50^tFDQZOVXFSa^Raa(SBy-h-Cp?RH?M&WdBXrP@scA34 ze@rLtEhLZL#96VDxpeycboEPN8b112Y6qO*U!0TScyvvre^y5yc?U3v`Jk_n^b}pC z{`wYN;yAp1Z{WNa^lr2w7Olqj`DeK51L!51u@3$tzjnZ{@E0`sUD<=f@dz6V9(9vk z<16sFFX4~=rcdm=4cxV@lhlFh?nn>!cg)rt!nKYofWD#XctCFD`!)1S*5zl9S?k4~ zK1qM_>>r6)GpKV8;n5j@hBX-d-co#SN1?5mgjWAwUUveo-{PNrhWvCQ*Ie?NMR3JS z_`Eya%5!-ZOYw~w#Vm;)aA*~r(~i`o3pDV6<Z3gx2fNHRvYYz&YjU!nDy5?6Q~1qL zq8<~Y4EWbN;X&5dXjI8)-<*iICX<JprZ41cbUqWf%J`Zsy`1r22UX;T`TSfs8XYZp z!FY6z<EalHlosMWP(=@%jl6^}awgaFqK`HNKaoqs#NM38H>%!}o4!_$$)z(m3)>KH zzM<ATtE(wjnE`)=e&Bd|C3;w)TPGKLM;?~Wdpiop{+A|Sb!P3&;tW~Mz5A2ziM6gF zFRg3Kx4Izk7hefS+v94d1&1hByXa+IjxW{|bXY^_w|@k7W<+0I>7iks6Id>|q?vW9 zb*NAk<j<GzL5VUasq^@k$D<jH1talAKe&Tuu?h^aeN{slQrK8R(nBN+KaIYxo#enH zTTypR$^&nt5qI*H|Fdk>14CjrYPOkp#x3LgbD$=;4KIBi9nEYoyaDvzj<e2H$%Z7= z9slS<_}m{#{H*T9q7R5wsttHok9e(|OcdFiO1~f)qHK7UP8AvICi<`M5%@I#2hF7a z;3fIj*kHZ<K|Hms;Vh2SyaPfU#Di;i2>r`-;EC#))dk|6G@#yX$lONa-@s6M2Wu&H zG)N<%zVwt6!&2es%=G!yXWn6?g&PGE2nL@H^YFn70?k;p>awv~u#7-!cE~?iYBA^L zA2$zq1y9wTd)}8lV+4O$RbnNv`L>cz&+DXA@VR9Cp^^=19bO>6r<AMqY4j3iRjLs7 z@PK@S8VF}xg66Cl7`x=zixqM6X$HI{akDhpsA7^!Rnru7{$PH|=m<tLBm292UwMZA z{Q9z5(%eu(Uf`8@jd>F->Cu}>Jn9SV_XAk;G5X;*<0ZC(^RzFTJPn$^@A>*EIP%kI zp9|?xZw!8wVQ*Gr!S-_Li!OF7RgsQ`>V!iP+!DTDtkDJd<#eS^wC3Y5uoZ9W<6Cf6 z6Y(R-01NzsKD9Dxz9<hHe1EJY!A&E*s0ZD_Wen)nz9ptiB`?&Vr`U);(M`^~@zlEZ z<Y`}{eF`tBQXXi>t}?qb16@QO8m^<|(Q0tT2ee%H<W*We|D*=-wX0<bN&`3P$?TPc z5~I2bC-E3<-3xNP8sK~X;XB@k+@+Z*Q?18;@igbae*SiM_I5T}h4s|ZPSn+@XfA?{ zZuBL1;Zf}_r}!Q}vspDHpBO>Sdk749vpHMsg8OLz&Rmz;a=NBSoj@z_1Wp0!pWFn` z4|1@L_@G>~5xHxF|0gjrfPSM^<c-$s$&ES>381fXK3=>t@F7~n-aSV=`-AxPlDzI0 z&fD?iU|V4+`rx0~pBi$cHec-nPYWT(+fI%jNxyA2y>uhMV1ETu%(Tx?c3|K)?U~_& z4#xrRqYavz0(8|)=^I%^KEIl?s*;}Ka`Xa&&=EGUcsatMY$2cPN51|BoyO)0y;R{7 zW5;ZqXuLL0QvVJ_%MpimaSr+Sc-B>Ca!@x@U33byWHEkzgAGA4s=`kK@fw+2>@Gu@ zN$L#-@jbmPe{=o7?Ahsj&8@^)Joy{Ls;F_PhnJJ_E+a?lN>%!ZzJGTxx%TvgJO!6C z!8-`CxjA_5B9k@x1V?gNZ|SM2F7@FseDDN)Xj4N*(o5mVY{u)3wdI4po{V#<Eeo7# zNl&L5G8+yl27ig|aLGH_lYv|(_11VU(Em-Wd*MPY4(56XEyFGFq1{{`-L1sKS)nO4 zD6@uK7@pS|&TLnaNQWYm`VAg)EqSgr>-82`%S-s5IQnTuqo<e+f4l1;efR(2q5c?e z;O7ad>=Rm7xVmj%U5kj<9l?N8si`XP4J^PXXg7VkS*)k$<?-qX9uh0lBGr}T6y=qa z4}S@6mRQXEmm=mF6suYp#cDcQ|I-Bpst#w%Ch)4q%w0=n4QT1h7zBqIS;I=w!3}?} zU8-{N$NXHAc_uZ|@rz7FSDd1Lsh*@FLK4)DTIuQ*|Nmg^0+r22`|7Exu7AAx#w$jx zbB$r95ji)Q&}=ZzJ%phu>YJ0Ej^e@`%IF|CyO3(KD#R17Nk=(?SN}UNJ#zzGB%k>4 zfb&?7Ui_2g`Juy41|xWfH`)xmhLV}Pv?4D^it}nn(}G~h!$%^i$Vsxu)0UE>90rFA zp~l#RUbD2cNDVB2YeFy9ISu|h*;`5z0_0YLzpPJkl|3oUAq96`P5-CG7osN|{6ciK zPYhc0?oLvdJ$wwzYz+H*HP}ikGrg#aypl7+mL3Bq=Jhqw6jMW2sqsdgB(e6(Ij8$m zS2lzbP3K(yn%sZ9l}T*`+y4$<nmLZ(O~lNf^!RVXeXphd>xsU$9kUWTyVitnt0i8p zK{C<Bi@MMS4%0;f&?|f(*NGt4iL}DIS*pt#Q+?KXW4Ubzllfe}oTWcdZw8qIV8LC< za~vgAOOGvD;&;Rs2kQ7zu(2iDLRF13Kb6<r2A`!{R3}AfNV_r*$;yzb#+GNPGS-Fx zU9lVIZ7x1O=iy9dQJ4KnA8Bv;>rZf*3^p<tU%@@#-#yrC$LYs9i%#_n@p3Hsohmf8 z-{X0{k9=l5{;iY2{To){NrorNMN^{MLte0gd%2Ez0RCD69dko^6VsA)j$%(<xSEg6 z>6P-~^)A8tqb75QkCRjB;RXZoBz_OyT*NbK2j7`S{&}3dE*lQim0a)=_1R|XGYwk2 zQhVlppyxPGjxdt*>L$9XeojgaW)_wQeiYttCsFt!TyaiU-uThafnyqjcWghr4;#=^ z(E?1dDgDPe;L;`&-YMvYhM=Q<1O{-D*RcjH?=3ZoC$HfU{xSs`;sN)38u9!H+=UZ( zo(ni)G%+fY+Ss0TG9GSB5$o#E`#z=6Q%2@{%K2P8KXNSII6N=BEDd;7yvL`d4?bS? zz~wKO*vfd~sz;?CvmyfIOJgt|=yk=+bH7{FK&Be&$RWN~j6UKPylg1Fr5E5zMspU7 zfUhVfH*ZKyzLmJWOl7EVBuVw6C$ZEjM*XN`?yb#7)y6Ig&07*&XqwtXPqPzVHkNau zHoW&<`$|<tk3~0d!@sC8cW^dm!NGs#e4fJf1O2f}(J*i1UU#>Fr?f)fMy`2}`hOUh z;dC?}bvUz8ZAlYi@;ug54`y)A&tNtby8LnYb!>f!M(nv(ZoROTC2#4e#fNDx+P4j* zocZMC$<*3NnB|J6y*xt4*^XZ4&({7@8xHFnhJcUo@*9xiDHUjLt;qWh#a5{i2_}`9 zY*x?HOzO*QdZ7zlWmrX^%m$0O$xPZ7U@&t%oJE6o;6-Y*zWy4?peHlZ+oaxlR;Z!) zC;7QjJHp`%!lx`1Z@5(Q&N0<8RinT}6%iEA%(qx(V8<#qW<$QDAK?qPO!WvKy)n#A zUE!9k+Ii)w6~5q?0a@ywV0iDEsj5ACK);&wuLM`A;ppVLdNXIv#ZNZdR~K7y_tR7_ zjd_-f>D3;=td~f<Et;b_+fUzoFy~-uSvBzi*B*r4q9@+<6PP1=kX+#dxzsv()emrw zkyNSlJm#Bbl&bE`jX9i@s}d3m)t^aK>f02~tW;MqXMnfm;A=@gN-7w(JG}jxQt~hS z#!sTvz5q^^gLjq#`0`MA(I1Eb?s!v;z|*q`9Q6@e%rtb!f5ZF#%ly9ZGPL;oOdnpm zC+F=6YOX{p^t<q#i^(4*!0o(1<Kc`K;bd~0m#h^(TV^hjKfVP|iQ^gsM$?;Iu&$kh zI8y@_qx0URqwYte<_jjU5glA4G4+r&dJ1ssZuGJ#W^1&=qh*36H$``P!Now2h*9Oi zi`Hj;(eKXo5<?HW1AVkx&@;bBAM^lB##91Fiy6WixXZ5ay4?$1q_mhhO65K>6|B&U znvF^T-$#?$4k!5)y%JsED{`&km|^i*Y4KNNLa%B=ugfxO!1>f>cX?KI=_9Slc^`q7 zmnR%mVqvmcP#me6l)h1?%igHw6_IKz@%9X{#FgCTGCrw2xnK8Hpgd5PJ}X!8X78S0 zza&tP-s9|VKn_;{H*uV};zoRVg*O7Df>2`E%Pjb1cdns$pDf4YV>`9pbNmSAbALnN zm*2C0i>ODgIhxcW@QQ4-ppW3W+M%<VgEo4MLv`k1RcH2-k6b49mVtHAq9Gl?zBIgd zTngnoIM!dN-5%hb(~`bzBRU2*@~32GWj{qf7tQY<3I1kB&UnfuUMV)=ZB3kNMD;g^ z9)&m5#nYM1{0$n}Calc^VDS^ki*ms98-S6Ua_z-6kN$k-M{lCXdK|oRM~n9id`J5# z57}pgi$@=P0jzExIbbKwAPa}tmHqJ>HBtt@F9x2fXEC#;z;qdNsvO|83i;Z-;tCZ8 zHhdWTExoct^*5SS2V&xDa*aE9E+w<ZUZd9@##-!+-oS{i(H;Cw9P-t0dZvr;2$)IF zY$p9@BYfzq0<S-gMtZ0(njCNDLBR9g!vE_Nm{33R_noZuzwv*mt}RkGIm51MOI1AF zR~Gx`P$4-`mX~BDGgCd@S~6qdKVyqjL3{@N;|cUZC92=b($rgOg$=rVbULMK2K_U4 zz2Fet!1)}#B!YXN0Vb<KOXZa2CTR(J`8L*C-bI^LD%UW$l40mS{-GbDRYryCl3S%H zLDWEak1W=k4xK>*YV`=>=~Z`XUa+`7J>Ui1&|Ev~@rQK4w_Yy|`FuF|^hxr!hQ#<@ zTt)CJFJ0j^T;0K}{UrpCiY$CS$HSQ#*=yI)4b3A)&-TUFrJAq24h$AUa7}qqlk+LW zUw*3LC2ayd<c1$wW!_UwdMZ=c|6j4U^TDJyl25(GN5{zhTFLow1U+9X)_)87%6x5$ zRZX5rC-SJr`v3DZI*AU%&LNi`+CploDtbQgFDZ7EF?iaaNXKsxPq}}SJmnm{+kwd> zqp8%0oGahwIKp}Aq#gQ8wupLXVD=~bF@^lG33yBb9LH;NAr08!<HB4OlAobW%zxU# zoXI3Kbc30TG$jMCLHzX2gR|ODYY&DC?1CQp8N9_T*62p^#$D*j=8>NiX+34HHF&d) zH{Of*Srgx0^1e5)=Ei|1`dgdS7;-f;+OK#Gy#|^jJkt}^3;4haU7CtvF3D)inslVB zCx1Lf?`J9bOLO?6GW0NK@soOo-aL-8XRI^aCA|4AYV!!NhiBk!C-HuqK~C_Bp3Zc1 zTW83vzX59>iZ{yEsuZ==oWNX?WHpDs^$1L)pCfZr>CNatOfAzFs0ZY&e-cMD@I(Ju z<>GLghPQT{YD^8C3dYz5&C))w2Agb0Ii01Kf3un6OC8sw&=H?d8}Wy`+)vHC6O3~) z&$<^niJrup>CBs}$9#mJz^T3l-)?QHCZ2|xk_Q&CxFm>YN$p$YBNsU1PvR{VfrfA? z{dHlbKIBB6QU?ENMO^qE1>9HYmLk~8Ud%XK!#rUpc$N)#ac^Xf`zo6NIim}Zj?CYx z0d^V#rxFTQ<_XriiWKw{+Rpv-yA0#(S;x;VwDXl8xWdtmH08?Y_k@#+A9vJB3Vkb= z(ScQ?|7#j~<2*32i_G^7K$GoH4s;ECvJY`o!`U~%f-|xXmJ_eM;M*PXGVfLb23X`L z8+czjIOF-u-@04uDSzRI*A`923Tnn_=!3_@k@lrd>kGf)Tgm)CdJRUvbDd=##$oge zfpAv0vWwLO`lj#WDbo}jyEXh`{gQNgJ(5&CFtJ|X7Sqw+?FP3_M?-qe+EW_A&o<*e zoC1$OfM({g)<t%qVQ);lp9Ute2_Kl<)HqA6m=OTapG04E2Q*kG&|_Rc!*HGct69Vg zI}dBIV-Cj+r!>_a%)kTfYFjj{7qzdMk@E>puN1Wzyg_GQsOCEqr~%}YAK1@#IeXpV z&!KZvmxL<SF0xEbc!!1qAMo%`MQT0T+nsPDbK#kN=pXq={OcXWZ0lNjsZq;awgq@d zB(?Wwa*65aM~|@w4e{_#QANxZ%vD=IW~rXcMR*>E-XFi<@=WqJv^FW|*#q&zeGON% z+8G}L&s^o<o2xqFznYDv_k~LdH8wqt;8Ks!N{yoL?muwZ@$_sL;-#Af7Cg(gggOq+ z(^)IqUD1IN6FtB``xD33>B(C-SEI=_lECga^0ncf^aA<YNEJTS(beH<LTbs)kWiUX zy{@EHt0hx>>PT&O);s6$a$>_0&Laz!J%BT}KWEemaN=#OA#b!rW;pew%#gc*7TwX) zOWOLd#{E1b&(BrX(4Tw;EcRPC0tf1;T(Gg#=(1*JI*T*&gBvE{xtQoDtCOgkQt^pm zcCrZ{@}JPaj3L%lV~w?>ezvPBQ9ba9X@}O~9rv~-b94uycld%cwOu}1J<_escqbi5 z$M>4N+JQc$tLaANoz47Se1E!uzn!KQ{)_rKAAQ|+FvJ_wMM!-l4DIb}aPczw#5;hm z-NkQdC%rRC)QXS!n;*d0a96@ZGhG$oVSS(VvJot$I-Y6EiIoSa>zaZ8>#6NlP}?<v zD)_*89Sv8qo+}!@Af4+4vGpl9q!G@bgPmTI_<Rw0r33mNOONn6_{~GqonG*I$G~Yi zXpPDpj=7RNvpYFrANKfb>crkIXgAPL6mhOqXWf5C&3=l${&jE|R`jxsq2{teTT)q4 zO)lXX*#MqOgFl=V{Lw<Ra^Io7-hz(09lG?x;BOA(yr+Psej~qdVm8ZdIQD$<s~Mbk z2F~UW)Ojz+Mc?M4i$tSz5l-eB_q#vyhYsXvB?2wZKx%+jeBW&RjpOhy&8sr2nf&}l z@b%+p4L7n@N>SA(qHCN*ZupYAZzlZA9e9h{93JiYf4ljA(>Rm%!})bZPu`OlXqk66 zgL@hUFZGsl!@<F<debK~5-$2RJrYIe3FqN!kl?IgCYZ%zi#{gTLUoJSmkj5++AbGt zml@FHsqIia?nfVegSGS!-}kPZ$tS5DUQj!<LwnPQ*p`n@DuUS7%$Tp7$aSVr9nQt` z>n!z46l*;Zt>gx{8>TJDb2NVz%)tvBq8NVbPw?GC@cavkN~n)bYEH2;=dO=<<GD4a zEI``f)ANy@!`W~rlgY{d;%{!|H57mi`ho`@g{SHvCiR-XR{~DjlD}PpDnAE|_6>L~ z?t4<ndHDgqf<HJT-r#f94ZqpbJb#O4fje{j(#bzO!3!?fGn0Y2&v&T>ZsMXfm)T^K z4c79U-tOPogI?ez-}0PZgXQZi7!~WH2_El5>B;{QU+;AK(d&~-?ED`uYfvtQ*2I52 zqS!Y^=KHktbd?Kux9tkhiFYu#cQxjVP=EhUugM6!4VIBNcSzDmLX=T?MKZJYW2IUa zg%&O$SIy7NR);XoTLuO*82!yA;-!@%^WvO*#GkotmtE`1MXqMf!7`m*mmBbMN9jSo z#(AaVJzU|n7t=!+2F}uy{NIDTza{=x_tB*+MnicTu6Tnho;~!#Twq?AKWk$X_19bH zd^L>tdX|r?$xpg?F&mJXB3{06D#HJhs#PsgZKr1b0YCWvn03>Tvr~t@BZ=2Hh5czp zvpSjm+JwDU8&04D7+E^~o1@4#JGyvCTk_x=?jEw5-iJ~2oHbytZez`sgHLy1FO-1a ze@E?A6TiIc=>^I!EmtjN-qZ}{S+*j7v%#PANJ*wTU74bmniAA|lvtC&Ldu!vJ(zs` zGMI&qb#jqDhxy=-U$f_0liOWF3)~IAt2NA9e3nD4nBydse6-KSV>b_sx{z5Ecn?g0 ztDA}EL?|^&Q}lN8s9AnOC*zK0DwVi;u$+3lG)HykoL*B5zDu8eKVs~YQn(v>uLAJx zy;v12lflZ@!?7--3Z2fr-N3wgdoZp%YJErguL9YR7GA_3f7xC1^z?MXBO5RGbJPtz zSdXJsuG$A~RTr%O06M2!xLFr^9Qu%#bSBm<A*MR8$4{cc{))cGd2aZmyXUIc9tCO$ zx}9vi&sMmjRi+2l!0+B+IUCXN2UCA05pNn0d-l*5(!CtdXRbi<=zn>i@7Z4+$tSd6 zddJE0E|Kp#Ge2+$`BfIP>E__2`T_iODf~n@vtgVoW7V~iI2DUd+a3MzMfko1o?9+@ z&3b%ZmmEjOZ1;}fv|)JAmzVj-8v4{ePy^-D>#zvD%P!{PIZ$UkvC2}ftW(uT^!y+B zc+)ydJ*0N{5`EnwaHQMl?t<WEp0lp)s^~AFwhZGronsdAR%+;u#6%mkoz3B(3phKz zA?F*ydVj<Dtkc&LAANOsPd`K=`(*+7Wdm}=0?ut8og3awVA#Y~JL2qSYWHu!+ajrF z9*~<pAn#qz-ZB!`=2!*GIj#zAfINev?#WrwUV|=~J!W8@^9=4^8=h4?_@;C8n0(J% z3@<b=D>;vY;Dmd^QT3vRu0`#V4VLx-4UGZJxsOq#Hgn=ek`K2812mC4ECx$o#ywg^ z|Fs4$P@UONo|^p7Rs@ibSC`(VI<nnZ>wh@f_uPkP;Hru6TG7N@Ki-Flp0!$FE)n3d zE5UDi;dSVO&ht5*LoL7}HlmT)jz-cRUH3CyqYb*cJoe3K>Wr<_K22D!b;yTnfFJsC zrX034gJo#ZX6j@Nb-O0dtPW<9L!>dUJ&pMw_-=ZFTYU@e>A*Sh6@1e&{3sq0BRaYl zs0(-}edF_)nUHC!qZ1wq^yGez*V*8_BDL&ug_;>(tQyAUsr~V}>Sa=n+K`c{n&6vz z8Xj)|`pA>4$pz?KgjiyWPuO$f$wEA<r*P&6!qqM!S6)KiIlq$LXYOwnwabcfJe7<N z>_SI0SWfuTJJIj$C};6&2n0*HhSu^HeLB6VyJk|4nwT55-#JdTqrWo8DGGm)Xw|_j zUg?N;jl5FSaBnox^k#nWWfmk_k&X0jU4zeQg64T3xy~=-BB6L*cEiW81sGRfJX-V6 zXD+6%G=tyWh4&puFDnJBGP+i&P_Fi1+Wq+XUgXQRXm8G-?fQ*;>khgN7y4A4!AkB> zTQudpBy%p-;!Lz=zm8-NH)g$&{h%Y@?A9=UiN3TR#KrcN33y_D#v2nH0)PJ&<RTxk z$WO9t#UY!yq4cW!gU92BT!U(xk54Xm^%VN`!a1AIl^9eyJp%c7FYPS#78mxco}Q3V z__+N@ukty3aEujrhvPeOk@Ic}*hqo}!vTl8O^nrplQ>WljiG<!8d&5txV;YStkdMi zldT=437qlY;DfF3?t0EOjOVeLenc~KcRup(t~T!S7ko*S1tDYI&tzun6?z8d;`0^B zb9CZ&1d=CS;b+E@r<=evUZKst?FEMH<tJr$A@9NC{S}(oj_8%ffqg%+x0b`?pr<&a zV$k3vv5r5GLk>aPlEm67Cl0}2NGMvKR^+>$<T8o;|5I?ad*OGlf?+md{UunDOQ1us zBR}2?R@&9zj?cYb8lbQHhhE4|^!~h~Pqr2L%}_qBC#Q^spL)#yuZ_lMBATdERU#cZ z>*ml?vzvbJaLMGq$;ujT+1iZ1n=waS0>|(~OLr4KX9a$KJ$NR=(C^*jcLkyQc3};a zlbbZ*eEJ8idNt05PGEm4;82{&tA7F48>!dGA?m(gIoDHIbED8+FXg;=0LNd$wo*kS z;(O0p3q?Ea%-%UlMs<vJcOR`(7=0Uu!6TosbA<kkZsc>DnWL1&Ipz;v<BQkbUSi;% zRzc{Vg2aUH-BxPSQfkue+@s&Q$J@ano1)DfW;xHmMS4qy>P(Fg!h39uCc6@?d|S>S zZMjjk!^eIk+L=GlEL{a_bRxHGfLHBM&cU_hc|KGZSLvmWL$kAmd~7S;=#BW<@2Ewt zpcng#eDodok2SgLO>)x4oKH>Q&r{*bzSSZvMU!!rvrmh5p$qYFEca;z=jasfSsnC2 zIlSk2=pCJ@aSl`C5GvJP_F4d(&uk;>5WQ9s9>N1TGg_kUY|pxw$EvwSY?@J2p?=OZ zsGpPJr{WzXGR{pl;4}DRCixEYKL)VY>Z3FJnV4Z;qg2H*Zy}{diRwxp+8y}lW$cUZ z=vgXHr%uFM=}fe%Y>)PkYH_Y|G>MuW4al|vW`*OEv6=pfE!q@jUVm28@U%#S13OKR zVH5KCztGsuU=G`L;y?{!hFVpY^}l&1jrrM6VEr@TueY)nyATH(b1u5LF&D%mSYCSi z%CFuo(uMxImdwf+2nK%!oTLUi;I-gJ+tIWPW^axr*1D6o-E(uJXO-D8V2_79%<4WI z%S`gcTrejSc-|uBai^l|-^UsoOr3X@n(rps@9mE8HT;f2F3dq>S*3Uw)IDY<9`U1R z58sxj<eAoRF1gh5DRvcVC-vPJ_KJpB-V1Ha@;sfya<#>iDUQ8X4ee<SdO&BP5g5by z`#qdRHf!_{`FA*-Q5o=i{^<XHfY<!3lz3feP_ERuPRz%22Z*!GU@pSnswMpvC-J*U zK=bWHkJ$rw(LmzvQR<$Pe60hXF%1j&{khJPm*vI`b$98@?8x?6HWHIfuRgVS13Zc& zc|P?k6P2%ld2f9D5}i^wxOEKq;T`twUGT*Y<cKx+8`tRN`h~oH6#K4>`2CKapxM+k zo#0iysVnP}5AP%2($VAH3jX;%-g2Jsps&GldZS(3j@I`PnyRLFa-88~f6n(Lxaxj* zpr_HVQWMYHe0(&kz<O$V@E+at%;Cl}7JPUxI>Zgs;ud`I2k^5SI_A!Uz1^l>YDizo z6R@_o^t804AL}!Fc?^4b0=(cj>vFuD%T-IXQRVa=yrtiEH~XqLe8*SxQT5`zwPI%5 z$Ra%YIRj$oXZapH_s>#hIdNW0Ku=Piv)G9mB@%z6=hQ$4_*yi3Yz|j_@^0Y@LVL29 z8QmtXCkAi%NS?QyzOg8B8$X`uQFJ^jh@A_l*}i}^|IEEJ!dd1K%d)`1TJf45u&1}e zuXSckv}R3I@_A1ydTXp*Weo4rnmXlYc!RF!7XJdjJ;Bd5!(ZKn-{k>ztwW>I1do*x z`1S?lpg+PV*XKN6%e90n0ImEb;%9sA!4mj_h44Gq`1y_e-L=HXBJ}W2(O}OeXG=5& z$q!Z4Wgq-+4SILZ(hq;wQlHRYl7UuYIPYm4Ir###mmi6BC*arHauzHy$KuoX5zYU5 zRo57)qK(vGV7+Z6Uj3;_z^^HVnTM(1&6#Q;IJ-Zubprh`w!HTCU|@Rc*(&(%zHr@P z=oKdsJKIvzuR-&Z3XW{c-l@a+aR;r78-3N$)EY<76<Fp@S)<Ea$oo7<zvn1&k|?l` z2jqg&&@wb8FI+}UE#usn%=>-~zjlSXz{v_fcj~V`_(&vhPU*-G8>CsufCO7<7vmri zF*b5A5j_IBjtS*e_&l3cIGVsi=xg8Mw^taXmlOWX&xOnQhQG0$^Rh;cNo`9mQ9EJ_ zlwC}*vWf%CqGk?H#|IS7X)~B?K6q6<^7pA|EiO`b-(aRo3LMBqW^=^TgE<V$hb|o{ zhYy`beRm(vTO0Vo0@mjt)@EPo2^aGFp3FYUMH{r-(@Ms96W`&7wle$dD{88);Puvy z<*G4+Ln)f|9_V*ApsoCe+;ItYR)LpBe)3^H8{EkXUwk;|1L=d8dOp4IW_rIC;#aZL z&I=sOO~&y$C)?`i=Qh*tFVdM9*&U7h0I-Rb;4{0y2<m$~;alh?b^V-W9lk4iPi9UN z7nkEr<IA(@#JSj&{^oJ$q(eEUD!6_ECn=`(-A3-R#~KYUeX8FP6L!HFy+NP$3J>(Z zHPos6QD-oYIoyjD@Wx>U9&(P@W+o@xNx#eBOnlSP9L)uT_%@6AR(N`@rnXCgm@A|< zug#pOj`Tn-#J8?KJ)#rQZtkR4cXdv*`aUNH--Sf=7*EcJ<el&FWP6NeYA>;&4!PiW z@Y7$FT1zMx@}&H7H7c)IrRL?UH0t_uh54!ro>z;hvvc727K42ifu)Wmw^<7g8NoBI z20r>34!VpSrXTsubugW&_#a(x!dsNOx*PX)BylTF>w})dL+X($M&T_P%lB_UL-LYy z_!NC;r{KC;)04K=#gYC|NAAC)3;?sZMNCYBdtC_LmkY+X3(aB$vGyKuVl&Sw2>h=e zc;yBDjxW#hd+Nu-VDk3l21kgQ&hSJv$$?5WU>wwwPpIWe*ke1XtsUW&EZUn+#J+w! zr}k(J4QNZof&F#jy)L2Nv#0*^wd_kcm+R<8dY8jv)4$P^GouGOoo;v(9bqrq@^i1z zH94Wx9tP%hjC$<{;!Q02<nK5SyYY8>QIGaR?>wLUFq-(%j<^;<P5UiB(~O#XGJU%N z)cSL%n_p1d*0l1LI>h@w$yf5&+a~b-N8oFH>9cc%C;yE&aTx8i6I_rTzk3%ocLiDV zV(R0CtgF><fWLBPkK<=Y5DN#vbNh3h<BW?SmUiIxjpp-q<ku(3x0B(t+^BQsQRmS1 zs)Eo4j^poCki(sa^qj`)?alXg<#${EFITsdM&OGp_<OT>{maN#eaR<_%=A>@8#|j` zr@dSTbamgLl{rHk#hF^gaGfMRzD7U&H$1=|;$@nosQL7w%%c9i##yq9xaEW9y+3`z z6UiO=ko#`ny_xv;UCw7zyj*Ao(0<<M_cW%LXCmGpop{zUXx6WwHOoe4v5C04f_x(s z?%_PTsZHpmMroqe6gc%tV)ZU`NR!dL6{GR(kgb=)so+h?juM`1!wfB*ywB7MR3_N7 ziTapX+th^1$d#7U)0)f7pIOXVZcH3mO}*cY9*~Lb)k3^?n#ZTBpX2boqo=|<tw>D; ze||&lQDvY$C%4@}j^IuWbO#)?k{I^{T)fhSJ_722D&kNE_xCv1iZ!)n8JMhRiMK3c z9^F^Q>M~qgUE=NN?{^NAYV@}Kf#2p1a*K=L>tXD@snpRH$#NuKWOs<6qaD0t1zh)5 z;_xo?z^l+1Rbvk7US__BQ#1D=u4d9}5semd1+`l<xaz6s<p!|_Gs#Wt;9n;3`55NR zbVN&6m)>}1eC_&qvd+ED>W!~b!|A!3K>j?zmwF#hhafazL%_e6kq=#E59PtvMd1nk z3eC;m)S>azsq5&S{+ahUiF$7?b>9$je?M^Iv($6p=r5L#n<Q2;6A%x9V(^Ux#IE@T z>~}l>8C9n;a%gYJp?+g7f(Ff3Gw@qYK7Bvn{x^$sl0{Bx=~uY}#}`^apFBL+ePU=a zSXfqig=!2|(juGqi(hg$a|b$+^Uo^N$s+0>pYjq_%$yomc<a;jfOJL!Jq<6*e$<e+ z>4AI-rgDki{nqFs=fG#ZW!<l(hboJ?+;8zg9ZH^f4Sn`9`W@P^UN^FyR}eb~uwS0T zOT~fzwnC%1pW5Xe+{!{?;%jP{mGEV@obhAP6i-E?T8QpD9-YZkX3!UdH@kA4w#R$P zpMG*hY}CMg45LT&IqPyXJ-lC|>-ObY<<lFq3D2Ax_SIxHoNH}(+vVh0o4}v!(A7;x zL)L(P==xw%8TeyHaNk$6e~O6Dd+E)x%;*?J-nNIDDvW)-m)!UR`|=vG>J`}EdCs&x z=pru?t2R-8zJdd}MeoN+a?dODFxCMF`GRW{aj_9~+)-wcbl|Fs7Qqa*ww;*Sk=kww zeXoA3fgIMzF=FIY;w~-m{I37I+QKdL$LA@IpG%|m=t;~yPQJ7kedHs0!`I=J+yalC z*5)X6NX4M9NhD{?P&cUHn-D865-UULVLnAa+Gyh09O7CkzpEFoEz5#S6Z?NB?`@8z z`cM_VrN(N~jUKCFykD+?Z|vs%j3?&A^E&<{7kvP_<H<evp1iCD+)O1`G#syv`9q`N zXm{ySRUbIsP-bMd)+M0dOIBy`x%-wF^^tuaPMo$zS9q4cJH^6f^PV+S`>j~-^U*3T z2ggX^noCd6AE1Ws>6H1IdjEIkP#xo$3?%1oWu2!^p@)p3j&}w79Z3&LCwQ?cVzdXG zOFp?~GVl2~vHdRb{|&fbEN9Cqp7SkYsfEAt=XErs_VfcgJV(!(o7r8;_&b&G`TyAk z$|w5h|FjEXCP{U$VP84Ntn}Hb4pJ>fC;o5oa(+>yp1sIdk?)FBOhTa=L{C^_;^_+p zM4SvvQ6aTcRgF4nYIThawZSJtokPRC6>hQ}-c-$#OzIU0Y@?6Fl1LZn9ix}VNpL01 zy=_At=uYhs14ciLzD+y$U?aKTJwKBQ^{rAtc)Z%84cJG#e**5{O-xP1k7+e?_&ms2 zHkah6JzyEXgWI>kmnYBN;;V{g+pkb9q>ro+&!hds$t8HQ{0bj;8IJP|{TAE7A>HWX zc7cmt#{8-cUP}4mbGH|L(sJ)gH3^>^Gcy2Osm1l=ITo+VUzy3U6P~Xjaqb9th&S=J zFMG2Iu`?GfPr4f(?ciVc;hfT|F{31qS!)5-a*KG`jvTcn8Zs;<<TU5)3HZ3n^u=n? zXuc)}Ehcx|PyW%1c+njUeK2vNEg1SM@|<QiPT=15oZxnHo*4Or8tn)kL8H+P>fx!U zq5<<F*N>-<B|Hybro2k^l&cY5aRr6wr_ph(0E=ym7JMKY#Za)Y@2Q8E;a7eR>@k?1 z+k%%y7IPTV@v>P$d|l1_rm|c=Ny)D!_RKFGUmPTZ(OUe0_F^`^w8x6PWjA^J5%h~^ z;BL3@J1>(1FD1sGz(;z&Vm=jXdLsDMAH42`c$WM^pI1|K&7<){@uvqm9L#7kF(Mu9 z(T~(3_t5j~2CMjkSQkf*=LW{;$op?f%`+5C@)8_dcdpCapFfFhXZiS+`1O=C=Yth} zjc6tRBX6vM-t{s%gWm8iQS_J=qBnU@-_0nn-=T1ivGmg{0$2Hip7jCL6JB`8oM-;v zJT&*)&?uaQJKtcNr6$=jI13GiolTxfvFMr6P2K@pw&Wgn$k7tC*0O^$tS6eBvE=&( zF#QQ|)$8eh`wqNqD7D~k#4<~6xtJW$2W%mqJ$jVbP)Q64!E<;lSkmwG%6(7Fc*)ml z(^sJQK8tp6A0Kyv2ilv_8PNZ4hY$V@G<em?Z(ftb1i@ca(xdqSkG1varaD_<B{gOt zxl4OucXv3HV_aV3ar-SX0(@>4T7|P<{+aB}y%lAu7z}S6xvnEKi0**}Y=+mdWsUVR z+QHE?7mj@M3ReW&$V4<1mMm-l^*{w@Ng4U(B<lXL#L6IY=pDpYcXZm8d2XY?Bc_5G zdz;Z25ux{T#@}ac?_eEoMN`#?IUWzGCF=2cDCf^fKDOqW9;QcUw+^pvG(Zu|K{>_u zpXT{4<etBShw6f++zOt&9<lH#d}A23|Ic6!OL;v}thGj9);n2y3+b1O;=WHH{smII zY$eY=&2zdA?r05`+ztSLHP31%983@5`!3Fjx6}xi;4WsvukYo;pi9-|%z2IG<{kI; z1NY`A{fG;Q+rhl2)8v4IiCx3cqj!MUY?tmR)06R%h(iY*Yf>)M$;-1uhJ%x7&=*^| zILiiRekKLFNUs1i>)tjp7VZQC4cP;4^ItOkg)!)FqH<JtG=6+|p6y93QPtSfFTiIr zIom4fM`(x7_)lPueZd|>!TrXfGy97*?FTk=mO7(PC7J|kzGKwa^T5{%3z*ByzJCv{ zW>24|4h*#wymgd&pmg*Ol-@o8(w#wYuRMH3<Kia!iNnXhX0yoArty4daNlQ8la-KX z{^Uu0%Ph*q0eYFp`?ygJZ(Scp*@?$UF`R0;#rFn1*j`@CQtIFF<SXsi(+A)f+Ts^9 z+tpuYdj`ukUw`~snc*1(ZcrWV3D`qRf96=wvvvWUo;UmXXP(ClIJ*(Vsvo#|!cEUY zYiLcp$Ru85g2U<Hj}EfO_n`H>3O-=R-<w5m*DbipGBjW-$=T+C5C2oZo+`jgm@5|j zye%`!I=~f_7c+y7Gh{A)7c=oES<U5(pU!Ubz>RoFenJCagE#!3{CxE%eFayT9pc8v zp*)itXnK~A8@{0@*c0!`gT;yJ$C5;~y5zIEQk<^t7G<d-yzSa^rNi$yQ@hW>QzMYy zIUnx28y@NZ&|lXB%zX=<3yYXz774aG46Vwo0&A&WgdU$f_!JoXF!t{jVvhk$&kgcJ zTGeGfoYhov!DT#~bg=&M)M<6;SvbXB-A%5MM(w!)<mDB6qmmr(Hu<I-Ib;ZYVg`I- zH0Nq}<{3?ME>_v#DC6*F{F0fg$LVWY4aPVcto}GT$P0WF?^0K9wh2NjR1+>T1f37P zXK0|STm1CkIQHRJ+>*GP!_TcoPg+8(Y=)M11H9l9UbCKf{04uTuFm)r((e$5=HWB= z&`|Q$Gn~cm>6Hv7o?6`aw8WBE<ZEVX)8@pRMdV5^sjYGAk>9|Pu7WT3B`&-{r+pFZ z^iMb?8}QRCD|d9)-gLIPvrk>+Abw4Y*q^&Om;Nmy|HCtMC%9LC;$9;9O+7rrYvSJo z^h2@i(IM0UNyOF8V9r~>rG~;Cq~i}<!klt@bXm?|0O9oQ{6c)|NFF<xecOP3fkXUT z4`+Lq|MwqP0(zSSKAOOI{^RSDIq#cN_wOT4?jVouf`006Jh6hguUp8&_tAr$Pi|ca zc3A=cMYp#!AxE5tcBBOU*-U<Vj-JvCd?{u!BVK6(r5Nu*XS}(Z+quYgbe9@90zLa} zG4a7bZny|NjxUAmNOUvHh-qyNRd5n`N^_R<00)>y4D|uW>P}zdV(OMWc%t>3Iqx~E z%UE3haUCRQ9ERq(D>22HoIVpBM04tb_T-(T;MbpWCT-*VK12NMLhX>mo{eOUX~AkZ zI?!4uwI1$nDOh@2^xQgd&E?<#o5-R2@cP>Fx>{1VS@_VMpRFV*zDjM6HY>kqEBP*w z8i*SD9y!BMdS4q-yDkgLRS`9qB@ux3&fTEabAFu0%V&HBzGVrX@-oIrKE&8DufkgX zN~Sk0i(VAGVHe;9Sco2R61nmd_Q7%1%q4Wg_2G-3a4qF^eoLI&N#9vt_Tn6TCW7(( zY)BpXkeCzB*)RYMehofSx9GKdh@aI_xSAgL)g+SF{m4A19r%>(v|y6pu*cw@EprVa zPgPI7tvq*gmn}YCa?qc-ss7An_oo(Q9>Cuo^mkIDH;0=Ug^sL{`}dL8VX3uVu{O4m z^JL?FZ1JP3jaKEMyIC#pq9@1)|2#h{X1r+VyD_Ue<g0h_jnLCK{F*&`$g+1h1KQC8 zGnT6xpWAYVZ=vo!L)^TJclGyZQL^D<zsDEgDqQez&RzpGhZSf0WpJ@xMm#9!%LpZg zHmfkICG4A-<z?yu-XhJ&+qw{k|KR^cb3XQmD?JL{QiS*8R{DYU=n{X2H{D6h?!xTo z{lqjQHGIwd3UwaLu`fK(BjWFf;wtr!|DQ|mupPO~7;@pp#n#dRZFxg_8}7puT_VQb z%Ex;s-$7<klXw=oF$-HyPmd#BnR<Cb{<)pc53pw=;dZA{GfpK3TE^=uK(kt({?DtW z@#rw4lw)zM`nxDW>GAU!!fSns#_louayxM+ll&tLOn4z$J|iEm;-yfk)60Hx%q8I0 zclg*EJ<d;X=f86qxyF;D_Hf{wf%Dl%J^m1H(3$jXo8avhgLO8?XDgn#`jYe68lT6m zXu%)T2i}BhB|K6TdZPp6q2<KQ$^0HW{PR}Bl~1APrV<}77c^n_!G~IbO?L#Nws@?4 zi+*V~YvmoU&ym;JgT9IN_;@!ZZ+(sj)kF4L63?(Y(Xs`#=6UkCL2SkvoC#m^Tzi8{ zcoBz|P}94C;ki)XZU>(%qW0)ZtgTP|8%f+f&%YN_59gS?#FJ|%_}V%&fGz0pbfz8` z_}@?DN2%y*a^OU(=u>%RLZ=3vx6V|o784r>kOM~JpY|o*VS026ap)J?^6{5)umf=D z<rUU)3A}CszjHO5#X|BEC+deE;AiR)YuAvMuH@g>;Rh`J$sNFPZHT2e$TNq4p>HDB zybe}-2EE-Ae$N#&8B+}CYS4-uG=eezFYX%Eee&q)?EA&^KJ6q=Uk|SQ6Lmrg`(O<{ zC#$&zafXtnNF_Mk7;?>9<dpT$wyvX|u1P(;0~~cFJqB6CvB%uw`kXgc@JY-gUmZxF z`F1WHb&5qlyqGv1!95NjPkBM?yaZp?jq}?Ej;9{a;4&G^WUwI{o>MtkY7b(6A^GWU z_U3A0M>S&jQ*hGO#7SGa1+?7LV|WC;<-P8KgZs?$@H2bUkHCy0FzUV3fr)uw`x&;f zFvUvV5j)KZ8tL~Le3$<3OYk#&@LKBZ>Lsm-JA3?@@9D#O<=j7@%~oehnf;aZSq=Q0 zq3$#1Cnd35)lQ)oJJUucg0DS>FK}ZGC9pnTlS^!duWLZfw9TPZT?BV5qDC7F=HC>* z+}o9C5vUbA&~p$(kMU;uY?9HPm4Z1GgFU&hW}8q?`@*x_gbS!g&hZodXKU>6<f1<; zP7|+wfLANwj2c3HkwV^FkDRhKxn+NNnZ4e4h56!V?aP^gU;bl!j&G1h*bu{>a;Bz$ zbtH0bg`jsyq()0e7wJR2UPR8+pP79TUSKl5TG9C1${Bxq`2u};1AHeg;M-fyYZ}Nt z+{kk%h6{{f9j`XRukkSyZGRXV-Og}M737>rjJ12r{zRH5I`(-2zKbE$lfWzZ9a)PP z&vpRyM>%=eOxEc@Jp4w$g@+mGK?7sYXDys(EzBWLeFGlW3(Z(JW;SM`zx|52*cE6Y zI}+b~(e<1oP8!Hn&!Y`m&+L^eaNUAVIu|U2@$$+KZNX`@uie3;qrn2kp?NmKBRxP5 z77IT87akWaa`5N?6Bq=x{Q#|G1M0=D?Bhc6pWlhSXTdkufSH={_t4R^(~@5I0`P-1 z^ncaCf9Vi?$-cz?M9$KV#MNV!8Oo<BNo{4{>%jYM=xJHTT21E8Ed~FaM%A|i9bO~W zeobP|7WiE&a*YPm)dlvcY88GcYpKUS!l@r8Z@<j_b7PjwPPnBG)Q0V;|4OI}7qQmb z!gX(EW}_`Ud{^RY6c}kw@?UH4^MU9$&fyoj79G+ZVy4;2N`lFYPf-u;cgRuE%((NX z?`b)))*pYBf&86u<iD|KbiDB?4TJKoZ_&W=F`oGQE4nl-+MQb9L`7h>U0By?_`7&> zJt4RJ2M#-xJ`hX()y$fnVX)nK=sD_9+cJRxu7?>r#La)<fd=A{^)Fh%qxh~*HPw>& z#!zy{5NTUQk1Bij6nw>Fo<Rh$v=jJdBF`cR&2<>Du`PJ{TzYg|=%?(5_NyCnJg?Ft zS`KIUBR>AW!4oVcMn0}2zd$GP@qZubbA!A81J23?pF?kQ*9YJ}oxzztk^4?2UJro( z$fk~bMV4F!*3g8Wc0V*aFTo4yqTRD6PddhPKE+wzhBM!b80||8Za~~=1FzMKbESeF z`IY3X<>cQ`CTJGWh;RkK(^+~%ExF(~;LVdbUwV=o{z%?+nY{4^dVx=1B3a}(O{pu^ z@$-S4XM5qbBhW(}AQwAfXH*_sYzf&woqi47!$D&2J}?XuF*F?ARt35DH=GAeiAl@& zMwoOlvDg0~t`CJP&qMd}8(2;tJaH8LRvJ7v3+dH=jenvaz8m3i@-2y{qj^n_&@b46 zBV>XDtmiB|$9r9bA4)MCftjMJM~X)3QpcZ8(TS}E7o&G~KRGdN5whHk+QFNe$Gb`m zcIV7TYZ*X3Va0w5$S1~8`+t$nOuV#8bs9d`HYZnYW4>5D{NFlPWUGI<*OvR<9-e6k zwQL*o#NEIHCQ|=?;9e}|9@%r&?EoM2Ktmmt=PRXo%pfcZk`3tfJ<z|MrJg?qrr|-| z`!_!`91N{FIM_?_`TFPqCZg*VIEiG=v~co-DfAP)M+-R@{ry^}B=rn0<a|DMXQomm zIZ6ccTb!v4f8=?L;<@zXOxwyCHvvpWgTKHLz7_}W*^E5JnOr!Ae)0`)?djC>E_nFQ z_V<+t<{(viX=N&&ZtwKWceijOU}L}0%YO`Rp(P(@a=%ybwYAiTm)ZB9c+W>Hd@?;a zkKjIb@o_tO&olC)Fy5PurEVo}pG@uakaK7a`OILn8zG$gU$JLufq^}xzri28U=Zup zo7%1!HBW2ufq3v6TjoA(qAr`yo|{UZIG1(Z2tNECducEFNge&Nqwr+@i2u)T1-5d} z(o0J$T}uuc1V-wSpQAhrvQ&e@Y<Ti4^&U*1BihcU#N;m2?FM>xeqz6UhU>ac?YNJB z)Bdie7gee+`JOrONxQ%p4pHYfLGN8bO?iua$XpgEZ_8?P#)iu2l6sO<Qj_^1K4_Ha zxnZ4dr^Xsct@Jhf<_-HG0!*eMYrP*iYZdpx6O3#Sd1`HPQx9^&S>z=F#Li{Z#IERT zy0gDtf*()dpo(yCl{k38n)v+tIQugf%NMT}H2Cyht%CP!%yS(=ANerWQ8^#CQNLI- z+v7*pWmEdHTJwB{J2CGVyv2bYh3d>Ka^srJe5Y~5^M&;L9wz2)#EW)3`msIartMiT z(P({k!goESE)3#1TIS9yBVS!iOdr5iM6J|-daQtWJI2Zr9@||`6H9~0Ln(LEY3kM^ zc)<RPE>juP)JjvTYH5y#e@{^P<_xuznsyU$p$!~U3eUTUSUQ@RYCxM2L#=N@$Ekz2 zdkW?}6<qH%c#0=}CBxZQ*YR*(4R)<%4V2Iior6YiFWSyxdORJdZ*uwhfB3oCXdDyJ zkO#sO9^n~YqAqOCzqMeoFVR}h;_r=spE!-KESodlowM%?uv=cR>P{}`MeTKk_cRV1 zBZPm2gHf{6<T<fx7P-QExSB+8%D?!02YJsTIQ;&^$wvIU44&;E=y7|z4eHV7xkPG6 zGShQfps6}-$un3J<>a?>|G&QSAv%*$Xl2K-Z}(YyOE|d5b#z!ipwU}}W*`dQUk5gn zO$@CEFLe>TcRM-Lue_Fy<Y@K;a|f`bzu}N3p))$d@4pH^eTO)bi5JRR{L*?eD}E-m z?tjFXBJjZje9vXp<x1A&NAllbu!L~VmtlPWO?*85lq_bVr2o&qbvynt>0ok;!QwXM zSxI3I`r#ZaX$$TJ#K1G8<_2T1#N`h3Et@&>w}I~kfib-xwy`{=8JNp8JY$a1H*z$` zL!P4b>`L$K#9Ta83hiVWc;_z8&}-l}W2hfGfZ2ZF9(;!;WegnVTJ%O$;7CqjEf<Kf z)2SP;^4uq*?M<O?<zHg>cAjk^XU2B+o`D$s7h0Z!<h^a-YU@+$XMl5U2IsN?NA^I6 z^?_LXj{5r^^~7TMq21&c-Pkit$vrQEf7PTW+y&-VpZ?;$yr)F!#gpXEFDN|PQ%hQU zQ+lw6HSFcJ?3W(olcm&&=}zd3m{s%*8vZe!MQSMgy{!+k%Zaf&;jZeE2W`jqF_+kX zpEGp<-rA4QQv5@m;Q{_<%fDAs-=5=l|4qGro4wwN8Fdy9_jP!=KSI<0oIbTV=x;jF z*J7C=o(=~Z!v4F%eR&N|^Ba5VFc?{FV(mw+8{{oB(85GhL$9QNVKB2F+^7S!cr$cm zuE$0&fS<tt2Ek9Hl#-9Jw`!w7YE$kfk$7-emoXc$)LlN6xYECiE)lQT+J!!7Oa0_5 ze$dBxuDhxAXH(ywg<l#2En*Lr8%i#^o!q1rJjgg^UbUtEbf-rvwj^IQhpXR>)>elX z<z+D5o_Hj5DnX~l-Yz6RI!3;*8LgiW&wC~Lj59TDCTrt5`MEV5wkzlV5NbuC#>;@i zafO$m)AWD7W7g<M_7HC@b7vO7{od8#QwUFV7ViHY{ZsAHKE=Tg+QAQ2<JsRQ#;t){ zYDxTb;`xsuFMa1^CsxGUGV~dzz;$}S@xA3)-{!g3Bre9WzE;s++lBZ!mY&~(c)!g9 zGqCiMr{UdONdLllaR0`9K8#s<Z|$?xUDn|ew2*$B_ZQ%+Pf%~}BWB*?ecorE>%mN0 zff+8=hDd#DdT?w)n0-<cZn1{w!E&qHR+kPsdf4#Sor8~t9lb6A_;;MgFGq|1QxDhp zQ>CL+CogiK{u~P4d6nP4gdAu-7xb!1<ShPwG~EZh&(;4p@Q-`#J<H0--V&L~mXVR9 z?8+`HvL#f=CaKI&B$VtGGD22HNvIGq6Ed!QKmX^s-{1eCSMSe#k27BTyv{kVbBrJM zhB5g7zFB)?o!RVcIqUrr>@|AEo~%@H*&;t0-&A^-CbAG6Zo>Hz`e&UO!2oMAOWwC; zOKc$P-ABmYBau~X<4(DL;>~k*<qs#f|1sn=eo>rYzd=@<?|)V21aXSHAg{Q^UGq}~ zv}d8%RUUp`sR#c?zY>>v`u_Q7b^FySSUa$TO)UvG!}+pKS&x*Z11cGRXX78uwa)ZS zwCyW*z#sDb^f#tSZw=EbKFcaPJgl)QNtT}S?yK}cN%5Aq#kl*5pKdXqG?4!7Yn*e< zSaF;+PNmENmN$;y?C-8(pIgOT-=hzAng2T@M*EhC?ne>l72&Zq^y4XO3RhWwn$_6% zD(jGuzI{Z@qMiDlRdzq^dzU|3F7`@vlXU<ufxp9A0D3m8#~Q#ddcnA3oxH;-#Roc= zdplq*b{0H;geIobqv`EgX=7ex1U&p}?R=OcNy2u8{h?*-i~WoK`xd_2ior}G8_no| zM&gkli%tG$EEeWnR%p*0UiV$k)5+P@&=_^7nBLc7tu>8RYuIDeosJko<}%VBS@_xs z?DsC~TOZ-eq!Q0~+*wW^fwb0a)U|e_tA4*|%pKOrr8g#SiI-|vH&Mn|>MWb}0oypp z7;CUG{#Sm#NprWR(-(=6*VgAY^36QUt`@ZJ?-P6UTG4gSi`U+x+lG_5<kr1sGUxD( zapQ6G5G&b|q0UE6XFOlZSRsosW+DFQQFd#z{-$A1OZxlKWVfOR_$r6IJJmj_Kjka_ zC{rZzl)UhR#dUwTzVtu-)YsPY=XGXC@O7T$kB2$oSz^W|wI!at$!GuhbnE+GG@h() z%|%hM-D~`^PsL8MnCCBLK(WU<u+!#GK38Wq>po)1bUi-6U|vLaF}hOL%=D$V_M6ve zWli>Na`U=5hDWR^eod_Q2H&R~8t35`UltQvNLEUUsm&(Covf?6M2^q!fp?Iff#ShQ z%*ofVHs%Ju=_-C`W3Helf2T74CWkfiyX~QwE(V@Y3?Qp~KRxC3Ez7sgLH8f9UZEJ@ zp%DJ+M`y%aNAvu{{LU+Q++N{4)>!5gcY4&?OZgnllWvydai%=GyXBndF3(W~x}}cT z;4S*0gT07F%-5_VzbEm)V)iyEnfcCozr1qBZF3gad24-IMNW$gowLT<d7W~79H#F^ zSYtClPNF-;hO;;i4dQP`dpmRB4ZKyBd_C{%y>@(+qV|AImy5AEeO;4px=t>Rbmsh9 z@I6<O-)iJ|xwYg!iS7L(7B`K5a7{dXnfaNHeC!lr5__F3{EfKpVsY3Z_SjxG@A4D6 z<u+EL(jv!<Kd)HNRf=vHK~^8|dsdsL9!2(BuqjPkNAPJj@fFUQ$4*72(~CC_qf>H; zs|~Y8ppKZ(O1|tz;wB6A=|}S`1&tBEHimwNFFA^hY9pSKf^Rw7oJ=a~t-7M&A@R<T zvvC6YU$U;fV~EqD{XH>)$3qMipL{46Ra><92XwG!b05831z$}g<ICZGiMqEcFT^Z| zxGqum_vE%8|N9U6cB;9k)Z{EHnfut@+-&&q<q(Udb6XkrW;L$6Kz9ZE`K!3Xa{6l! zS-Pgp>)DEy%I$?#)%nJYtk3$(da&26Y5mZ(rnOpMvMUwALig&qW~0yU@qJ&EHz`Z3 zJs{@%R`4;8k<owI>4NCrQe0q}w!W_o%k`y|n0GCDBR4y9iI12L9*-Cwl*dz<@zi;I z^QHFXw{D;yS`Rday1`1`61Q0t_&ENt$d}Rl^hkdBRtm5W`NYz5M`nk7R@U9-f#YYi zZ-Dkzz<b|{qu1oGFBa?VVvp1`b)B~s>!Dc39kGQz>f9^75@I63FZ+{kJeB{Nl5chx z{!a0|57MJM&?q^ZIn8*svH6;AVmi-QbMO^?T^B!uJrN1&XhknA;)~~3R(ZJn&t8Lf z=+mn4`0U|j`I#<8=YTT)-Xv~W*Ba%6aPycs)wJmFD;ivfuikV@MLuFNWpG)XA7p)$ zxK3_kgbCtSY1xoVbj*5f+e25(#v60lm`~WsrhLir#^QI`f@5%42QMFEuWr%f`>c!1 z#j?({PWPgS*iv}Uua$P2nRk>oU!A?wSsdOoqv=ZPolnt|$(32ldc<PJfD6Tz(u#fT z)z80;C#sRbx%B8w^v~eEtj0GnWNbef8)aQw8TRllyPDeXq3mNW^O~R7+xnMlbw2tc zx_!63JYR$HWc?Lu6Dojg{=T3OubH!aU)dYTdrQ3bxV7u4?XPPk-dBy@9wyJjBJ0p! zrz`%nuj)nlgbr96^hb*8(Ta4)Z{l80d*_IKWXFw}Dv51u)bA(lC;A>wY(k?Lyb$)5 zTqVl~@MH=69nOMG#}7$i92hb0`@OhnDc{z?GfCO?4))MBv_?83`sNig9*6I;Q8bIu zq=Wcj4Srgj{W&$Q+o>S#SKWTlonnS@{HP1^$iDd?d!!pZTv?v;3g(VWfp_hPnTXFD z+pC<4d^E#jwZ%!s@RfG+kM4;{l`#+6ijUAzyt+2%M5pZZ_p`>eztROgwf|NaZ{w?Y zb1dEIpV}Z59a7ln>=!Zk5PxrFY}MV2eg*5mPS6gkjD3swyRC8SM&qz5;->G@vw7^- zX>X3dn;3Wu-Bc44;k$OkFQ>@PO?orVnDgbNe@1_f{Vh5y_Lpeoq(4U|Bs&>R>fGzo zNiW!YbUnJ<n)esQ9giEk+*00L>j1)9p!xVYjxA~rUKfkqmryh^C0aaEfqaL(lZ{hk zk9=%h*#rD|gbWPueO?s1rf=8-^~~>)yQ27{o|yDGIZ!s@%j~H31U$TKf6sMxXKwT# zYrX$V%)Ql;tbD*n%4{9d9{Q*pojIPrxrThLweE7Ay%dG4Q(0~7T$eqlN?$%O=0D8d z9|70tH(@2`*E*9z9o?1RH2zYwrdWF?KI1|*a11`FEGBf`yIH|~vi%5Hf<C)J3p#g@ zam`M15bxr(5B#ocPU0}!&U5D05cHU$O&`(g@qCKM*z)f3>2>0JmBVWr^lKU&Qqf$0 zLu;O^*b|zC54Xm>8}6l`<0j+R-|5oa_Oy4VS8LM)ZN*jZ%7;_aKGK@<tsi%NnLnNi z552%Q=|zuTpr?;$$7|ZN8O?s=UykK(RY&Wacz=bMtsRYQ`qgMkdhJ<j`FERVZqCQ) z#n;(nEnLL@)EhKQar>_Nva64i{o-tHSJdxo-CJu=gst4J-x2F#4zVXOcyg}mX@Bn{ zb3NoL`3(Q%Bl|bV@6&Y864!&`s(-OP@8Y9B*vbiX;B~T48UME-iz(3g5}ePa*O&2! zZ_rog(enp$KmC=FgI-I8pK_ST|BlbPSxjXjepo>V$FL3~*zOHzwamC>nR@z@i4xXT zpX4ic^34u9@1b(e;I;hp<5BG#Xg|vky5cn4g}o}Bz-G3)z5bk0&Q&l;zw)w6`;|Y7 zE!xlDZUsv_@#a;ys^G1lmlwm?Z}=_5*1MVGtb_(B>E$e7I2)A=4xWLN2>E=CzdeS( zJ&M0Qhn;Mr{!{AymaO+PACL{M)`(wKW1C-wk9*2|6Wlar>On^0_4$%EHDJFE`8y9> zRN?RRrYkqH<zYUctohb`#!l}$f9N-U(JXQQyZnccb2mS^E<_i!(9g~4uWs$~e(Uhw zw=QN9JN0|~qs~vr<gAvok=KJBfzSEm_%m%!!ER)S!{XLyW<sAOY>I97k@L!1%BBvX zk7x3;!v4Fn{NSWytqc0zBX67V@fLo~MRZFAAL*5IA1%Ic4&mqKe*Qw=L&hYZz)x2` zL?5*IR{K(mrS;%jMaj@vW1suhC)bvT_rADgX8ODuy<U&}K1pZYAp0%!xgi<4h=;4- z|F(4AyL_92>aK}blG8<*^*s;zRz~0HZ23R<`jYmq#N+!}-mvPa1{?DhTN};{ZDLF~ zglu*L;hdW~aGal?vYuYD$`2pLL_So`D|B0kdt~tUXn$W)-!EvjNIjd#=5BR%a!tcu zX&iJ1-TqKN_rmiu<FWzn)z`KpejmmctMvV2*Kueu)Yxqp`}Uc?zjuFoBFOhl9)C5) z>*HF)wJp2xBYr9?KKi9{-e5bP6W9FJc>8a(`c~WP=)*F)r3{;TPW#4dZwmFkuk04S z9j=Vs%DXGBSxZ}k2lkbBFNgQx@*dtRs+@-Stu@|jt^AT?YAu<fr6UdL!C%ns2W1_g zH@EPScJO%;{4N47+0~Z?&dcy)(y-}c`BgdjvN0eR-@F1@YlD|&f#YOuw>h>3Vwjug z%b~_4{qfive8%?l@LTlpk75_kX!94rhJuR9F0P(``LHYWp*r2Tm>w?0zfNJCmWv%I z<99`T)k+!PfG5fR3Ga?aqe6P|71^qwe{1wJm9-0H_+^zr${<(nUq$<B`2HpM>5VQY z`0yLm5yubhufF?WfU^F^6G2voqV!0-@}anJ964VHXRnC|FCydPm7g6vNr$}5?|;Zj z-UJu$;;-T*SLho%rfA7qc=Ud>GhPmT47#Z_cnz#l&!cp3J#EjZ?cd<Tk>E|GwfBBk z@BiwZHnetU?Qn97caj<Zq;UR_wSVX{3!S#3QIL^-z|P{xdNI$6+S(qSi_&L{X`qbw z;C=Fv9_%&#NT*G^g8b{}EjTIVy|N&Q@7C(;K>F?#`6xzeU$C#E=*xW8N=!1I+~<0P zomobH-ypwb;W#;6bq?Nt1M$|2WMtQGz|FU0`EA$s@c#^6PEOYzRNqg^Er$O#fo^>2 zFb*8e27V6ui}^glul^c-Yx0wK*lW{RuA6@&`Or8|qziwl8oqr7yu_ZprN49G@07k2 zq<4pr^CRj?LDyM~7uilfbra`$2!o@&&lnm<-bIVs=1}h7<vY<%a54ffUxv?NaPD;V zNK0*;3ZLuvL&yETi3Z8ZWD0N$PJ6>?grt3f#?_SfyKkqV$?L&yA=mBDrJlbZXXi5G z)nar)YdT;SzQ2KQ>yh_yxMUxCnuUryMTeF`!8rP5DLqgRFJ2|ni@|VZ4O7li?K}%| z;EmU`af5dp{t7F>A4@?42EQ*uB!}y8`sXGaF%k5}>to4G@QVug{sV3OO*>-MlY{I( zNrTp-8JpwCp5jR3+#95QWtIICUh4xg=+k=kVGR2)#n|{qHlsK@`;|V{AiKNh%&^n> zF8S*3?~U4=(>H6>yO5BFysY!#rYWrb?fD2eP0#KQPL$b*d`8aCz&mTeBKPLvrG@CZ zjxIkgW_X@Yw1?f8%s+ZQ$u;??Zr~;Rc8#?*v+0j|XDN7rA9fc{_QFFS@lC>67wPyX z<M^;S@M*mAim|K1y>ktp)(~fU&RD9bxtyDH#X@{n*t;K*pM3c9uwE@Olduhy3gM;o z?0024V1RmhlZA#Lv+}lSe`oVY+1cJbXgL(G)xtYP@k;i@G2lPZX?&2!_#<nKkvqU$ zLHH;QPgBsNG<iHvFT6|6PvX+;_^q02;K$A0OOO8T#0?G_hrAC4^2Mgx>+qv7c?LLc zN=LqfzBAC}Gc*eE#xU=ngP&NDE`AQ(+oRPBps@P>QPxiHPD9h4eh;9d*ZDiQXH(P{ z#>?-~H)rr;68j4Nl4E)z$P7L-rg}0VcO<WMxt-XJ-|5a*@!~E#nczE~Q;38_R^o}5 zUE|fcL_b^MhwQHBwRbyRzRmR<{r-gKE7jS;`=SGpkLVx=I<ryYbod~giTo<NQ-zF{ z)6ciXH%g1GRe2~stJvE=#(8h?<Fk;jEy{nDeB8rhZ;`7XwI=woJJD}IqNJr~>#Zdb zBOVDVCghBi1>=kfYT@_t__8wES1`uO#&257r%hw*^QgT`C-G8K_lAiV48RAkk-MSj zbDIr3564f?`#-P*qv?fa{I(M2#2&Y9J)3XOh>3O<H<)S7$Z+H7^q`Fa)-3#Ym*3M} zJo~Jec{j21wDj!}`eg_BgMG=1*Zbl9?cgfjPbQWgc(?@~ehp8*h-Vw($>v=B7TW!+ z_EqAKK0*f`B4fSD(Ia9%+r-^pqb0&_s$KNoJT|L8zAM4r{DL1pMf>sS@FksNi@f;a z{b+M-DCGMC<nkHv(OI2k)VTy*PN3E)H2<A`NC94CqyI7o@}qJ3J@L`D#yXeS`qBJ~ z-1uXscPEpHSNO|G>HVJc^ISQ{-!?|bsom4rpnq^sby{#TEgTEB^EI}j`z7spl5Sau zCo7@RF6CsyBPHyuDMse<)5|en3mw!0-HYQRD+uk;Ohz9CK1^=>moie)y-eT^oqSH4 zPwMM&aNX}h?$=Iy#~cg&xRIW2$HzM3tiMjiv8DJ6mGEp!x@<ImW)FFbrwjiB>&Q=g zvXspIy?p7#)__iii}(4#Z<5y+_`<cwYz^}>FZw-2Z1Ju!=0vfO+T`N0Hgv(W%fJtK zYOTHxga6X(%g+h+<MOQx!J=Q_|9<LeNmheCSmt+mbo&7`@y$-0pW7I)9-Y_-y&I!< zYx<`*Jv0`*7Qx#gwjxuaANYW659?8^YX=d!al3avhyUH)O^qInnbG&?<IVKj9oK?* z?OA-*2K`!qdg#^+pS=l2h|9GD>G?@Z@Jl5SY~?3t`XMc{1!N=BQ|Q$+#(F(sG8?B@ z3l@_tGFIHFk+@ST*B{Jdyo0VUc<&i<_M~<^ss5+cAI_g_h^Jd>e=mF#&YRro-79Q- zGUJg9cnS*n4bIU~{~di9ss5Do>c{w}frnM`;UIi*+TGUp<UBcUq1<rZ?5F&d>15@7 zcBUhnlM!CN<wJMT_EO%vsf>BPucVwG(XBJSc@&@A;Me|zKjOu4!o1Bu_Wp1Bs0ZFV zK(E{R8YuwxIpE%Dq>;sJZzDGLn)ep+N85n}c6u^@v@9B*6Bqsz^utFZ!D=z?Z0>(a zU$&tyQ`2#?l`Cr#`bLZ!>_g_OO~L~q&RH7F#;3)>A8f>r#_(ayLml#XLK*YO)nGA< z8tmsT+Wi5zZhU+kzwE&SJM?*@{?2E|x{;@Je$Q23Zu(*=ejFmt)u+~<+)I$3gIy~~ zPkjT|kHO;`==A~Gj1pVujV@i#XDm7$VIK?9O|RgY(e%@Mpe?>hJP(`f7V_O{{b-D5 zuH)lX{Ho>ZJEX5M+S8aFSmW8_==&C4*o4N(*y^D7rsBCZ?D=<e)VE*=9hHFoRlrNU zq%r7y0FJA$SC`20ad4YlH$bZ+?oUFKH|dVo@Ml>({H=DLp_>+o1Edw3sK^g(1`F?? z+eI`VO&`5L=GxPnQ{nP=@U(V*0!J5J3&KSkI2j9{pOM7{#;B8AJMw<Qyw0EAS`GhU zZQo3CK8G$|s?VXXh0${sh-!CreQiw!+R<@M;j;i-9_3$*!bdIW!Dqeq0^aJ6KJ&DH zoBO}HM)czeGSUS-K7y-l$~gtczq`MOpFamJIx07%cjn`v3h;YeJ3e3wI%>nq_-K&6 z?1#5!$VfPsJ6^ekl<|Zz@}uu9b$#J}4fb`fQN}BLh0LzU#3()ntwBk4H5Yu9gsWEc z_+)&!pWGxPKZW=PCFr`s>dONU>D7P7^8=nwrJq9%k)-tRRy^B>zfczB^1CiMTP7~` z1lgGnE}>s4vK*n~57XP@eP4!*9H5g&h}FFyr^j=Ap_j$(`tplr$!&Vf-?3uLC5=^I z66=`EhKIP(^+a3qfY0?nPPY5eJjMs#8N<HHr^-sV|6?7#gmaOSWT-!Ve2P72tF6HX zh8V$Y`r#OEl`ROi!k8?or%`Kz?N4>DmFF43FZ`6R>HO7n#~uDtKYW$N+bj7f&!F>K z^v)*k@)92GMbAD@PV%tv@pRvPG)O~+%7Ui!U48a5AGn9EzoO?}^!|a(K2DcibdBSS zJZk-Zb@DNU{@z74a`2DeGVVIWH%@PEyR5Z4HO=2W14@9*<`{nEo3sIo+5A71lb0;L zP6mI%r>~+_Dg4m@4L9psA3W3muZ3~(I^{oNT~HBz^%Y~pk$jb?cx_vHbs;&h<I0%$ zTJ#@!<WqQW3Q~g;Y+CS1kAir%H7}m2>VD_M*n<5_XmO68^@kY4div)rx~DK2?ia6m z4^6wH?JH>Bja>}B@I3Gx`*@Dt%!o#f@Y4tQWfh*<0`FVFI&}L29cF;B-Wd!!qsR03 zwl4p+IUljV>s;3pt~tfk+lw84X^bTkY-AWJpC*R|$k+4w-<E7tW4BV%cgO74`wC2< zH$tqiGkA|K-A7h4({)YIa)9r~pyxo)*td_NVH~~*Ymm;W;i7MD`zFEPmIV7QVtrY1 zU=0sGxl9*)=lN96JD|Z+<TxMwos!-;WvuZPJdcC#iFC~dGWHMNEKY8_EBj0QcF_3d znClVu*6GJ6byvr)PV=Il?(@T}$D<qHF|PcaZ2v0Sp2rw`n6)*R@#=H>Iz@X{<GZ!` zGoB4Cfmaq73Fg+0b#(YpIwhPf_=dWtlJ|Y&{V{s{BfL~Zj9?l5Op8Cu;j<EAp-JfS zwTbwUzlm<EM#pXNT^n-qBpIvf_b6qC%$buw67@BKmp<Ci3I0mK<1hNs7ZlN#%<N*w zttP5!HvNC+U2pPN7_(mF^W{UILFjab1eUe_@)f$i7icOjeIIT{1l()ySH2$wCm+Dg zm-O{9zF9i{@yp7dOWz-Gy$J8u>G-pviQ8EEuzs!wJXF`$e4c0Yo+S%PNn#aaY@{Jx z=%tU7^l_1AbM$AB_d;Hfkn`YsHOyw^U)Rp!`u`W*HiwRUiGC{Rnv$MN;aZfe^z-|e z-(l@#5B(ggedAH`Ep2_u--qbAZe*!|Z?BP!b!6jxveAj}(gM__%bup!s?)O-`R-4c z6KQ5#HA4*HikNc)wsQg5IZsCJkehw3uac>sy;sM3hn-_N%-mWPzD5Z?@C$t0Y1Z)W zcTGnw+p2Fhe?;mQGA-9R`Ky4QpQ7YNILVGqMd8YB>gd<n`~*ye7-255xsc9(g@4pd zU0+)-5ps(k0I#w+PD``CGlOw+dgFm~XqP^+z<S5s@`hgKOJ-oh^U$T~=+blS-fFgM zCjC0z_~Bi0G#8x0$6?I(G4+0(4l6AV-^QHGVDafuVgr5YvlqbA?$rb@y5HaZPvoE5 zE*H*m^DjH;yQ!YFGK|emx9(5$i6fB)%FR!Q-%;;=va%R|j>D%z)ZYhmR`)CZZbxr7 z<d2sU$4F-^cu9Vjt&x+_F_9C|TCP?IMOWb9ZXyLa#L`bDoR995&vXx({?48xg~!Lq zYbo-T)%7r*=<R-t@z*T&@+A<~(PTl}ba0sg<Op_@O>L6M2iAGvi&@|oW138KZ5{S; zAXr5AZetIBWFPn8pH1qV@A(+lF7DTHudMpYpjSim8iuy(@ya!}IV~FHGUhHuZ$3c+ zYOr-3dBjt|kA7#S!(JkPlgQr^dgUwehKcSzOD==wzJr|3)1MjOb8@qn9E6pybv&N| zj)L3tS=dvSiw-Kq?p0xHo-tOgW(`_-wkHoAah)z$Lgrf0bw&!2U$p55ymL-F9wUQ& z$mo8&SJ*d0jJ3C+!8K!mWMVzp>80FwBka?D3?C&i);NZj=F&Os=$^F7--dSwfHM5P zpcm4S=lpoOylYL+np}V4{y(mj*os&1!C)|58DTB+YUM4(BNOpNH#|`l#JIPaE*PSm zXF+j&2)V-2(i`D?t&(*A6Ny*;Gi=E=nW($>(~n=1pG9B+y|s$wKkZ3adEG!8-c-&w z-;MKqKM?k|WP!&+TKxgshP-Z7;JYMVDh~g($Z4-c|0X${i3^9gj_0NPe~_}mSm6|V zcoF;wwu2F9@~ArI`R;k&)F<P8wdXssU7Vg=4H}@+e)xVwY&n-$TF801hF{+uPV&OV zU&`60eJiwWF8Tft-DW59NVdfJ<gM->P|taG_&;s92mWQl?rKvS<zz#b<i@q<Xo=PQ z?}7SXQvWY$!#XzcbFh?Tt%jrJU^3kq*7L;Tvt|G12gKQPxL5A;z4kLbaBXTm%rff> zuhBp0=;pLE)~{r2D1B%dTXZb>Nx@hA*tn~{v0ENvw*sJ*@!SH}ht?Cd=R>X}bGPZk zqICANWT-J2sz`=1(&J}+zryqP>E!<OabI%#Hr+SH`h`!;`^~2VSCZY|m6Kha&w}A> z!*a40=7J9S9pJG0$3PepUK9h&tlzE0eu6EF)9?EDeI)n{PL|-ykI=I(K5FP%1>e;I zFS!3Uysh)zWh3C6=+%@=jfdMG`7vqupih&BuEt5z%<X?eKE9><X0qqK#H#9>FL;6s z6#!Y-`7l3Y%f1+W%1CD4l{8mbn|^$O-G9wDz4?sYz4x54U2$WvbYw0LKb++g{6N0H z;bY9@i%y|0hpWG>XXRXl=^{U){SrL)KAz}@H$rawW_+CHB&MbNZOMNZ{d<#~j@F;q z`m+olE+(_@!a+mNM8?I9Qb#J%Ti@{)TcK?h_UbxXU8NUOvZHmyRllNpOIq`@oPU*5 zIqj7Z$}U4b_mQ9a^wdhU3~Sid8gFzk4k=^|@+ezaN?9Gy_H(-TAGEB8r&iOIMab1? zJQ)0okJ0I6*Eru#N4pYuV-I={#tV(a8JhZTB%U~h4_=~gkJ9y}_~xB_GuCw$ALkQ% zJleRZwZ1$-`U}wz<;i$se|L6$+p~~=@H^aKr#c-Yh71p9(L6tVHejz>u&Gsz<5RMe z`x1TF)RFq+vM^j1_Fh#w=T+A^u3`Q)4|!|Aj=hXOnv=om=vGoWxyf@5I;|M})=GKv z*yz8k2gz&QQ3E!*4L*1YJk3_8!b2gCZclX034X_i8`QB-+X9b{A@9SrWf;1?tt}JC z{dzK=TAe-kl&kRPVR6%SZ0SJl$;T$F(!Y}4Sp+AwL0a$tZ8MSKa0cQ=w#dn0_$DRY zl9peeI&#(TU+JIK?vGSQ5q+NPyI9y7L9Pm-?{$97Niu&Elp@EIKvp#TihR|?V_`j% z1AY=?u-WOm)ZlmWG>fnIg8t;tpG$aUr}{r<kEXJbli8;EV4Zuv(4SV)CdTo;PsHzk z=G5+*>$)3#M}LRHaZj{r4ML18gL|R;O?Yx9z1PqB>dv62vDf?R`&L;e@#sbJa75oW zk(142WVh=Pp6&@aItLQ)a$)jT8~*FFPu0+`I9i7MO!MKg0D7#^&o<x@`s6Mj;SPv` z40yM)@yB~+LywY?WMWHByug7rhOt9`(7W5bGZ(M+0+sM;m}d|3=!5Ci;?^`ICwnQ3 z=d<Gb()^B2^kdjJd>@~eMT6(aSW6{0#KUFTtXML;hd=rry<MNY=JjqC-{wQ7r+w2M z%t_Rb$;Aw;r!%f8>6>ckU!OeGNt6-!<+U<O9+RL&arkel?3Y1Pzn}NcIK1+}@3-J@ z2fo|`7o*8dPQRCES5*+^?tV!0k?l3oo<hFw#!iHB<9TH~ig&Bvu_|z05QNcW7*FO= zW=+>t;Kjsiibxy0_cFRvr<Wd6hZ7UUknFoepV{d2r{C%5!xVgqtN8PPcR%(`V~`Gn zu||5|lt=rv_+kcqcMTotk<os5XaH#K`^xwyI~xCk7xwbUHsFo@>bt0fYxwR6e*M(7 zx$o2Bt!u^?5Ab*~_q&62%8&DIe*724fVq`_&wIPX7(W2@eHU!bTJ)ZY_MiE^9`F3D zl$&%=489DW-4*xNc{T(z$5*vL17E&^bKWL*(?QT{6MQk)?~tptt1`Rcx1L~-c8&DS zNZ-5*-sh+E@@{o}l0Z*xMEiH~Rv-GdC+LCa#<(6rr^oP9YpwXe`^%NRPMu%)Jy3nM zUGsaE%R3pAb&Kve#pa)4XT$ol;`-3WH)Fw4u-*Fyz!7lT_ve)Lmv^p$Fb|y>J#(VZ zWAI!6)Isn5{+@@1`^o43pK}heg3M?eg_|?zu?kG_P9NVlcYRt}4Ls|G#_!{W>0mM5 z2>YP^R_-IlwDp}6)6aP^<IJUx0Ym-W(YdUp>ETOw?qg-PQbuKERrGCR*N*OWr1M@< zMicy63x}5XZZYMSQAZQ?4MX!qcxf9tAIDpNxc{5)w<>D}c*F0e%BtcTeBoHnuaNZ+ z4?9gB{vbzJ$yvyg=7e96Rw?oskxjdX)fB4*54`QXdH!2EZ)c{{Qsbp0>Q3Sdl8?Xb z+taofydUCjPX1C-I9cP4t9ASC74xJX9C!EhZIbam7zz6Nx~+Rp>gP>gg#5s7qHkOE zhxI=bv^vl+y)x=)(J*C){YJki|B_ao_SI%>ngANnaaQEBG3I>mWlp>o{(Fc&vgmhx zwEq}?$K%nqz6){T@AYMk{=EZAfgkX0Ti+)2{vqG(Voy%-Ig;b;C-@p|NXu06vzL6_ z^<G|ht*uRM$lj}o^7(*&{lF9JbJerSd-JsF3k?b5f>3)l{m2bpW?VpOJ1bL1^1)AT zG|vQI>6DWSBvq!}r2d6f5qxs*Rpx`YfQ@(H>`Q#H!M!hh+Y5g3D)$h4je^6cVLl_e zUgawvu=aMJdDef$(JH$?5nlg><LA(0g>RFxFJWC=J@%y-kcuj@5Z^qh%+1Pcr1qO^ z!FKW%)-+yW56Z*w2QcufYfk-r4i0*Hzds)6q;Jh!YbyH*_hgc?cIsYqD;zGiQfCYf z>;zsEhwlidLp+-UKbzIFSG#tg{UTg808hRM>gh)voY#a+?#(_gG?qPK-9*T2SXw-+ zyV27ZYS{xfYvE-GygmV6VIF(~+`X-xHPIo9dSYO+2wl(@_wEN}wQUldAHvUn!}%3F zdjTK(<oc0oV?5#{W@DAR+H9<VDlef<utS@)<yV&V8VtxTi<a4q3A0#FlG55^d1;kx z^@~{59s1DOmBxX|wC5^4c!}PNMTaWd@UFfGJ)BFO_3-rz>U|nNXC`k>uoUyXWWA<+ zTgs`c4|zba^S41f$fs@1l{;F0SAmoI_n&ezqCpwZLR*IE<2-#_tn4Y|rnl=$?$!3J zIKIgWn?}}&*V2C1b-yXP*4CcF@bVBZ{{|1gXv0b1BzpSP-XBj)tIMUET>R2mR3HgI zvjm^BF<$D(KWfh>e2NctQ=N<SF^t7oc(M9q{4D#|(fm!<koSE$Sc?zBI>TD(UPL~V z^CjDY&%iF_Y-8UhD7Q48U60oSzSrUT+URnT9a)D*H<R5v;@3^I`x|WyvA<6Gw3tRa zp??q6pGEu9YwKy4`cTj7yIPHEjGa^-QMv}a=68sf^u>o0P;&+OIYV#e!)yJ0vmO6k z!+Y_*4RFElHF#jCYeRn*GzLnSI1;z_-Mi)7uLDO-V7sNZys91j@X0W;J{(@&@%!z> zdohVNp_2PK;UONbFM`8pzm^_Z3P)jneFa(BqTfFzwkzoJOuqh~j}&D57xKFYtk;jv z^=+oMf9TzXV2eH-!^eO4-YG=*Cd^^qcOK9k@?j4&e$9pNV!#b!u8U&-mlCYi7x&MF z^7Y`hkM>N_x-YfqJ6v}VoOUnRnXn!yPMue^@fg0`?cR5utx)z%Wsg$EP%zQoi@m)a z-~R3!*_IORMRWKWNw2IY$(O}+<5}^`=I?frjj?#RGG6*idl&dFtOsqao?7}+Bk{L0 zk>Du!ICj`4t`!XNpJU`PKfdXX?&HOor?JCB+2)$!l~>Vc4Ep4wL$>&;1H1*l_!yrh z#5-^Bi_5_87?ODrM^&YNhoa*u@Fz$BvC6%v-COlyC`y#08SE<4_at<hbpYTk^4<%+ z`ocwDxbCR`E#RY-YfrXioagg>vsN39=!;CmeA8rXr1&r%sS6+VXq}p*q=M3&zLe;< zZPecxc=a8$eaAPG)cGa6Z&&Aj`sISUWbBR>@oiz>+R5i>oL0mtHRLmqw~0JG4l09& ziMk`K$1~@jXy=0O8^NLGvz2rSE-u2w33725FCE59`?PlpI&W0pP7w6kA3z3cHOPN} zp81qlQYjVue%iIZzw7v2%=47mb1AXS$&ABNCay8BqF-SxY+mgw461tmqB>p&{gnL{ zTm~IF8y|$V8wd613_QvV=T3+R{-<thKJe=eIKJfm-+tRE<xT6P!DSF|v>dKJRQ_;Z zzOKwJuH9XSCDJ6qX2^NqUUqm0y0roO8}^!f1a^_Tlm7k%?!r9N8npjZ-`>}+!M^ID z4ejW&m(k!=5XOZ4&~LbB<KcG(`p#A6XZU}PGC~f`p00J>bLzCO<xof8YkDN3qSD!T zGz-2%sl@h}%T-^PFA3|Z4{Gx!uv)*uUg8yczYu(i*QV=xh_}svyRf!k75pB6+nX?z zTOTUvOEr3`qH8(z6a}&Zp;i{$mJLR;Xn7XB$f8Hicf<?f?BEdBU5Xz94^GkE5Q~Y` zo@a3JG!Wvi&xj$tVQkx*{(V-QA<UOABQNdYK=x;J2=?}-HG9@OYTr`r3_9ge-!}42 zZ+IF5zq8;Z;A_18hdKD5-=Bk-il8JuDggqoh1{OW;OPdQJ%gvt=;sAA4C~l0DEBH{ z*g1j+;^gHEe3Zo4CJFyjE*TJPQt+$73c28;1#54|kXo!KhvzNI_!@qf!|PUU5BBkI zZU0-l!}((8e7l2Qnydb?=r<OQKlAN(c<F>|&<|mjD|pXNbLN|;g2&{_wx>wD_9$}~ zy6vNff6>yL%FU_%dU&HZoio9gU+Ciwf1mXGG<@&Wx~cHp49={gHvbq;-^Q@B&Vtg0 zgRc3!KN9@ro7~1ZRoK)L#-g{;;A@=F7k^gsJH7J$f{!iQ8SM2Z+BVxYti@TPfBUpY z=2i6h7kzGuZOfUW{xCLQiDM?AS6IXIq;ej3_eXtL>Wf+MG#l>bY1<rSO;heW+7|XR z^uR-Jfw6dfuC}i6d>>q&hmTn0=hwHY`qdDGu}}k0Nng{bcdI&rZYT;Kid!5Kzxz@g zZw7y0hPcFHW5*-LpsDa}U9BDsn@7Oo<~};m=@Yd13+0A5%UiBxTz^8V&LGOSSiuh- z#fKZsE-W-JcgXlP%>O)te+DPYnw;kP71n+i(4O*mran5gAU~}@ds6$FYa4adg#V)W z$+4}lXTO_rroi({a8X2WQo}_`c*sSbD&dO`?tg$5o4xxV+?Uq2?)p7PJJ)OX7JRW5 zAI(>8PjoHd8f?fk<@SQ-9@;lrJA+;L1!si0m>TR}SKKg&)qMkW<h68Sak|Q@*NOkq zQ8~?&U0OY1j>C$5t#Vc`I@Hw1KI&eg9f!enkePp0na>yYg0v8C3s4h;b&x;#<~`+9 zBbQ<C;bo--KOv7YTKF|uxog1%kO40irz=W|A7<zGMe){U-yejjC3y2~en8Vi@B1oU z?<`aD_XXYxdSi}0eue(4^f!#vZjzx~G(ZJVJrM$L2R~cx0Bx>@H=od^{N%`NmfDSZ z;5dx&ZlmQzym~?@C)9He1RL_FXFsArz~%ei@1Y;z-0rYXX0`jrU5zC5Es61fJX`9h zqR)x@U)5#R8NC+H02dSYeIxHy1QpP@F4}bWdyevcMfVV+DhKMJSXFxY5p=oCn(n55 zSJ1}`@$o!8{G4T4he~_t;jk`fHF*m9Yk;<dHIBiag}6<K;p|a<80Uv^LQZW<@2`tE zcO7Y;Vtm#YJkPVJs^69MHOwJ()y~k@PnEgcw;Nqo`Fl1Pugq!Q3GtVm;Jn`<9#B}H z8@YB@&+GJXOR`Wkk?)fkF@-2Yyc)#0(C#7~_a`{x_aE+sJs}~|5IplTAk2wWN1t%c zUlX`!>RJcXf}vXeuHknL*D!ziysx_OXhwjLzj-oVA5Z4q_I(fa2A?L3G0Nema`>qx zinnm>j;}`HtEsM&@ydJd5A)6-_<09><oCB=6H6G@-F>2*Fuv-beRcFE$a4n$l>tpQ z4|z&lZ@8xRPFWoBlKu|$Jj4kXz{SU4sNb(>Q?OzEls5<mhWWDB)z?x<m9#UXZ$s>6 z0}VI_?IyautL*oc{i$oP;Xk57@a1o#i<MqV4*V=v3H|XCn1kzH!%yWvcJ#~Uy>uXs zPP+<j(QE1H+=6(hEU1kuUe)psyuaMHyZzp;-tFpJqOLJ0+zwPzRuSbts+Adhm)v(T zWIKhjvw6QXJ`X<IJ7AvnF86GO^49upxAyM#POvZQTvvh5)iWv4kH}~(yty~^2cBJk z8@|CCyU1UNuUsM9|B%vuNa>A4J09%a|Kcl!^}YmtD~KMM;4}iKalVuJ7lc(dcl;%% zyT3w2D}{d{9{8kdLwpw2^z`*zn46jerucpeOnwTx>+s28{Bgqd82TJ=Z<p(KG}`Um zJ+6Du`Ka$h-0-wE9RzF9cfP+rP<B7>gj|Kav@h(*2y28Vg4uXuF@9Kza$kX!V5fGS z^8H`RKChlIM-<9Ej=tN#Qt&Byhg@1cKqKV^AINDddiD>DIv<L+UevV)o(eI6R_bWu zo6g?tuFhu42(tPBT?0L4qTN8y(cf+0sGI9>beM*=U!chbwBAbpY@>%lEF_GLXQAsP z6d3QliTGkB-L@E}gAclmJRd->Ltr18?Q~rUrlaWye-A>#*Zm!GD>PMKJ9YO~&wJ|l zLLK|*G$)_2(;>bRlejjiIvf{=<Dg6LYjfD&62_X_z*oxnO#NXU>ppb^UJ0?wV(3=W z2&Oq)wDh~SdykXx2t1v|2|su*$kI}8f2FT$!5(l<ElxEOXOjaG?y9@i1$F!majxJU z2c5MBZ_T7fN2>8HzX#~oRJ^tw+y>e8;u*AQ2VO(Z7U)q*8$yib2hTrLe^1vo+TBJw zI>X~&ZTTn>=gxYg?_=5Q!fZfUwHCx5GVjoKvA86RH&YtRr?V#{o$+5<aSQu={eE2; zZ=ua(cwLf+qp;8IUSgZVX&I%or>1^1)u$GqsWNLTzZ}oMkh=1yAvefIzsdj-`I)?K z)wWgY2sqlWj=$9{8)~$WvVyPPOJAqr*A?Vri#j%upJiaC5<<K@thegq8vM8?K|$|_ zct<W!*zbz?w5}4LhvQeYr=RO+Z47JL7whXre{a#&5CeVBdtE$hKrV{-F2tel!|LB; zJkaGAcs&ZQC+H$4&Z54vCgArP9+5#8R_ztk=2u+9m~EQhla)7|jI>vFIpv1kE!&jy z9%!wsXF*+btK;wIVRDGS7b$BSUJQ0Sc+X*NX$d&1!uC9+tzo`F#%4C*fBQ0~YC|{B zjC?iFmS$+v-m|xSAL2Ae@m(0frqidKaFPqp$bx}(*6)#<@#=gNyr}+qpn~7UTuXXZ zMZfFgqh_wJXxCf%J_Sy`bZ>+2cX;QBd%vsu5BNBaew*;fOmz<c9n~A!)5te3D5JNs zC(^cG;_I!xJ?wrM8w5)q^rvjo`V~eT&IW?FlIT)dU(4!yX3wv9wjYE&+zY@$bofSZ zj(Fe9GrR2^PO#GN<Gu-NEdTT5x_iHZJ<8mO_KV=*U3}FOw|B-{U0i#>NiQwwrk)Nk z{1VJJ!@F%=`?CO3@bb6H`%^g~?@c{po<_!=#l>u*>NuvpFJQTkZ!7v8cIe*Mx1bqr z{NGiESgn14({JNXXQJSq1|nQ7!K<L3zemv{?`zKxGTqU8b-iB%?<B>qVgLVXef|Wl zXTk4MC9Njc+rSaL@)sTV04JIa^!}q-E<XYs7SiX^`c@22KB`sel^gWBQ|9@QSMl{_ z<Nd$InlGT`U-<nZKEF)gUPWhTYv6|&U?TVszb*$s4~H3(q{>YL!hFsxd?3RD2(vdK z=3p;0_|02K66s_;fUBsi7Rg_VP9Z)O=GYFx&0hSwD^a)D%ba+P$0G@9l`q;CPm`yP zppS1~hx1q9JJ9DP8mu`E3GtL_@Kiv1!uoBy7g_7z2Zq_s;G-s?|DAu~Sr|_Sc`XHF zVV>!4&yRX{zuJ!I*;%*=9zvM)3N}9h9{yEISciJpJ7FAp2psu82)f}I`40Nwgg*X6 zU+!nucB0K{H81gd0s72mkG^JE_q!i#!cF}TapQFO&PolvODn#RnU9pk*fqpL?8We2 z7#q9;Ct;t+Jnane(m%CBq*@7KTpPw3@@lw$LQ9Y9!%6TLxS@@*4=L#mOPBysz*N{1 zZ!f_A(d(A>-bsWMN(z=hE{H^_3;Yyjo#au{!bd;}t*xc44Nx%n3iY+R29A5mHOw)F zyrEGoGV_HOLgX&wbc~?`oht>`jok@zUOiENtm{`=vP&)dmGy)7_9|nC>*xM{$Mq$D z7k3S_1%a2s+{^cRv>F8aydK_ngRl?cyuY0|q*iksXk1Ji!#FmJ_F09W_$<W2&v^fg zcY}W&&JWoH*Gu92D|FfjCm~*N)cZf_#{s1Uz4L?XHn1Li2}d*C3v=0%z!Yu!0E_^A zJnsg&`W@x~I(V;R;`Je${GYw-<|N2gFFZEf?-6J;4E5esXV~ks1f{;g1DkkV`&j&6 z6TPo+mP&eKf)t4|bWXcZ<IJ6KvB15Fcw{P0Ua0-+_2m#+I)0MQ|BughBhg=JNE$1$ zT1DuZ{2(9hD~9To@lS1ZX^RFU(I~8mUg^7SBzOlZt|GA?dbh84TX<FzJu0G2bu@V% zR@<ZD>z<AEewb5Uh3a3^Wgmip>gfu)yZ5$tW+-=|_tyG-7>&-T`v3@Qxu$>+(|pnM zs(7T7I-bC5Rq$SzU+IGPCgRK4WMn$Jj@ORC+T7ZEwa~Y6A|y$a@9f%@8m}k7Q}FGA z#tZ&>kl`z2<{aAp>1mkT|J^(1;82zXK1v$pqyowDx%1rowyKv;lmQP|SLU6sT|=Ip z$#6Z!-yxSlh?kGUFC&yWNSOoBauDd}?>GGYI=T+=-utc}xHnB(=Hk<hiM;q9>dUPL zH+i)*?8ypykF7Ek1D9`ATZbzvjKRBlYnb+YjMl*p?gk;h#c}Nje%o1a$+O_C201T; zMq&OwjQ_0i!0&RUxqhe2Z(Ub`ZQ6Z8Tf+QzPIZ<-kMh0=>tBn(N{F5QFM1o|5yom{ zKR?`Lh40kp5F(IP|HHU7Kkhqyj}Ay9F5nz_?-ut)F*FKesjvn%B_2zo{9Nc$3^eoi zd)gUd*PknK78vcVmt9MOEPiM3U6_Z<p*=<LO-XGk0MaWb%yR#&Ux!^c>g7f~Iifvh z;pJaFe@K4*wX5MQu0O%@9)aQgYCq!sAGDzpDsf!~rJAP!N0l06XbpY6$Mrl2I}yUp zpjd5{IS)kxKAo+>m-&MnpJXGBfnUH)e}{;6F`QFR$sM%0hyHc;eG^a`1nnApZ6^_c zU^}hFLbWpPR`p$N(7^Ay?meNOxzrmx_bednNldNGki9>>aand+p)e?~rS-{oGreu* zyRh!Kih2X?i>tE=sE!up;XJG<3UPt5-hG^=$W6X;ct7Oc4Q)%0&PL+u3Aq9Ow<q^J zJ$Dp@b=`a6H^i7PXnU~F2_Oksv|>(d(4Ia#H35#=(QQw`QXzOL<;~~aAFhl~l^N_} zn2VRWQ7c1qFr0s9j~JYUcykyx)=_d}5b|n_@b@^ijQ4z^_hu?%0hyYGB4K~Zhw7V0 zUcLr<&?e;cI03Ui<LguY4l*C$cfU`$7h>(f-f!^EdT>x%FVYT9HpZWS<Akg55pWzR z6;`^0*^65^Caj~nisSx5>+|0Kn~Yq?kN?1Dz<Yx6vHg<tRBsgP#cIB+fAwKA<Q52H zjAoz}ItG8{4LE+2tPJ#ifA4g|?;YSj@XKH@&NoxMKNEds;DxcSz0veJ&qBN*pKsFp zK8)b3WKJB<mGV32#3sIL;z?ugG$cipy_wy+QF`K@9tD2Cid%2fXTdW}fY0D374uyK z*H@JBhB7-UubwA`Nq87BhWVR66ZK7yG5h_M7^EWXQ@VgYKf_oUL+(~~$fI`0`$cKf z;Ioa=ze&m+Lu0%FYN;!$63(OPCiTxp<H^bzgO|o7{%tQIj2}alv;Gcs$j(asBCrw0 zV6prHYq`n$N$(xjubt}Mq)+SgZ;f`W$6Mcd=WE}G_}53u2ze<xt0(N647PWRYsmW; z@*spgxkW)vkQSywu9$Q9D$GN#^v%~G#Ib_^VAWyb9Op>yh4Jcit(yXyBk)2)a&-q* z#^SjQzFCxz#M(9SngnMxnMc^BPiNpGyY<pf#+n_qf3Lm#+?kTzluOmQqe(7_2b{BB z^<1=8yb)*o?Px>mRvr6djj=H*477@I{$H#;s<GFjRbu~%_K?5ey80V<9;?25@k!)f zu<sf)@%xBaT^n^yO@hy?<z5pbhUmK0oZ2cJ5a#5kSf}%Me4KrK=DZW)<sAuYlC6*T zJnV65h+aWzL+-BI`V;au95X-iyYKFMw=Fy^^?q2#S5A3(;VHzZJ9$6sNr<<GWdj_v zN=PnOSrYq%%rnQ|i`GxLZJoeP<BeNloqRYk{BhdV0K_ED`x$S#7jld|Zl2%|xDNhf zh!uzPpl(=K{d~ML=Im?w()#L&%0HmKEXHhSjM+-XMCCMfK8x$e#&2QGQJ6F7j$fDK zks$f6<Mr`LQpx3*LjGH;*FeUk#$M<%Jw|pQ95{~uw%U4zun+Z!y{gF)u4{LQKRb_t zMD?K$_8YO@^lsSyyg~nSs4MJu7?DJd80Ck(pXdE9gbpXwTL(Xki%*q!{>~_KMOpF7 zi+Jm-cK3*}&n!te-#NsdWAU|prSM$(;l1c551aw#oRs?V{m05(*Y5s}=-`Jp@Z`<t zy;$>V^2Xkj?|ZT{GG;nMrl#{2PFowkKf(IdhoV~Ycb2$szQXwvAICk!W6l;vpBQTl zUyZfzM}EtHV>3iPl;7=N`>P9S$8_^yXCB^;ej`uVU-ImwmGkb3{hVRl=SS@HY3m+q z#lmw^x(ZK6@bik8|K-$gO~<Z+s~l*ZA0H<rx53}t$^GLFt6ru|4_{Hzm>TTWKj z!o_=FAPD*)tf&2n4#^9TyJ@7b9(NwOUy;CG+aF#)`)}d%M&5l6|Bb<iv*?T)>WhmP z-_yqz@azoF=A+MN+U!YUym12Ft&Lt`eU)8U)(Ke~0ouTO@R38_r-|N9%VsZuhiwVg zwzDhU>9Vfg33Kja=**t<<xLi28~e6P-<HsWVPD{z_^Yn{L5J~kvKV{SlH84Mz{6q8 zQw*Ob0nL@M23`i@$u2Zd1AWUyhgMbIY2^&2OLJL+5}!mKY3uO6NFtw|au0(O_~~0R zy&nHIvp#Pz87T44{GWWfYwu-<EOY+WK6y8n$;%w^&P``r3~`3kPd50~NG%Uua_a|U z?nWDt{|fgWMn^d7Zr$y>(Np*<nZ6E)iHn{}4w25<h;t6gUn!i8As2CV`|AGG<0c7L zqX*(HM{nJ~8ZCa`xdZZb-*KMFd(Nf$leI`8ziC_ftIs>n@1Zly1|*e-h+NDeuTN;x zPWjcJk8_S%T*UsFu(#zud46t1o6(Cu$T5A%zUL2PljD(0_Lx5!`Rw5%a=2%T6o?Od z{MiDu>;R`>%znlG;%4%7jEl2QFwS0oxjdHBX<g9p-B>v-oEclpnIqrWq?;U{hFrjv z?fDoYPk#<_bk@01H|2tSD8FbCdhi^ccpQCBq2G0~JC<I`M?NdK4nfZ)bk=x$Jyf0F z$H`OlP;R=1)@{aHZ>4>u&@|*IN=7br>&vh7^*(a(h55}%_^B@5>|`Hi|A)z)*O@BP z22R?c={NRXw1=ZBbX8dMum-REfPZU)h1yh@UT94oK8{HqX-`)*j<w%Tn>v9oU$m7S z_>_MBnEoC_Hmw3QcC=m!pLCXQ@G<*&deK2Y(mx5>`j~PZ!xi1_#a8#_gQ8no%NM&} zj`Cs7EnDPlmcLV4agi*Yb;@F9%1=vvLVR;)f<4{l%onL+vvv(47u(6lpW(UR9jp~7 zljMQe+f8|uu124xJN}Bh67BQwFS_)iy#iOn7O&cSbi;Y9a%v~P9o?7A+9iA6Z;+D; zWb^pLn8?o$l0=5cHJp~sd5s<XO1b^$_N$;1{XPJVbI_xQ?B}|`Ie9uhK@Qu9+@aQ9 zvqR0{VVFHlN9|YI0VWdn5cmHcYp>G(7x2;y`+VMplTP$WesZ{jj-E(wp5-fj&tIF( zZgltFIJmt}HqIxA$FTQ#^lhm*?C<TJ`jpN1IoK)d39f0wT5bAP{m0<{N!Q=(H|UKo zO7P2Mm$zqKK6rfHF(JFT&Md~d&Wn@pq6FKPApb@1NOsXLlhE}ldOnZu(&E9wU@P7V zJSmGtw7)jh!?Pg=SthokC7Ogeil*knFOZK1?C6_xdD#E3fR4zmZ=YF@u!OF;r{4G^ zS?uS@!d`_nifP1U#O(0iNact9JvHdMEcEjm`VrQH7T3qHPAtR#MkV<-I*olk=YBkW z+DCg1q1#pbut6DdbW{<#Cmp}15juqNdLi$82k&3Q=P~@2kM8TLueJ1lpf<c>fAA6a z-qqG`>Gl<@e$bP1;NiaS!#>UeJlV(9e^xsNCfv7o+5S`Sb|XJI*spo^DUHFev&l-x z#a08~#;9)y2>b9>dcP)kLOWJ#ZwY<ur;lf>4ZW#Ne}Zk^`wuM}v30ZXby&mvD1IJ+ z?<U7OV<OfJAsrcVF!Z4lTPCqyk-b|Ge@(uM>(=mImGkym^e%fjhM!X%t{UQ%r?tNW z>OK<_6FDqr)$9C@1L)aKTf-Xaix16Bkjaw|<o0pJ_R&4~KLs6A0e!#2zw_joUL{X- zLehVoS9VkW2)Vt{VK>@@y=cLA%z@vs^Z!<$L1jM3t899%SbIH_CUe$mY~p!nt;x>` z^3;}}Rf10I441>@L^`VO>mlE_+}{J_^RkOD@|c{jyPV-tJ6Y1mMc*H$d;0i3<Ymo= zMnCg0#?b4%@K#tax*ZK)Lf3<2=mOm~*LxvfQ8`>Y!-%Rc*_jU?9j)E?fjmB|@8!u% zX|mD<Ei$72ZaVTdxjxQDJ*{n9*oj#FV;N8hVltsiTlzHYzTS=}cH@Z=cz-b6w1gal z+>Qm&w{W~X<9wc}&OrKrygU!z*<+H>xAx<sY1kt(D#2Nb@y^Pn(>Fbo??q0L`o8~# z+ywhNoLpSjuCShJIJpdKYp-eZ0DQ8HpK+4kJt02iHITztj@`jYt$Aa!d$Zrmj0-2R z>B+6He<wa09Az|j6827uA$otd@}DFl!?me0zM2W<<Fh+>?lAsqihmC1&-ZXJ7M<S3 zb61kyiMF(#Jr}t;Lq68w_W(DvZz!Er)wQYeE5T_y_#MW#d=dRF;en0pN65$2k?$9F zPK=}Xg1lw+mm??Lv33mq9MPW`^14tvzDB1M{Fra>%3yyV)s~O>^N-u}xZa+}jzPEK zwd66WBPaPOEx{Efjb*>{fkGfRUGtOmw4aF_ZKsDS!(Dnf{z4z)*n@ZD&qnJ%{3E(I z&ia3LVurEMvwZJkXcP7Uzl3+jlbvy{o9Ubnv}H9P<|y4;UHj_LLc{fUslLo7%N_LV z5S@CEFLen_mh<Kle&cClk_%|~EPPdiyC(4SFa7zA_JncU0%c6ahllv(y_DO~y7IGP z1s!Sb;{5)9`1{WpkF8br8|3G(cL%booB4f3@q9EsZK5CWyLy(R!$(O%F5)yeD2;ud z)>dd=1@^a!HoohAOJ}oYAXmki{X%rgA836_-t*M=u0`|R`zJcf@37Z@2_Irva(g74 z_4J6d%fE82Lk~PtOa0gBjg53g6S`tLpQ<I=9EaQe@bncLhFrEE(`&QI<)>gTIsF|C z?%~7AaIk<}q_%(d9b?bW@!Lhd$})N_oN-xFZuw_izd`?3*rKrB_I3Qx3*V2WM=OxQ z5bOP&ZtDymyXds1<kO4ry@K5sibt|~_Y?Bl7aa@0-QRLFgd8>}=&mp9MGNt-)Y>@` z?uVkoF8)piGEtTf7|tdLars{4Z<n@iBfrhqr$@-<=h|II8@{3^8mngooQ654!*G4f zm|>K^GWvd#vUby1>*%a`>_}PmY9RfeoZV=FPG!)q1iVy4o5TEvO?1vZe&i}S;V#ps zA#Y|_sT!yl_FUERE93=w6+Neu;R5``Ftf7*AKf4uGBt~}#~Itj$)n<IcRt8zHayHV zl+(tHXfX#(UWUia+TEA_*v)5IuAaT{`zgG&(e9lwN#)B(YD^(+s{af0r?z%9ho=JG zC;sAZ@z(b^A4Z=#!DAEhkd5E@E?;+VtQksr;stmPG5O+rmojJ^aSdm9Y~;U=eqiqx z|8=LfFTwNK>55ErMOuDyOL^r#mS4I6{r@HV`X_mMmYyH%td_lOMaWk>6YaC|H}0`< zefaRTK@z@4I2+<exVQ?68AH8|{-3j9YshdhdN*X}4Y_tJz{?Bj{K>Ty{@S1&J-qu^ zJRQRZKMj8^j59NmkH&cGclvT8`CSb6A<y!zczd)#^M@HC&&C<g#$|Gzh;@l%J>s2Z z<orGTvFIpTIhhfIx*nj_LU02vWo?XfL5FwIeLXvy#CW>{JCKQwzkzNt!Zv>%Z|!hw z<Q(03J84=rFk|FCzv(c&^4`NNk<TAwjbw?F?OMG(`Hs2C)fwex)u)bRx_GQ}OT-q^ z$SZk}kGqF{AB|_i8KM2r(a_y_W%1E+`1v{QI_Q2kJXRe~&M-#EaNnv*=Y=hIMq^s< z#lhW8W2DQ@Lp+i?MWkhF`(;z|rJR>OS>C<{#*tm*Bj_YXa)q3~t)@zNa0Z$CO1z*s zUGmVpR5dp5y$Af5dohum_r&$%LatDAaOC9^vJ&PKuA)Qm^=Gl!tN6OBoCRIWnPA<V z1NSo>6!MtOAhR9t<a_vb4jIV;=LL=18wQ>s87awC6X#pjb$;DkXB6JMcPqLs?uHz{ z*X7i|7TurpvNNwQMK>n97~LFuC0b41&7t_}ZS)U%Cgfx|&QBkYPXCdcZ<M!%9F->H z8`V()yht9OcRwq+&I*qk$#7SEorXRvYb-GwUW+HSLdRJ20Dq(%S*s2AyFFW`?epCG z3XSGEGpjd!m*D)ef0O<b9UXJsT$wz!IN=}X?mg$+#SPAT>vZ>i^n$ba{xIfz13yno z9v9sr4wDeh6L!YOyx6PJp5Uzh<@D{(c<QwCuFg7h`U)9ZiFZS8l&P_4o#SC$LGo~3 zW=dziTdT!C4D)XzwDB5!Fi-nF^zD2xoa@GGkGU3zi;)9Z?rAn)0)4yMx8FKnaWi>6 z&*%GqAH0Sgu7nnkg}%{6vuUPk33gA39ew*S<X^jCU;G_=d7RTgH<i_%5JN610uo}o z8}VOlIw$N^*+M^uSn6@Iu+Z-=+7;&i*TQR2e7=aBHp1&!V&rNgH&gLeQgtoVgQ+op zJ8SHUy{EULgXn_Bbn9;8?d16CNA|peZ^Ihl1@uonyxNA`eoNOh7TX=ohw4w>iYCt( zDdN2Q68aYQ@DxG2JAAse@H$$IKZbq!4;_NuJ%Mvm(S`Z(!4XNFlHk2o_hTbl>8*pl zy~Z{TP40}D6maR<oSuurLs!^>rEzBI$lGAClmz<ZrZHK_{kEK6H#EqXHgu%}h8Wv~ zsN`U|8<XDS3pyC%>@EK7e|$FQ4}PKFFD1JiJ(J?^=&vcRMq{0c*TflGgZVAT@#Sqk z_7!Jet&d9|$uFk0p9eNEHcMoz^V<)BANY{n#N=v;<1Ob?9P{oD=bGga-}&`^#z^6Z z8LihhXBC?&@|*Vmj0ei3ur?xvnS8n-9h$CjzU&?RQp`BIApMpdey8EBGko|8VnRp7 zM6U2RE3@0{jUDon^_q0xO#0{|e!C3E9ng0Gdpn&S8m!OL#1eM$A8U~7Y4|VX=)cGo zCud(bD=QuSdYB$K&9*iLeaKg7G<a28R<NZl_*8S~q3h)Aq_NC4<Dh=VC)e;<TKJ3@ zi@%KqWkEABqMi?&>H9!Tlf4P^a;NCh#bQ&#(XKX~e#-YR1Rf{<<M^W0>54IY*I4}x zen)aLR2P4yz?+-l{uG!Kb3eMBK76R(qm2VXTrZ3VcZebMX7f*rC8YzW@K;iHtQ(tJ zmCyZ>v-P?-tEacv&Q!X*4E)W4%aYnKRUPfg#SZO!%6KDAf4`(#>w>w;`Pi5xi@w)j zi_`Oe(#qvG8l4)^Il*qP3^65f@s`Gr6P+o0T27KobZ%<nq_BrStXF@6eVk2}4~u1_ zVAsDl?n}&Z9w%ldcJ~zB^zMV(V(kAJyM+C0VXr}$y$bVu_I-(=Uf^>c786Rsmc5D} z7Ap5L2<vnHWuMoxza5O5Dx-T@kRFY%qTkW`a?Z$)Qw816k-_Ki!H4*u5<N3YnN^iP zgwD9k{$-@w9s$MJu|xQ+Cf?|7Y!Py)rT6zg<gYHgy&rfH|I~u}KI+W{*UjmuPswu_ z=TG2M-u7=7yfgtN>8c*|`X3MDqR*4<T6}><&g<!t)O>ETG?8<3;H(tMA{Ua&Ba0U+ zDKjVhr@e14of!JDhj*iM>86l_F)tjxzz#2f|GaEMcQ$XUeup!AGqJHRJCAqoZMjL< ztKZS@5q$Em&8(}PJN!aAdyJfk{iL|!R`zZzo-4@*UqH^DBG+#_V=yWH{g<B4L`Gi{ z*XU2rFCnMl@ScP8R26#fqW=D(A8GOFU_M~T?^c7%6xEKf_PinbPSn<rv${Q>JO^9C z+ZRU(`xV4j@p1lS&X3~W3?-x0;IS>;vYKw)5@%1bGinZlNzUjAdo<J1vw7jZLeeyH zXJ?8;W3tI1^C-QLLrgWNd_T@NH7*=s9Fu`A%+AKvVpC5WuLK*OpN!4JLv#5qrPX(m zY?acYFY#D?vKiI|HS%{;@8*iPW`%BC&u+iSckK=)=-Vdt`&Bx=GMVqnuWT&l_;@lg zVLEjQehO={(|e~Oe8!1I<i~qQoCVq9fwjW)QaLyZ`J$WPyH9+R(zlPe?lblr!{@l- zSsi}D3gi9<Xt@u5=dxcb@OwC`>t+1%Bzknkt4r``8f|T-tvj_d?1z1pJ<V?TG7N7v zCu{x4MMvYQi}d1c^3fR%tAX<R{wCQ7xp^9r>7@Ls!t}&MG<(e0@FB=bMuR_|o!qx% zVLuVO*eABo4NsfBh;AYCN6oPedT1>m{=Sc<<IprmY{&;1FU}@DPV0rejw^l9iB&7X zeq|xg$y}$yX?}Wh9J?ImJqBshGJS1F7p3Nx<wlQW`cxM_M}P;Q0NjLl=~j9wC0pFb zc&|BL3;S}$;qfMP;)}k0Q`d@-+m-OJ03Py(I3yi54IT!u4c+2mBcthq17VzN?0*z3 zhlwv0^vwe84*OW2V~Z#1`$n*tE(+^QH^E^8P?3IqRE*~xJhIAoG%vnu8<R1zBStPU zx@Cd$4RaYA?@)G0dc=;bL>z3xlhyH25B&)HtioBKMfB?yz6d#(LLP#UKkYJmH6Jbi z)b<zY_l5A^f$X<p=Uz7U$wHUNoE@#GZE5uVGq_(z=L|Q0(GyOV(V@#dpKpAc4o&(i zqp~k@>cd)kr9KE}OH^{dWWY6?chv9Ao{s^Q&?3xLbVk3%XcY4K&hXAGyz@QX9M)Qv zGaLOHj(v@fxdi`wXKXw~I}RE%J%{JMHlEJ|(xcZ6I^r<ehM`PX=S`1gJC@U7&`n;& znAy#L`2@rH{O9;i;jFVOe8}LR=jD^-#*eQk`y84d=U3;|#*l}s3Lbt6?^M;d&y=4I z4_x+MKI6I4U?iNp19x}zcO}?qygfpDR-xV3XwaB0xNV%iKbiRq`f!AE=SGsBA<B9V zjTb*~y4C&Uk&o!a%j|hS^m!gW-tt{1b|gQ2l%1~5%|3@5Rbl@@88pZ#&LU%+bv}2^ zgC_vzoZ;ur`g=(m@4@3u(BJRH@Lo-QkK)m3-fg8%Y0ayggpUjfS*_K~5qVi&m6^`Y z%V)l`5<Rn&>}=qh9Hdhgz;$DCd`x+z;It3EIfL&r8gE`_7t$MtPgZ_db3amiu@T#R z#Q0^X^TbN<nWmG!RQPR^J`G}%!g}Y=@#%|X;}_Sk79p&+cvk!KqDeTP;0g#iWrk@- zFY^7aZ!W^kDL4)JW9n%`IBTT~-iy*H7lIw6D;7PFYvKN#=o=5Lv83xO!O|V|F68%z zGeP&zr$3Oz=lMi0EB_%}&jxW~4tx1WQ{d&aIfm@?UlMk^0{J?v?g{kCC(8N}?!vr6 zZ+IN9z18$*8Qqx=<E7x|e5h@I>F-4HJQ%$Op-)P1oez-?e_!`JcpE3he#;ocuE2+r zl`#hV0uL+c<#_(lQu_QAP@gTY<=avCbTU4AsQn$lX*4P?_gF{pBHcco{A7T`!g#eS z9W>3j>n1zbP7dhXWVJim9K@d^z%}i^$`<}YX5OLas`BaX(7T`Drvzizvi$H@oSWF1 z9BoDCdGHg?d>M~krP+c-adJ4*alQG2`N?=VE2x1O$6#k+Ed)8qX<s%u1>Ld7IQ19y zxHJ8|RlGl32bmuV>xw4g;qLsmdvwScI%Wg@40HS4U?|3TBeTAprSq1GCFGNDZJ8MH z4`K-E#4`qp6ZeP1E9kV0-R%Yj`u!N&JdoY`3QS-V_TrzgR--3<U7K#m0&e<!1ueFy zuQlAZqqirBsWgYTRQi+$e)iH^>+pM0?dpq`59#V~p1@XRmB$C=@XLAQjy2*3OKIQl z*w*oQ>OFKki`Ua6%7uOR?9@lfI0HxFjFJoV!#p%7q2AzIhLv?;uXQ7JgtZ)D-Zt!s z`qCJ!i1@;De4Xa%%Z&f_sPhLpvm5>zMv87GN>YOP_lMC}>BNcj)(*eJe*09~dXTIh zqdWekZ#I(EZ1^*dTxG?>ub}(%IC)!~ADqg#{cIfCk)NXY<py5Jqy7=vl$_p~W=zqH zKHaXYrQ#m@@nRO`ha3b$)K!}9*+4E=(Xr*t@uq;27`X4D&0(i~Zobf3{Mj9D!ns5# zKrzqm;H7`rxBCxMimCr^Fa9*|ggpB<;IFOv%8LiRil4$+Iz_}i%J3zMz-P$AJdIvo z2`BZ`J475Pvukec7>R!2Or)@nKkP9K_Ny*h7S--Sa5j^i1-&p2Pk+O1p2KUM$j~zI z8Qt(9J3Wa19rEFZ^L;ME_b75%fi5gWCTsI!Z}Yu6;+IkEW!P7HG3J)It$dx%giB}q z@-#YTK)-b4@ey`-5}fq5#-pY9ekF5x)$sPWe6-Kh9oA*-M3cGrA_fhg;|I+^hx%k? zo)|$*^79_OUrw2``Niq*Nm$E1UEHJ^zx7G;#~X}`I{P~{T{wz8Yl~hvj02zMQa?#I z9j0fx(rq&y$WwJMZKS91@^|b_IEy`;t#Ot-T*NPB_}_cTNO`<6)cv2xd}U*n@9_FW zP!yeVqxTi|F)zGs;=j$-=MwC5W4a^6uj`^w4RZZ6A7ZHaqD66dOiZIc*{TYU`_QHv zzMsy|{|k&kn|t`A63!?=*IrY{Qtd6s&-v51paESM^2Q`+e>HySKz_^x{>)ME2_06I zoqmQ~?qCy2YkxuG&w^sR{j}j#x@I1|vqd{5YQsnP{<yJ3Pvx}J_g?B7sNN&!Fid@e z*@(+*MJ;3b_uSvd_iD%<gxtd?@aq72B|`6nmC;T4$(O{C>bc%?uP~l}mJj+Fdj6)| zPGs#88*!Rm9)<5Z;MscUH-~I}0|y)Fov^mJE1$9w{D+-MA(u}@c+Wv*s<P!FcGMOR z*6_|&wTuBF7g1Z^t*6r)f;-AeMW4^tw?Ej9+4OlMWfxWFU2^xFd98_wb6awP(M=%- z#EWEL99=Ru_$Xvyy?UMK%Z|&F3&K9*Kj_k|blWac+>m}NL^i{k^f>sQuFlWZ5&Dr4 zFRY;lf(`#zpWpFrIkMDJY^FC(?Tvr7qUo#Zq<XCZi<+yA7yIM?gHQ2u$cgj-zt7-5 zT;}(e!SglIZXgJJ-o^7d#=hs+)X{WOYmQxibP6)m*O+TH-pEIfTouC_Wo+~_zvHs^ z5984f@O1@tEQj`=LZ2CUsT~_!j$cp(ez(HqIP&zWctUfQ`nvUORjivifM>276E`H2 zVL#jkeJ_P4dZ2B3x+9D;*0}x+U-RL)1$u4Kzv1xv3_PsC2fe)$V(4$_d1Lnry1uEL zk34_hb+~I2VAjDpmXISWKKd<Po|hl`FFl+fPFM_H!W`G1{Ho8jZ4`SR=--ZQxk*2c z5-a(Vj;`<Ty!a*^{>hD|Bk{yrAT7SS>hC%3Kc&w}>DTJ?cv`ae2mQ5MA6JW!q!%mf zPw$lHuk6EP`#t{&-!*rgz(zmGwr92`<!!e9Gjwao|9Sy#!}_0@%AY|t8neqw6EY>P zEAPvvOdpfo*gFfopGn`-C)(%d*@)N0d22aaejj*&UReyUW$Bz6bX5WH9>4boHh?1# zc@y2bfl=xipV%h+LKlYhr3bY41Ab;H_N%LL;<XT0<qHnPFCo9@Q~0ty{Vl3%ZIgIC zdJn{e&+7j=<+Xs1|LB@a==e5Wx0Z}|F`oa=`lIyx!I}8>Az4_*7jMos%qB-mHERkU zJc)0QsH+QDhbC_rPsbbg6*5oIiH~&1_%Foc3#;?6_xBm^J|eF7qw#Bbah0Cv(3q@* zJqx?ohbX*cRc9FUEmnU;daf9|5Z0sK#h>%w{VjATL0>+u?a!d~I(%0}Ik(95@A&9L zx_KHqk{!=JMK%|KaDHMqmny6ioeHOStOFS;cKR*7751YhBM(>Tw_nx!v3m2+t6Pjs zCbOfPeRmx1FH~P<_1xwUHvpsXd{`S&-m|dwWi!1Na!pi3pIhYn+eE%jZoPu}L*uP? z%r{M@M;DUQ75bH#U2LMA!6zz--$TB!G<f=yZ)?+cY01*#<mGX^`;Yeq!*OA;on&G> z+4uqT+1uRg%%kcI>&+YL_bxj9d+pCEF53;?=OBwq=$Ss`;)XI;DL?F62>YP+<BRHG zGW=ff{z|lK!(N5GZ<FOtPZN77n$En-baNH&nA7=|e07Dp-|<Ra+8`F6H`1q&i@p=w zb!JPpX+y5yYp{VoYF{$&3La^%&bjIwu05I2D++fl;OAvBKT`j*=>K+nn-eUjyL+%{ zdFhO8B>8BP%+8t06loSK*Dx5$A0A*_@;X`0r@k-P)1db!fNFj}L!VEkXS3psmU#T4 zxc>z0DaL<lW8G=ngv-(QtiAbzPWjl{fvjP?YkYSBy%)imS;0tcxc?q3$G64w=UsBv ziaz)bp0ASA>127n8Rh{=az+x8<gp$qpV(zSeoQVglx%cBy2#VoaSx4e!SQAMaRbk` zr7srKCm~ia7f$Ms(d^#%6W*KA`Tgm(9&Gg_vJ`d~g#4kY*x@(n_!vGwaxsvgiL>LB zwPZCP{TlY$g!4u+dUiv*isR{U2F-5v{AY3-&bB$HZ!zpaN%$S6-^b1Eg*;we)zX(< z&8hB|Xz(t3_BDERQg>^8-2+Z*djUMwg}!Nlx5Ig~+2Lgc{C`Mp>*Iso^j8-=P=KE| zgTC)c7US{C0{W~RxR2&N(EBJJ31?QUGp<(6|6}S*;BBhj|9|$qXz(owMa8}5c^)G3 zJP#oyMF^E7Ly|~J6A6*ZObM9_B~!>e&-0i$nP>N&^MAi@=loy4>-DkE*=O&yp7lJR z=UKyEdoB9av{T4)I$wULt=N;cTS?lE1$Z|7G;!iBp6gyEt!F6T4s=?Y81Xjc&QG~r zcjN@NYKM*{W2?#7`yRe?k#uSTpL_G9IrKI8{)3J-arD{v@5Jd2_|#5#zZ{;Or7e^P zzsZhlyXjxsF3xD#=*!%o3{$9QmmtRg+EWqw+IQhYD|FHX+ty%=V-(LGe&(l#aIHsZ z58t3ZX-ACO1Ml7?-aSmL>x~b-2PX@YzWeHx<2VOAO*!yro{`aCq6`yB*Y(bvH{T0O zA4cCf>9<^^p0AMVKKk%!Qs#7)p={@<tKOyGvg0oA7l8YjTYG|WE8oc-OIm~IlW(RC zvIX93r>&ixcI0BlHg9pPN!{XH`0m7)dgR{-z5dE`tR(uC*N9aIY0FikZ(b9wzf66- zk+^Alwg%%pX^6qw@r6w2+IesfgCXd`y$H|2p~`T%6>aubaI7TliBZJup6KjDe6bJl zvlp@R1!C?%dVc%hPIdC$Oib(oe@avL)Bs=eIU{wcV}}#qy6u}+;By&#p%H0xhfl@G z{|daBLz!1l_PI${*gxnB`&eA04RxNew|`i#=n_(0<$VR#$wRmM@w>Y4w-<cg4xj5_ z&z32D;WVKd_{<o*pEoa9Gc-eJEaO6Tk#8<?d;(woTXp}x^(?1Q{)?n{iS#n#&mUpm z^`!e9_Id;k_rj_NXnnoMla=N8*kr!9MtAwh^J(nr7}N<OvHSL<hG)I)gVA>WmAax7 z$5e2!9^BlEf2_to8e?zYhv^B2Qo+wv#Fj$H<Xb$ektGj&YfXIni@IR|?URf=S56&& zo_(YK<=x6ljDK9=-4WKtfHOU4(=|?J&Iff$QPSio7uV4CL%uaULwGW!4|9XLn<3^H zvxgCL7-}(6d^pSsSCL$y?;<(q`()#3<Wr2PJwY6PoON{{XFM-~dHXrx@#D;E^O;YG z{sHglk?teNH=S4#!mnD9=bv!oDeQDK`5bMzbIkENgU;N~j`s+H<Ls}oKhilk#u`qi zd5`ow?~$_CA@_!1-H(j?eS%C4=}X=u)@}?lst4X9F8XfZR?6ExIKeab3n}}yAB5jw zIQ<>h4CVTdu<HxV^=gIxPeZo>W2`lp)%_W5<pZ>rig3T{z_~w1dh&dp*b^V*VxCqx z#;JIlkv4rB%DNhk)WjZP^b!}T%Gg{f=Ii8Uj5!Z{PDT7b%UGc6h4H>MI{udT-2O(7 z6-jRoBUO!q9Q1FpQO7+J>OlFb@-~$-WT!;tMwZgjFOH@^q(%G_qdO72V0<u(`u+fW zEwQ?F-0aA7^ty-fqaT@7eFVM_MyD@@Pp~KD3ih@;!x(fa*8j@I^Or2VFIR>>UTNB) z@SAqzE$Xc^@N{u7pS>0rGe*3Mc{kG|wW+~}MfPEz3n}m6w8g(Bge!)=4}Z)U{7}YW zCSl=uv{kDTd*5Uq?Zn9E!9d!>XTsTn1fJ24C(?c&JRGT%>U#25_mxdP5LY8P>)kxz z8FvOoI^E!T<MnC5`M9mY`upDwhNRvb>YKVs=y_&!EZ{w{**wE+8%(Apd57KXzYSGQ z-Wtk$?~PCmo}SOS#qK6|-eyORHS9nzKNPvYUZ_S|p1M7dI<z)z{!q?`SZgHhuu#_r z{|%LXaAhdN16VgrjYyC9Q{n2YP5(jifpC+136ZgP7DYa~)jO2x=KaC5H`@o9?#vG! zOx_>78~!>dmUJ(4{PyReTQ~cM9=*l7J&Z_SOG=D%PM#TVm7FQkEIf|4oR>s8#UF}P zzb{*80Z;n=m-em5zWXkQ=f|H2f5jZ#XV^3TiC|<n6n7+CBmRv@@%ZtyI7dc?&~xY# zY~;yZ%OETBpZbPh40TMZ7V4k$ZYWDq&d}Mr%_39p=7}`AyEc;ZPKi+3+bbjOZygP{ zxm7%z_V$+K>9^-4m${oioHglIxJS5b<YI6%TsHN}@Ynaf6S;l=7om3dR}BiL{xmp5 zKmNI-`f+7%caCd&<7hDcdbVK2%|W4fdI(+UTm2ljIXo@Z)bN(nE5ZZQq>emzU!TaA zX|ji!r23h+8KyH6u?bJA86l6GA9*qEJtAB;W=+nH3`oinT6Av!qv4BrYWD|ESLW~* z#Hvu8_=}+jQ#}=QjBg%{3`PVs=u`Ab{xN8h)IB(MuVm0FX=$hct=^X5=ZJ*s!z<Z? zcyTZ|+%djYICtuF;a5`slYA`x!SI@(PWW5)C7O|3CNe)ME4!~|=HBr^rlik;CzJ99 z-z4n|bx&T;&O{Hu`>w%X%r_VjR1dBPmucZ%4s{NWGg4id8ZCjhMIQ<G3-?dHmi$8U zu;ka0CnxVtzL2~#+?rllQaA|a5*t2b?~&TU#n8V&GiJzaiL8wu7P*{iOyu9xt0V8G z`6p5)&Eugeshctr<Xv_;9l)-bKTu0&4tj((1aU!=xMM+uxN&js1%2YXhKi;d5owX? zLilQY>u`qn%;6hBvG8TuDf#FR_NFhpGn|fA&e}-V<XOzTq%KT89)#E@jd?KifD?Ip z=|&`d@FKkaomr<-LwSQb?1aWs++b^@0i~T86r`0|I#iriV2ijz?98%+w;X0iI&*9l zcR11{Za+P#kLdmW6CM+=zX^NGbPU}|F2J1jL97Q?nqKH@L8hQ$a3@F~^or}tv+Na& zJ!E8j`Z=F|B)4Zbu?HeelK%|XN$wl&l-xbsj?cZ5>(DAc#O@dkLeGVJ^VH}SW(^l& z7NT!lFOMYhEVmfX(~80d_NWMd#8?PV=fkzwPqQ@ri&Bw^tN`|Q&?a&@7|9;<e^d89 zMTE%DJIFagb*Wj#6WeyNTFrP?M$AvIZ7VzCPQZFy*)h5zaUdTnBxH}|WIu-=LPx^v zkU&fNt;o-z{X7-R#lL1m)X|JK6%ATZcO`}Q2b01Lf&oOT_n0x$F?=NQW_WXCWcUEJ zXmLi>SnEApI9L#_5VQ@S;;CQ@dY8XMDupxA0$v>6lsqatB>BzoJIOV}UnN%wFGUZR zl23(mhDS4M{|U8j>!2iinZHXv^h5Sb?a7?-*TDz8^EsRP{BP>hY|L+Xmpug*rr==s z57zx%#Iw$iLwRX^I+v+k(4V;bcX(3pM!0Ig%txN0@1_+!lp5+VD{`L*x1m2YBXWd! z4Bv#C(pnhK{1sMti|ZB2688deyGm$EP>g*6TC={*4@BeL^hX{EI?yXU#pwCJ;by_c z<N`s3<O}Q_Hk0>EyM_8is?&yMo;f-nK%38Z({|IMxy~E6--Q;@ALz;4jy~*DvyFY; zGKJPAH)a0mAliZBd0%4zb0lxECw09bQ(XUGaxgYH75ae@+%JM^)U=<4O9bh{@xkHb zv+SX}4gdaw_O&bQd_`;O%g|18_?4L&`#?fyAnnOlXzz5T-7pgFkB3cTc>eVjwNoed zYON4D7$k(|@vI{Va`UcTSz0$8n3FY(R=~&f)mtM|3*H0h6B-p>%DnV&Xb%?68)+51 z2qv&&*kxv5GxL*@=A%7unP-1{X}2DUd{0|s9&OLrK~eVZdW&`IXQ8{}>_K*mepM2C zF}g$20>%Qmhu#d=rtO!JKJ5<n%biaIoJyZ@EcO^3IUSzGdJH>hlU(CnfsCQuLDo<n z`j?N!t!EtbN7^a9`L$zY7tyu=tJn2qv~(jaryzKS@t0<dzrRk)@DtW-9?IB6fBKzo zM;ax!izFmhi}Xm&%veBb_K3?z3+FB7?oW=?4;Hd7&I0BY^x=7H6V}OS#W=ugw9vcL z@9)jJ0)0vIOWqxv#8_e<_8QL-IS||nPY=>Z$_KURbAQQuWh;3$`*$Q0ZLOKfzp<BU z9p*o-3oj41AWD^kF~h^>gZt^P58#~--p3;<9%l5m5-YkK;Z6Dr_;VLDosW8cT~H~K zE^aLI_|Ef8!acm*#UYu!h3R)Qr!*-kJ7Y(M*q87L=7-&65AX}5aF2H|vcs6?c;4QF zXQ1tPhFOl1WM{5<UY=<-2vvqBquG^V6TQuo%s9))4AFj!EM^KuGv?KrISX||gJ^e* zWA(FexCU*xr$a@!uUvQ>WAs<p!?qZuuNjo#$<O8RNcxNA7`x8S9DjCB39qNGl@RoR zBXeo3SL7*Gy5Ox~YEUEiH3)(>!D7a^#?XG95UL+q!C2VU5bIF$4#qL~xs>OgAM(zM zD>ELZHRaAZQy7g|k0ejwd);_9e=5&XXV8)xP5a<u#;ZEgK5Rt)sVe&{6ogys<Hu9c zH<+njhBwf&&<o8<T2*N`4`ihI46U;_f_K>?t26KTzQA0!5_qT2*_JZz`dxTeGcqY$ zH1YsF+o_D~WeI)Fnk~cW!;j{w3A~g38GEI?%e&V77{8eacXrVaX76s=#IA`qm@8JW zvdl?lLPl6kE)QjB#mW}LDCImjHkP+p>ml{o$gi};Ps5ia=Hl<;-MmRe;jXj+tMYDh zQQjvn%~*5=-py;oc=a2+o70{BLEAHa@d9;sBla~c&$GAkks4U`f5E5h<usQ)K{xaM z(RSXISi`)AnY5bwGJoq?=6V#QEOE5AQ?bud4)z`?$GTU|=&f~%RH3ahAl#S!?01os z$x|4AUdUd<tB~lINa4_UBEYvqfJKp^^h<}(6a10d<T5KNR16AJ)43OT9DC|AUp($a zq%FRAiC9uFc!_xh6GCI?1wO${f{o$T)X$T62J!~`9MjVcS7D#o@{H3L<rz#7*7YsR zItKOW+jM12WdzTuCKEfp4s{Fqhq4Esv7X{6#*=@d-}4(|{&QJlaR~cqbi|Uih;v0k z%XzBVp59(bR`V#2#v9PD%SgTX4ej)N^qKS1ADJ6wPZzA!6Xw*VuX7~W$oT9YTEPd| z%iY!I5}CVEj9RxOYZW-V;dz+WGgLMBmGO?F%t^k^^N}>c=Zvbc+Dh;jPX>SHDcPt< zc5129^xLMf27RB<X<D0M>XJ5*D#X)l$jbh!!EW~KTg5(btB4bu;lKeTKE{)V-9(E$ z)Vya>=G)y0XTw5uSo5<rE&i86ztB5+m{CvPb(+UL%kYdIaQYHHF_DprsgWhHZ8z(9 z{R3BAL+&EA?+$FpO1I%JsNH+B@Aj)amug6Ft`f1UD*fZu#ObeiwzD1XJVAS?5q|eN zQLYVRJ<Kv>oa}0NW+WW$#u_3W=~wq4#`a{bobE`~kG^Fu-Yf3L`+tLxbQaHIHo;O> z`C*LZ2K~Ic^z4q(Q~H3}TG!ELIbvAtpe%FtN>YCpp@u1mb!t<Fu2^eiWG(%!I>Aru zCHXUBu~X6F50Ndb`0yzI@1S>b7u(fltZyJ=1+F)Go>7+q)TM1%i)9%7xP75LSYkh| zx5GrG6YL9efw={7Jm<(0DnL}I247zf)xet7=)qT`_0W{w*YlyxNPjSrpBQqF^&&R% z4*DF{pq@tm{ZH2CyB#@<$LC1tb(f%*dLOy%<I2B?&r2eUBFoVKS^PggsWxX{u-6%9 z?Sx;{=iT+ES+}Pu>DGeR#n5)<l(DC5FsulXs0p(Un&VaZDg8xigyWR&G5V@~SnZfy zQF%Y08Sg~ZXYLRDA)WQ1c6icoYVaj+e=T#$rm=2)7vfevzTM&3rZaOAsMoEj@{^A1 zSh+Xub@r1==J_4tJ@h1bvk$9v!bSsljy;$$%`Tx^;nM8smQ1g98@;XHs5fY<GFG{V z*1`hHJ{TRg3mrmhLrAY362DCB8p^s<2P3Zk=KRwl)cbj8B|bqMbfwl$VfK-5G4>@- z&-=h9*|++y$O4X)m}R*hiE<IUtAxG>&6tDZ{yx*t$ROIfpD-fhs_WmeR^Jb->oJw_ z(6y2KY5hEjF48h4u!i?!n-WWRutNHCtn#!g{62g24rl-CX_2<!^~A<Ykx}rZBDLvE zBwxqq!57%4IJ$C0+yrW_Dny)0pdhmj%i>erkmOI=N$G-yw22ZJBf3f5;og9cG2fy* z?<Cda9jgM=$j+HtPfYxkJ-&WrtYrgjVMYL{Z<f;f8N>{mXVDom$(S3$YDtV$`~j|o z6Nvf=L=sjh49+t?vx8@Qo49H{z3`ok-T7R#H1i4Hq2%*JM;Y-e$?Au1Gm85T>AuWL z!BttMr2zWKN=^3|PjDP7c@)hj!0)28(@Jt>Ax1XxF!R^7|M$}B>5La%3}55Dj(B<$ ztSyr=_WO4v2mZP)au6G`W)SN?d<9=eglhAC+%t^Z=BAaF2>)_3ZjvQ5hf$!x*m?+F zGl6<=DD^=NqV0at9>{o12cBcK<6ArGiq~1;vPWbwvFtjvR1MnUJt=oLO4*i?rnamh z(K*zf70>3;B0h`0Pv9jB=~GODcWb#ao*2-Ow$}j0N!}q2<P2sKr+%jnKR|?h4E<Dv zyU(&;OnshTl}OQRQT(e75#=pXY0K_wO<+rXb_XiQOpFXLItkrBOzqh)G7nvUhTdAR zXHO+GU4!`dGIx#P`O#V0a*r|Il$*A9F;G7ADXo@#9LLZ$;O$mo@p;}e-$MIfA$9MP z$hYA=;2fVXQfD(Z#JJOK#=WvKlGKQ@j-_4uIQAF^Bd)=|)Qq8CqIGuw&)grH&s-XI ztET37C>T$_bOy2X59*+u^tR3s;~5*|xR6!lJ`XK~Cktp#?Be}r_Gt;{VGdgb##r*C z?76uBPOjkj%4XVq2N;7*4)2UqrdAk5i{cWs!81gbL9~l+hsw|<c$<FkLgs&7jtpm9 zsxftU9KD#okZCG@Kaq&|6YQIUwR)nH%*ZpF6$UC(Lv0NopjQ^p8Yl%q=^3M{#dy~^ z{QCxZ=8kM<{?20FahS*Rl|{5xw$iTQ9SiE&m+-rF^v3GY7hM=+;XT6Kq1tgJLJi`| zg`S8j5c-w2L*ZZ-b<$is<_9A1Jo<H8Xn);dY?<BDl3RlhSRdgl_&bz$!M|j$!6Bjd zd4fI@DUUH*wj@23Z;|~DD-SoMSJEq(&X~nw_UhYCy>pFrd^Y08b3Bj#K9na|#~ivn z$g_dxnRA)v^%Zli-(e0|XCh5o=2SOf{f=t*OU2OR9B(BzqMy}*eY6|WW2{b_q8#&l z%M!z?Q?4eAYgFT%r)<pIxj;*IDJ|Has5PcXCQu_cW4)^8w6F%#S6#<<-nfh8CU({! zg>rDf)oy3eK6s7jnm|<Dk4_g+7tEs`oyZvf7u2Qw7?U3XxAtP=T=4iMcrcP!y%8T~ z$4s6GO(c$e$NI#JQhI@xhz3Q1s`OWj@a&!azo@m|p*~DPj*)P<6=`%~hTKNl3{~OS zr?B)xVn|a~v&cXUaDSq9SRn^br83e2Ezgsk&m!NG>k*zHq(|2Um}^jk+Q~LaW#$&w z;N4tyz{199==0r&4lYrrufZd~#}nSi&$=-#@d53QA7~l;MO*bxBE#qST_SO9Ix(aX z49~$+-2{AwUKu_7S9!;>Hnq@Gv<dGZjr+8xrG1r?z2+(sflA>auD5lBJN~5p`<)is zTH5A^h&;!rsgE)edloCPe>71)ACc!_`c};FAl-7T>zSP>;NEd7i1FXDuH`30^?pRL zFVN{vw3#<Wa?sX&jJ`y=P(7YJwjdI=;&WTt9vzsg+L5+qYhp|VWM{8;Jk1p<K0u!H z#HvEUI>uh+(+{4-ytO}AM|l^_a&63##O5xfHICZpPom%k#wdQ_{lY=4DgHJ&zRdiM zI`m+vC&Oj&aaQA{1g*$tCSwX`;K~2!xtE|k?P=ePM?*U(^S|`iPxCZ%18=2%MJuTm zsXV|4{VAS$GOL2tHSb6e+h63amqWd<bq`W#P2??4pNoB>>4S8Z4;+i|{b_2)2JC!e zr0hh#W2yP~q5J<<eR9pV1L$lmyj}vQev2H!XX{~uQTX6+ELIV{`(D@U*z6Iscr2Ws z^`|NjryGQJQ0qK_PK&^q9N5HJsm!87o;cWak{0Mj>fY6)=Z*}n5!H&ibP97|4%2qO zL=C=+G4ILrLfTW)CZf>`=yfx-z`{u5&^&sM%c(*CAjVE*?#>|Ixqg%VHagm~pg%T| zHS*R|H~ovXnNv)JYELh7CwZr(MW4i2*%X+agO=hb?#M-p#P?;7)2=ujUQC;K4Rafg zG2X@=9z1u=&b^aq+oz!~QItMJX4;;+_&yjbH=%@?X;)lCmj_|ve%e@PXtlUn-WBfN zNQ4*#``gi;tVpcPO&ya1URR;L-w_?X9jS>QW~1$RH1a-jFU13L&}tmc*;8oZ0qV)L z<av!8R>6$#(AyU<b5!UXFp_bR>9FVk&wzXvz8F5$h`Zas*Ur@0eQ3!Kq_6rhHhPcN ze8&{l3?e%H0CTp|hj7KdytE=3Q3pJSZ#5>qya)^5qjx@uF^<jjg)dWQglSdYByQ}2 zQ*(%+(-=eg9h+>&D~_P^Wwb_LVm9wCVqfdX2Hx9b-Xe9^mT+_0zFl~(^foc)Rdn8z z7D08^?yE?Pji(f}*&Bx%5}9hj)Uu3h<v`cGvw|0QhGUJ9tsHU{gDcNae>FwRucq{5 z9-=jxja>86!ei$*T9a9cd(RPnN6}xJgTH@IpS%nISAfL{w0z5=`#x}dC7#1hYVa`+ zZK(|8`xtZb^5bV^=yevvPgBtr-_8iy3`RsJ;yv^6ioNLgGJUW+^u_Pe#$~Q3$N_57 zkLrRh2h)=n4(~pqF73~iqtLBusjMOHx!YMaBI!uldh5`^G1_8h@rT_!YahWFMg^?l zD!4p(B!(ZuLwTQ`HpXA@<PUf<j+piq9#EftZ4G)S4autm<r>7lIdEnJJ(*oZx&w?w z`~!=4W0y8$UZO}{{xv14**B_4Pr5vut;DC=#LK!cxGb?I6B<7cbKSvV7XCAb9?*Ky zJ001KZ_h{j-{B`;(`T86EGLN-<<L`KJp2pl{<d&03p(6G+jk-THyDfTx3I_=qWfWD z_deQSd+Ea+qCPlBJ#mK=oDq@_PE@6)Yyxka!RY!hxdM@*FwwIB{iD2SEFba~Bd1dI z0QLUDj8YV!X3atG_;I4gLqyy(M2L9&)IA5Tp+9#kJH#l>PU?uQSZg;m^O49x{O@CI z<$4HTGLEy7UtLeR8uxrk3u86co<ZY#!4Jfm&d6My(lW+PY`so|jxaWrjtH9@>s2E@ zzl4NuQu5B^-Vw&WLdn_^W!iIWO>}IIUhB{!D@V-Bj>c*KQ|GjWQy<X3?uYlkMJ@Fj z-&?@%GU(<B+WS2Hrd&_qh3V;y-6bxZAa3t~W2<S4uY}ouvA^CL=6P@B^GQaicvl;} zzXU(t0Tb~D_xy5A)B5Pd^@Tr$yM5^0RwR#O)PTcC>rHIkHS!JpxX(#%2rav5q`seD zG7@EK5>Hx_*2~zX8g;|N)H?f!P_wCRhSB<aA9nQN>=*QCrc<s1_+|!1-Kt`*Hk7wB zmTN<+qdGl{Y<MzzXyc!k`TrKacnPNNg0;WH)mi+%oPPFk+AHjq&F`+dRTG=HfSu1W zzp)a1{Oq(q?qP$SFk~)_nE)Hd^VyX)R$<$-jQnOHp4UZ_Z^5ol(EJd1KZtw#l1?Y2 zYe4iUn6i(_H`EQw$dA?fDCI`_JDchEY@-g@$MGCvAFiLx{#W#U-=aNK6Dw!p-#JRW zo;uGx41a)6U!wnyDboP7;rj<2;Ztk;pdZm{4!(Pq)C<t+>;*p-;3)?f(Y%0UVL1I@ z@C5z-wCqovgm3)A)w_7}dMP!*JoNDkHSQ9;a0gMub;dKoH`>$avjW_E2nKFJPhVsA zF5p$#I$iLK!L*PTlJ^CeTLGy*=lU6Znu1Rar6<`J9=E5Kszi$*BUiFZHG1b6A}!Z- z=wk=9m-}+i%BN<1JTw3vHOG@GaIB2aHG`#HVbP~}#OL%02hd~dPt5Pb+e+PGRDW1H zgIf0t^<Hsw+8y7TK#W*Gr2P?Yyonb)%5gq&_JrrH;jZuHeMFw_WpjwKxI$=F^ivPN z=?#-cVfhKv6<^_bZ=|$~3gI7Fk>h_nhj&e)bCFE=cv<3Z5BjFdU^6>Wz{^?GNegLd zE@K|V3a|<vSjWi77I?FV_TN8T7l&77BDUm*H#M+p8}JU1pdS&m8<u~TK0pEZ!@JPL zvSQR8|Ko~d<nkM}`zYed`*5ivG38~-(35)LcQpDG9@vjMWFd9d2J%0S907f@`xzHJ zM~h@SrEHlJHA|tP3e-nsU|cbHUjXiA=Ks```Yt|og%<NUu02T|eH@)0#}d9>?9Pet z=;2{F|0r|*($n%zm$EOr`}6HUri`$?IW`zV{_`2fScBZlDgRK~&AtbFl6&UBp)uq; znKqE4ChpAVURbXXE8gY0@A0?Q+_Q(eX*p#djj!|~-Fn2tCx~wD9(e&7+^1qMeAtdI zSJ4idO`T`U<X39%)#&ylw#`5rh86^zSWk;&H@09d5pBQMiQaF(&o?P`cl_*aQf*5+ zy9U=hf&A=RM|n13+5L>1{{!2YBTfxBfjqw<(!1Bj=al9P;?vjEi!)*0a%!>#{N|c# z(@13+d>M;X22#fMw129A(x4Swn?Tu*qJu2>*K_c0B=P+ZYQ;Ik&3CE83M2hLr0IUY zU9j`hq??x7?MgTc&n5Hol(h(J4CQ3Z?GfhDxL@lze0V?6U@y!*2`k(~Gc8<tl+rTC zlL&7lDM!p~2@l`Ird`OZEx$iUOSb~df0Wr=Cz(0EnA%|^W41l0TWsC-M%FRt@-HIj zMaFiR$%$7UCGxpiH}4=)zT=#^Ko0ld$Nkhw|06H!MECJJ1~=qQdZZ`<>JZ<WQ}X6~ zdme_rLR+jI5wjufu~PV7DWZ5aELQ_&xJQq>XB~pytH4Tn9y=-JQKHjfB-xIRH^3*? z0Y8Gy|KV!u;f%B?b7HB&w7v>alHAnxkI}w#Cu>)VzYi%hl22~(q!&cQdWAUG5}E2E zQ(;CA@8jGNqT33}GM`c`O^H;?;P_;?H<p-gziBZZvJCv5QbS~BO#LeIZO6}<yF)8# z4C7B5;qc#Za5rW737d4HcCL!uEAg*3F{T#muS{F;8QNxL&`nnSk6DMbgH~eyh45|x zz44`#eiLOlMK3NM-r5ezM~p4aSY&0!g{#8h%IK^dsrVMwlSCZ*U-waR=3(Qn-x06p z^Ty>4VriIGMIJPrpSG`SgRRC!pCkKoSgJa`h^E;3UF<gt&7UIX6h&`e5>NJ1;(K^) z5*)fhOgKSGuGu<@G+N?EnbGKB;_Q6%F_w1LK<e>V`TQKQyAv{fi9B;je*>)8319b8 zCm$n^)3i6Pkf-~}r$u^Jti_J*Epi_vb$<fZfkb~pi378U2cywxBXs-^vP~rpk071z zNoP1|_62XlknYIe8+*MEUp_*kBe47oQvVg6OodrPiEN(`GsfbF>+nfdM~0DEiN0A= zT3Ewrt<R#*H3R+)q0Fxkx$;tz|4W<YcPugx8+9Zmz5(w)C9SFSLI1>~HsU`U>CvpC z6|cpPp;J~=hN(-)buKL>S4&@v@2sKBwm;6o%WJUtF0GajmW<GA3KR2KO9QF$;7@z; z>8X_QXX4Ff_{&>caGQDcXuJ?s%t8$DS<b`oAuXlgjXR{yOr7Fh7k8*PF41nY^>mbY za-2Hr0wWX7WlM$Jwo9Go=uT?uk#8j}V`k65putE#5gq(S%A1K08?eVD;<)SjH78!X zS6&g|`W1J`!!_4;(dJr(mR1spwxXXy{Bi<*xsKy@u5tg_kBLxii3!#r{g8758p)2` z`w`<0(}F1wFt#839eFu8&AhhLJV!grGkV^c3tSJIcggVd#>7e9yrD;O1lt~E{l-&R zh4pvf`&qbl9k0KI2cISatRp_nC9g?XVluM$tY<F~EDbs<MC>a=yDvBKFAWjkBCVp6 z_=qd<JAZaBdOC#6=g|9A@^NKMcapq`1>G4a8+YU(9zIB0ZWsC+$M{7zj?Yv2I%u^V z*O!HZ4bk(v#Oq&(Oc&`B@|+57HpjxRq&!hxLw|KDJ%ABJjuFT(gZg<5<=BR`caq;W zWLSYNS76hV$etOyH^$aO@Z>f4-YNQ!2jJ0c^zspP+4I=00CKT<1bR7xfBOznGQBs} z_@Z1(iBjumZ|$K3S17^b#EnwKzN*BP3RokNNWuyUDRKP-5%oIPXQ4e>8Z?FrFVQb) zg^#$W%d?cC8ayqG*3!fE<9PU7YNdfGdf3H#zsD&5zi`j-jkLswC&?ifF(V&O-3yXV zA!_0xDfZfpJR8u{PWo7<kk@s&{Qptvl&X~c6V9%Idl&GRGnDyvTBdIxXBPZ+7xnEZ z%G8YebJCy9L)+ecTE?ThgXqAqv^=Cy5FHgEy$V>OHnF81b!2(URfK3$h;;IDEJC^! zuy1{8xE4gs7FeS`K3tNzg%#HE#BD_9GmNx^=qt1CARHS7*OsD%JH(Spl&}x&&@b`n z_tDMEaJCxx=SAZYym%YBnTDQ5^LZlC@F%$SBfjGv!t1c}6?p2}^(`o8e|%#&G2tV0 z-IUn)D0<&V99v0AHo(<w@MSxrDO>T%y_D!G@yOi++%^0*K5~=ROfvagVf5?}9<mpo zIf9jrQi~pgqo+B#+vZ)q@fHHwJA)n1!Ps*|r?W)Zvq*c57HC@dn}Y~eiU?5+t<<A5 z4UwfTmM@28a-rS-Q3LbtI{6+Yr_<!k3Y&QON!rKPk?<a4w@LJSShEmK%>v^oV{fcq z9VWVq!9_TGgg9<3aS2Va!VR(?LObV>+Wj4F(=NM5{N<f*N>+yNb@9wzlym`c#$BSy zkfwVY4kUIBf*&7akN4o(>-6^P5HIs^d<d_<f@HqK?i#+^Npm~ttC8cBU>`E9LpQUK z<_o0h3OeyiSI!OMw?C2Ve&S?fG~XXhe1p$TA^I$(@4J%tJ&9IEC;T)UY;eSD2G$&l zfB!%)VF`DgppHlb-`vymS+rLl33A|-$5Te}_TjImsLR+#j1n!PmT)i68o)IdrlP}T zwBcr;ub$Yebjo<jEi|19+c5VF_H4#Zf5UQi=HzKyDN3E6XqQMECo?S_e1zJ<HG_PQ z^CjY2b?$BnzM{PA(Y9^=5-_PPzA=dVCZV;7c<M*Q2}dHz@syAi@$jP5aFF-HNM|qi zT;NVtcR}0PXkQklXIz@Gu2QrU3emUC$-l>GkuzVOa#e%xMJZ!t(3bm$67Lqmq4n5h zAGHxr718QbXgC9Ht+b59hVc=eWnm@xkuHUSf8!fBS)=eFp4TKYkEaMaDo)-7kRg%s zXT~ZSQu;1ik<7gzkHeGGq_c@s#$oGsNUt5AJHWnA;M6ko!fJ#_{WxRWS?Sj@pN%N9 z9G%VPm#?sKH}w7z64pS%{2bGe3$ye|nQ>qKCE%wyiBaj``hIxz2{Et)z7)d3r^1IL zhr&l$Yx*Sf*6II~ue0=hC*@OY{5dh{9d!66>2x6-_X&BE7~t9-jmWzwu$}Gh!D-P! zE>Ij93c%>c@F`Yx<qFq)NCl%<yOVrp;mJP{mw%)^IgJv|rKVm1<98Fs4x*D2@P^gF z@RU5n<b3ph^Ds7=jdtcE^oNrf2R=t%YA@}Qb@UOJBgblD@(x&bigA)_jB>gb%!AYq z?A?IYo50Wd_<e0GSqMLg!0R30C+fzJVT$dMv3T}=WaJ4R<D!q#7kZL@dsfClo}_Nb zz<5$xbZA@9`5CE*Eorb{YT#ZA?wIBtC#+`!p2z3wk*9n4X2CD+Q09$Tc`D`mhT}IJ zr_x6GGo_vGUNX0kz&(>(r#C&k%Rs9=Gku-x_)l*9$9_dFG@c8KB;s*7C@FK%Xw5C9 zo|y+fd~eo0@p#(<FHcR4?iiT+J3olr=_yqfygNIR<>r2Ogp$(<v=I}?D}nZC4*ITn zIa+rVATH!dIX92^{yTB$PyA{NzIl{5_z!IhRtG_1cldSX$(!W-FloCBSP9xImGHwF z)SXq)O<62e0yrBeFILE%g3BC3)V&X2*9XxztAOIa?laH(K=6MTKDC-0f5b+^V8(Z7 zX$|o>HMY->1xkTuXs0=XP!OAEfHAJu@d$B(l|rfI9)Wj{q5)?MWTdC{Fg8lVU2*u_ zUF^^M3Y20#zOW4YtRT)T#%q>yekUAs$G5ELG8Yzi<-Nn$$UQ250+aEqACS}adj3K$ zC((pEhZjVi>ZD$iQkQ}mIk8*<5hMq-V-9$i9j)Xbwid@nTEU<%@zY<h#6~o?1F2na zb_zV}Mk$KJxe${3p8je)YysZ%J2u;b-Y#Lktax=p+6UdKh5K+{Yiy98{LjO!pNZGq zk*YPHKO~+lN4^KqKy!33l62Q`_bL49G_i9N?3e<lcyEB7+e2L8Xus>7vz8>fIZJun zllT}Z?10UGlK(9D@jY#ePbgteVq#a?9Uq}{_o&^8tas3R0qXr%k#7WYjwi3-M6eHt z)a~i#mnZ(_BqHYGd@=qn2?q*eqkJ%-B>JvSS*l>c5=4S5=qU-$I7)kA3%<$>7~=bR z;^lQ%$h$w-X%2ahCeNwFjqS+7ig%Rc0ZQb~v~ek3>wc2%d7X{eRu#17s*c#qeL8!> zowt#?KF9R<>>f%ylN=|*#EI0r6R`3exW0m4cA%BRDXoEI`oylw%Sahqt3saT$e|>$ z!L^v2^YRtfEk=VU@%aqcx;plG6TW_ihQH(UAiU){%9(-q&0Cw?ae%vbQ~T`Uj)UBH zg7c1HxZ@&g2~t*{OIZI*fpH`G{tbNomOH=U8s}@x<><b~t_hruvOPt)3a9AQ{T?1= zc1jlJkS5ZP;t4Vl>oyj+j$KY*{k8P|r(%Kkskdrl!7Nzm5^-oLx*d&<hZE;Uz@;(h zejf316CBxvlv}8$x1p8ed^Xm(3)v$u_aWN->GAfgl+)3^hQ!9!Sf(TScc!(`2`0Rl zGWJl7T&uvAa%kUva9-LdPm-tmHYf3X={kL@E5ri#h;<h`-cQ9h!sN0Qy-((QKXl<< zK&^=o?rk{|ZY-l#I?K`B$K7$#HJn{<+!*Q6ohY+`viQ%doE?H}(@1v)dKyMu-3blU z;HpBzrpKuVeLj2)+pZ=}_sdy|KHMvHDW%+o72UzEA}L$vRHv+ol$ljqvF1Md>f5O6 zHo}KZSa}CA^f0oWC!$8Mu=~lmGhRu&v<!KbLi+{K&Xe?m(lScpUZXPPUzm6?rBAz& zvTa7wJJGV*K0*FF;Qkh5*}?g(q`L-vZR8$##0rgAZa4h0CO(a(E|TVTY;%hk#rj(y zA91KCQWOGN@eg;6zXJ0v5<~vwpCfPXJ;fX8SmeJw@{SW14|A3MLPrudkkb}Qy#@KU zk)wMZJMxwZ-shnVg-Np@`4%Am+(hF%$Wj=smLl?(LyP4Yt#}5OR|O6E{2U(Lf*9}| zH6HKJP`9)H3x4V@peNwCb*OEYam2dsIWrxNu0^vqkT)0k$ho#e@HQ~U{ddb@+br1V z20A)`e2xX|;+}o@+i7&<uAgf4;gnX|A((#}AG(T#!gw9)s`2k0ygY^8cX8Hdf2S$Q zSxVxpj59>}i*VOb;>#SJAL~=PM`+Dt;`li6Ff+#le5)*ILfgL;#}{E@eSRs-RgRb5 zLxO+cmbN|3=YQe2b2QI$bYI5JoZm#<znSzMEm?=fc95St$2rQGj(-op9b3SckoPdh zy?BCcm0hH_6TY0MWIhYd1;c8>wyv<ZKW+40NY;`X$aXrbQP2j-#1kjpqs8V^@%arf z_9#3!hwX1*UF*jukvIpXWd&P);T=M>x(}`&f(fqb;B$e>*xB**UijXJ$oMweXoNKi z(8qrS@4t;q$EiQuv(LE;NAUgqaB36v*%G{FF}B$N_G7ifu>Ws<`I{PH4;KHE<ImLG z<H&J5*U!bn<l_<KONQ}J;=lRv@uJw!H5RJC4foY*fp%M@aO))X_IZ4Obp|NQN$zt` z_@CkKP`Ko5lYXQ<l-zjB2r2fV4R`VMdCD$4&(@ne=rVT1z1#S9lwVR&*A~IvO|b3j z)V)2yo0PUKns1JFt0PAV*po<U({o2^WO5feRyjkO$KX>=ys;SRRDiYBsUvF>sT=aC z5s{(+Dc6PF^|;F?kyYSJNg`Ta*p!XyvJmsrlV@7m(A1NpvXVGBoAd|Z0Zl3ElW^N! z?MUzns6z>!r(_@C{q8Zm1*=}gJOA7LuNG0FHhDOYst)6*^@zFk8Rw|YGuTSZEic7r zXl~+c7Rvev`8~j%TFyUVops`j_1*L6+PTfHH0|DrzE67!emdfs5jkxG<VV&gIc6e_ zM~KP(oq>0Mq1j>F(FUv5=hzIMb>+OzMb6_BIk=+|TB=6AMLD`l?>~6(32-#UkJz&U zHrz_lu5si7y<hsa$TJvxi}!quT>a2IGZpZX?Qm!{^TQZNC-)X`tPQ;Dj&+C7E}aFh z*P^{c@a}JTevqrT!Ng_sYkmel!P=$ZIRB@iRbQNzlfCZV^mN|?Z}3E;B_ras_*{%9 z&QIWFsX1Pw<#B=9oDm7UVKS2c$o&(MdJGY61i5@do8&#ll;5GR`YvxM_U0Xj_Zc_u z&GXo9JVAX6{&s;qU1)`OVI=r%p1b#C4ni;br`;&;>pTl>Pi$<D#a_cV-^Szmz`Mb~ zRlBFc_JwG9BN})2?mNh&hgYNz;Yu6NW0$(H>}hK4g0L|s@gpk?O{4`;3|`hDs<lD; z?pE2C>jn~0KIOOfx#LxO;kAi5Iq}5Q#LBBF^_pvF@4^FiQ3LGdN#$8uNI^<V^(JX2 z2Cwi&Lu*!oXu_M|yiE~Yjr8MfkUl|wR>teZ&MqC83E7)>9H;VRfO$wTVK(*lH~7hS zNV|-_a|DT71$mgsm@3pb?lh~p9gLKSr==XvD#r0?LT|)B8Y�FSIAFd8lRFKvseo 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 dX2olEdJ%SCQ+?L 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�T+f(V-&Rb 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%0AW*&8)%t2V4| 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 Y{C2K!OaJr9*5z0%|Ic`7^gsLm4M%a_-v9sr diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.html b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.html deleted file mode 100644 index 076c2025a..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.html +++ /dev/null @@ -1,123 +0,0 @@ -<html> -<head> - <title>Lame.js Upload Example - - - - - -
-
-
-
-
- - -
- -
- -
-
- - kbit/s -
-
- -
- -
-
- -
- -
-
-
- -
-
    - -
    -
    -
    - - - - - - diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.js deleted file mode 100644 index f27eef2c7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/index.js +++ /dev/null @@ -1,86 +0,0 @@ -(function (exports) { - 'use strict'; - - var MP3Converter = function (config) { - config = config || {}; - var busy = false; - var mp3Worker = new Worker('worker.js'); - - this.isBusy = function () { - return busy - }; - - this.convert = function (blob) { - var conversionId = 'conversion_' + Date.now(), - tag = conversionId + ":" - ; - var opts = []; - for(var i=1; i < arguments.length;i++){ - opts.push(arguments[i]); - } - console.log(tag, 'Starting conversion'); - var preferredConfig = {}, onSuccess, onProgress, onError; - if (typeof opts[0] == 'object') { - preferredConfig = opts.shift(); - } - - - onSuccess = opts.shift(); - onProgress = opts.shift(); - onError = opts.shift(); - - if (busy) { - throw ("Another conversion is in progress"); - } - - var initialSize = blob.size, - fileReader = new FileReader(), - startTime = Date.now(); - - fileReader.onload = function (e) { - console.log(tag, "Passed to BG process"); - mp3Worker.postMessage({ - cmd: 'init', - config: preferredConfig - }); - - mp3Worker.postMessage({cmd: 'encode', rawInput: e.target.result}); - mp3Worker.postMessage({cmd: 'finish'}); - - mp3Worker.onmessage = function (e) { - if (e.data.cmd == 'end') { - console.log(tag, "Done converting to Mp3"); - var mp3Blob = new Blob(e.data.buf, {type: 'audio/mp3'}); - console.log(tag, "Conversion completed in: " + ((Date.now() - startTime) / 1000) + 's'); - var finalSize = mp3Blob.size; - console.log(tag + - "Initial size: = " + initialSize + ", " + - "Final size = " + finalSize - + ", Reduction: " + Number((100 * (initialSize - finalSize) / initialSize)).toPrecision(4) + "%"); - - busy = false; - - if(onProgress && typeof onProgress=='function'){ - onProgress(1); - } - - if (onSuccess && typeof onSuccess === 'function') { - onSuccess(mp3Blob); - } - } else if(e.data.cmd == 'progress'){ - //post progress - if(onProgress && typeof onProgress=='function'){ - onProgress(e.data.progress); - } - } else if(e.data.cmd == 'error'){ - - } - }; - }; - busy = true; - fileReader.readAsArrayBuffer(blob); - } - }; - - exports.MP3Converter = MP3Converter; -})(window); diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.html b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.html deleted file mode 100644 index 836aa973b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.html +++ /dev/null @@ -1,95 +0,0 @@ - - - Lame.js Upload Example - - - - - -
    -
    -
    -
    -

    -
    - - - - -
      - -
      -
      -
      - - - - - - diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.js deleted file mode 100644 index b8679739e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/mic.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Created by intelWorx on 27/10/2015. - */ -(function (exports) { - - navigator.getUserMedia = navigator.getUserMedia || - navigator.webkitGetUserMedia || - navigator.mozGetUserMedia || - navigator.msGetUserMedia; - - var MP3Recorder = function (config) { - - var recorder = this, startTime = 0, context = new AudioContext(); - config = config || {}; - var realTimeWorker = new Worker('worker-realtime.js'); - - // Initializes LAME so that we can record. - this.initialize = function () { - config.sampleRate = context.sampleRate; - realTimeWorker.postMessage({cmd: 'init', config: config}); - }; - - - // This function finalizes LAME output and saves the MP3 data to a file. - var microphone, processor; - // Function that handles getting audio out of the browser's media API. - function beginRecording(stream) { - // Set up Web Audio API to process data from the media stream (microphone). - microphone = context.createMediaStreamSource(stream); - // Settings a bufferSize of 0 instructs the browser to choose the best bufferSize - processor = context.createScriptProcessor(0, 1, 1); - // Add all buffers from LAME into an array. - processor.onaudioprocess = function (event) { - // Send microphone data to LAME for MP3 encoding while recording. - var array = event.inputBuffer.getChannelData(0); - //console.log('Buffer Received', array); - realTimeWorker.postMessage({cmd: 'encode', buf: array}) - }; - // Begin retrieving microphone data. - microphone.connect(processor); - processor.connect(context.destination); - // Return a function which will stop recording and return all MP3 data. - } - - this.stop = function () { - if (processor && microphone) { - // Clean up the Web Audio API resources. - microphone.disconnect(); - processor.disconnect(); - processor.onaudioprocess = null; - // Return the buffers array. Note that there may be more buffers pending here. - } - }; - - - // Function for kicking off recording once the button is pressed. - this.start = function (onSuccess, onError) { - // Request access to the microphone. - navigator.getUserMedia({audio: true}, function (stream) { - // Begin recording and get a function that stops the recording. - var stopRecording = beginRecording(stream); - recorder.startTime = Date.now(); - if (onSuccess && typeof onSuccess === 'function') { - onSuccess(); - } - // Run a function every 100 ms to update the UI and dispose it after 5 seconds. - }, function (error) { - if (onError && typeof onError === 'function') { - onError(error); - } - }); - }; - - - var mp3ReceiveSuccess, currentErrorCallback; - this.getMp3Blob = function (onSuccess, onError) { - currentErrorCallback = onError; - mp3ReceiveSuccess = onSuccess; - realTimeWorker.postMessage({cmd: 'finish'}); - }; - - realTimeWorker.onmessage = function (e) { - switch (e.data.cmd) { - case 'end': - if (mp3ReceiveSuccess) { - mp3ReceiveSuccess(new Blob(e.data.buf, {type: 'audio/mp3'})); - } - console.log('MP3 data size', e.data.buf.length); - break; - case 'error': - if (currentErrorCallback) { - currentErrorCallback(e.data.error); - } - break; - default : - console.log('I just received a message I know not how to handle.', e.data); - } - }; - this.initialize(); - }; - - exports.MP3Recorder = MP3Recorder; -})(window); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker-realtime.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker-realtime.js deleted file mode 100644 index 7c754c862..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker-realtime.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Created by intelWorx on 27/10/2015. - */ -(function () { - 'use strict'; - - console.log('MP3 conversion worker started.'); - importScripts('../lame.min.js'); - - var mp3Encoder, maxSamples = 1152, samplesMono, config, dataBuffer; - var clearBuffer = function () { - dataBuffer = []; - }; - - var appendToBuffer = function (mp3Buf) { - dataBuffer.push(new Int8Array(mp3Buf)); - }; - - - var init = function (prefConfig) { - config = prefConfig || {debug: true}; - mp3Encoder = new lamejs.Mp3Encoder(1, config.sampleRate || 44100, config.bitRate || 123); - clearBuffer(); - }; - - var floatTo16BitPCM = function floatTo16BitPCM(input, output) { - //var offset = 0; - for (var i = 0; i < input.length; i++) { - var s = Math.max(-1, Math.min(1, input[i])); - output[i] = (s < 0 ? s * 0x8000 : s * 0x7FFF); - } - }; - - var convertBuffer = function(arrayBuffer){ - var data = new Float32Array(arrayBuffer); - var out = new Int16Array(arrayBuffer.length); - floatTo16BitPCM(data, out) - return out; - }; - - var encode = function (arrayBuffer) { - samplesMono = convertBuffer(arrayBuffer); - var remaining = samplesMono.length; - for (var i = 0; remaining >= 0; i += maxSamples) { - var left = samplesMono.subarray(i, i + maxSamples); - var mp3buf = mp3Encoder.encodeBuffer(left); - appendToBuffer(mp3buf); - remaining -= maxSamples; - } - - }; - - var finish = function () { - appendToBuffer(mp3Encoder.flush()); - self.postMessage({ - cmd: 'end', - buf: dataBuffer - }); - if (config.debug) { - console.log('Sending finished command'); - } - clearBuffer(); //free up memory - }; - - self.onmessage = function (e) { - switch (e.data.cmd) { - case 'init': - init(e.data.config); - break; - - case 'encode': - encode(e.data.buf); - break; - - case 'finish': - finish(); - break; - } - }; - -})(); diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker.js deleted file mode 100644 index bdbe861ac..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs/worker-example/worker.js +++ /dev/null @@ -1,90 +0,0 @@ -(function () { - 'use strict'; - - console.log('MP3 conversion worker started.'); - importScripts('../lame.min.js'); - - var mp3Encoder, maxSamples = 1152, - wav, samplesLeft, config, dataBuffer, samplesRight; - var clearBuffer = function () { - dataBuffer = []; - }; - - var appendToBuffer = function (mp3Buf) { - dataBuffer.push(new Int8Array(mp3Buf)); - }; - - - var init = function (prefConfig) { - config = prefConfig || {}; - clearBuffer(); - }; - - var encode = function (arrayBuffer) { - wav = lamejs.WavHeader.readHeader(new DataView(arrayBuffer)); - console.log('wave:', wav); - if (!wav) { - self.postMessage({cmd: 'error', msg: 'Specified file is not a Wave file'}); - return; - } - - var dataView = new Int16Array(arrayBuffer, wav.dataOffset, wav.dataLen / 2); - samplesLeft = wav.channels === 1 ? dataView : new Int16Array(wav.dataLen / (2 * wav.channels)); - samplesRight = wav.channels === 2 ? new Int16Array(wav.dataLen / (2 * wav.channels)) : undefined; - if (wav.channels > 1) { - for (var i = 0; i < samplesLeft.length; i++) { - samplesLeft[i] = dataView[i * 2]; - samplesRight[i] = dataView[i * 2 + 1]; - } - } - - mp3Encoder = new lamejs.Mp3Encoder(wav.channels, wav.sampleRate, config.bitRate || 96); - - var remaining = samplesLeft.length; - for (var i = 0; remaining >= maxSamples; i += maxSamples) { - var left = samplesLeft.subarray(i, i + maxSamples); - var right; - if (samplesRight) { - right = samplesRight.subarray(i, i + maxSamples); - } - var mp3buf = mp3Encoder.encodeBuffer(left, right); - appendToBuffer(mp3buf); - remaining -= maxSamples; - self.postMessage({ - cmd: 'progress', - progress: (1 - remaining / samplesLeft.length) - }); - } - }; - - var finish = function () { - if (!wav) { - return; - } - var mp3buf = mp3Encoder.flush(); - appendToBuffer(mp3buf); - self.postMessage({ - cmd: 'end', - buf: dataBuffer - }); - console.log('done encoding'); - clearBuffer(); //free up memory - }; - - self.onmessage = function (e) { - switch (e.data.cmd) { - case 'init': - init(e.data.config); - break; - - case 'encode': - encode(e.data.rawInput); - break; - - case 'finish': - finish(); - break; - } - }; - -})(); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm deleted file mode 100644 index f8dbe59434ce88b28e8effe98688eba0045a6467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377342 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

      &50Ku9RwpSig@(6UDnQiUC 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

      MfB+c97f;s~1-P@kM$@b?4VQIm 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

      wYmAOJX)K+I?rypsl%~j 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 F{{w}MU 1) { - thisProgram = process.argv[1].replace(/\\/g, "/") - } - arguments_ = process.argv.slice(2); - // if (typeof module !== "undefined") { - // module.exports = Module - // } - process.on("uncaughtException", function(ex) { - if (!(ex instanceof ExitStatus)) { - throw ex - } - }); - process.on("unhandledRejection", abort); - quit_ = function(status) { - process.exit(status) - }; - Module.inspect = function() { - return "[Emscripten Module object]" - } -} else if (ENVIRONMENT_IS_SHELL) { - if (typeof read !== "undefined") { - read_ = function shell_read(f) { - return read(f) - } - } - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === "function") { - return new Uint8Array(readbuffer(f)) - } - data = read(f, "binary"); - assert(typeof data === "object"); - return data - }; - if (typeof scriptArgs !== "undefined") { - arguments_ = scriptArgs - } else if (typeof arguments !== "undefined") { - arguments_ = arguments - } - if (typeof quit === "function") { - quit_ = function(status) { - quit(status) - } - } - if (typeof print !== "undefined") { - if (typeof console === "undefined") console = {}; - console.log = print; - console.warn = console.error = typeof printErr !== "undefined" ? printErr : print - } -} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = location.href - } else if (globalThis.document?.currentScript) { - scriptDirectory = globalThis.document?.currentScript.src - } - if (scriptDirectory.indexOf("blob:") !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1) - } else { - scriptDirectory = "" - } { - read_ = function shell_read(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = function readBinary(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response) - } - } - readAsync = function readAsync(url, onload, onerror) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return - } - onerror() - }; - xhr.onerror = onerror; - xhr.send(null) - } - } - setWindowTitle = function(title) { - globalThis.document && (globalThis.document.title = title); - } -} else {} -var out = Module.print || console.log.bind(console); -var err = Module.printErr || console.warn.bind(console); -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key] - } -} -moduleOverrides = null; -if (Module.arguments) arguments_ = Module.arguments; -if (Module.thisProgram) thisProgram = Module.thisProgram; -if (Module.quit) quit_ = Module.quit; -var STACK_ALIGN = 16; - -function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; - return Math.ceil(size / factor) * factor -} -var wasmBinary; -if (Module.wasmBinary) wasmBinary = Module.wasmBinary; -var noExitRuntime; -if (Module.noExitRuntime) noExitRuntime = Module.noExitRuntime; -if (typeof WebAssembly !== "object") { - abort("no native wasm support detected") -} -var wasmMemory; -var wasmTable; -var ABORT = false; -var EXITSTATUS = 0; - -function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text) - } -} -var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; - -function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)) - } else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2 - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63 - } - if (u0 < 65536) { - str += String.fromCharCode(u0) - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) - } - } - } - return str -} - -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" -} - -function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023 - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63 - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } - } - heap[outIdx] = 0; - return outIdx - startIdx -} - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) -} - -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) ++len; - else if (u <= 2047) len += 2; - else if (u <= 65535) len += 3; - else len += 4 - } - return len -} - -function writeArrayToMemory(array, buffer) { - HEAP8.set(array, buffer) -} - -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) { - HEAP8[buffer++ >> 0] = str.charCodeAt(i) - } - if (!dontAddNull) HEAP8[buffer >> 0] = 0 -} -var WASM_PAGE_SIZE = 65536; -var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - -function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module.HEAP8 = HEAP8 = new Int8Array(buf); - Module.HEAP16 = HEAP16 = new Int16Array(buf); - Module.HEAP32 = HEAP32 = new Int32Array(buf); - Module.HEAPU8 = HEAPU8 = new Uint8Array(buf); - Module.HEAPU16 = HEAPU16 = new Uint16Array(buf); - Module.HEAPU32 = HEAPU32 = new Uint32Array(buf); - Module.HEAPF32 = HEAPF32 = new Float32Array(buf); - Module.HEAPF64 = HEAPF64 = new Float64Array(buf) -} -var INITIAL_INITIAL_MEMORY = Module.INITIAL_MEMORY || 16777216; -if (Module.wasmMemory) { - wasmMemory = Module.wasmMemory -} else { - wasmMemory = new WebAssembly.Memory({ - "initial": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE, - "maximum": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE - }) -} -if (wasmMemory) { - buffer = wasmMemory.buffer -} -INITIAL_INITIAL_MEMORY = buffer.byteLength; -updateGlobalBufferAndViews(buffer); -var __ATPRERUN__ = []; -var __ATINIT__ = []; -var __ATMAIN__ = []; -var __ATPOSTRUN__ = []; -var runtimeInitialized = false; - -function preRun() { - if (Module.preRun) { - if (typeof Module.preRun === "function") Module.preRun = [Module.preRun]; - while (Module.preRun.length) { - addOnPreRun(Module.preRun.shift()) - } - } - callRuntimeCallbacks(__ATPRERUN__) -} - -function initRuntime() { - runtimeInitialized = true; - if (!Module.noFSInit && !FS.init.initialized) FS.init(); - TTY.init(); - callRuntimeCallbacks(__ATINIT__) -} - -function preMain() { - FS.ignorePermissions = false; - callRuntimeCallbacks(__ATMAIN__) -} - -function postRun() { - if (Module.postRun) { - if (typeof Module.postRun === "function") Module.postRun = [Module.postRun]; - while (Module.postRun.length) { - addOnPostRun(Module.postRun.shift()) - } - } - callRuntimeCallbacks(__ATPOSTRUN__) -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb) -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb) -} -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; - -function getUniqueRunDependency(id) { - return id -} - -function addRunDependency(id) { - runDependencies++; - if (Module.monitorRunDependencies) { - Module.monitorRunDependencies(runDependencies) - } -} - -function removeRunDependency(id) { - runDependencies--; - if (Module.monitorRunDependencies) { - Module.monitorRunDependencies(runDependencies) - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback() - } - } -} -Module.preloadedImages = {}; -Module.preloadedAudios = {}; - -function abort(what) { - if (Module.onAbort) { - Module.onAbort(what) - } - what += ""; - err(what); - ABORT = true; - EXITSTATUS = 1; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - throw e -} - -function hasPrefix(str, prefix) { - return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0 -} -var dataURIPrefix = "data:application/octet-stream;base64,"; - -function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix) -} -var fileURIPrefix = "file://"; - -function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix) -} -var wasmBinaryFile = "libopusjs/libopus.wasm"; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile) -} - -function getBinary() { - try { - if (wasmBinary) { - return new Uint8Array(wasmBinary) - } - if (readBinary) { - return readBinary(wasmBinaryFile) - } else { - throw "both async and sync fetching of the wasm failed" - } - } catch (err) { - abort(err) - } -} - -async function getBinaryPromise() { - const res = await fetch(wasmUrl); - return WebAssembly.compileStreaming(res) - /* if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { - console.log('binary promise', { - wasmBinaryFile, - }); - const s = new URL(wasmBinaryFile, 'http://localhost'); - return fetch(s, { - // credentials: "same-origin" - }).then(function(response) { - if (!response.ok) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" - } - return response.arrayBuffer() - }).catch(function() { - return getBinary() - }) - } - return Promise.resolve().then(getBinary) */ -} - -function createWasm() { - var info = { - "a": asmLibraryArg - }; - - function receiveInstance(instance, module) { - var exports = instance.exports; - Module.asm = exports; - wasmTable = Module.asm.n; - removeRunDependency("wasm-instantiate") - } - addRunDependency("wasm-instantiate"); - - function receiveInstantiatedSource(output) { - receiveInstance(output.instance) - } - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info) - }).then(receiver, function(reason) { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason) - }) - } - - async function instantiateAsync() { - const instance = await WebAssembly.instantiate(wasm, info); - receiveInstance(instance); - } - if (Module.instantiateWasm) { - try { - var exports = Module.instantiateWasm(info, receiveInstance); - return exports - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false - } - } - instantiateAsync(); - return {} -} -var tempDouble; -var tempI64; - -function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback === "function") { - callback(Module); - continue - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === undefined) { - wasmTable.get(func)() - } else { - wasmTable.get(func)(callback.arg) - } - } else { - func(callback.arg === undefined ? null : callback.arg) - } - } -} - -function demangle(func) { - return func -} - -function demangleAll(text) { - var regex = /\b_Z[\w\d_]+/g; - return text.replace(regex, function(x) { - var y = demangle(x); - return x === y ? x : y + " [" + x + "]" - }) -} - -function jsStackTrace() { - var error = new Error; - if (!error.stack) { - try { - throw new Error - } catch (e) { - error = e - } - if (!error.stack) { - return "(no stack trace available)" - } - } - return error.stack.toString() -} - -function stackTrace() { - var js = jsStackTrace(); - if (Module.extraStackTrace) js += "\n" + Module.extraStackTrace(); - return demangleAll(js) -} -var ExceptionInfoAttrs = { - DESTRUCTOR_OFFSET: 0, - REFCOUNT_OFFSET: 4, - TYPE_OFFSET: 8, - CAUGHT_OFFSET: 12, - RETHROWN_OFFSET: 13, - SIZE: 16 -}; - -function ___cxa_allocate_exception(size) { - return _malloc(size + ExceptionInfoAttrs.SIZE) + ExceptionInfoAttrs.SIZE -} - -function ExceptionInfo(excPtr) { - this.excPtr = excPtr; - this.ptr = excPtr - ExceptionInfoAttrs.SIZE; - this.set_type = function(type) { - HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] = type - }; - this.get_type = function() { - return HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] - }; - this.set_destructor = function(destructor) { - HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] = destructor - }; - this.get_destructor = function() { - return HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] - }; - this.set_refcount = function(refcount) { - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = refcount - }; - this.set_caught = function(caught) { - caught = caught ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] = caught - }; - this.get_caught = function() { - return HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] != 0 - }; - this.set_rethrown = function(rethrown) { - rethrown = rethrown ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] = rethrown - }; - this.get_rethrown = function() { - return HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] != 0 - }; - this.init = function(type, destructor) { - this.set_type(type); - this.set_destructor(destructor); - this.set_refcount(0); - this.set_caught(false); - this.set_rethrown(false) - }; - this.add_ref = function() { - var value = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = value + 1 - }; - this.release_ref = function() { - var prev = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = prev - 1; - return prev === 1 - } -} -var exceptionLast = 0; - -function __ZSt18uncaught_exceptionv() { - return __ZSt18uncaught_exceptionv.uncaught_exceptions > 0 -} - -function ___cxa_throw(ptr, type, destructor) { - var info = new ExceptionInfo(ptr); - info.init(type, destructor); - exceptionLast = ptr; - if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { - __ZSt18uncaught_exceptionv.uncaught_exceptions = 1 - } else { - __ZSt18uncaught_exceptionv.uncaught_exceptions++ - } - throw ptr -} - -function _abort() { - abort() -} - -function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num) -} - -function abortOnCannotGrowMemory(requestedSize) { - abort("OOM") -} - -function _emscripten_resize_heap(requestedSize) { - requestedSize = requestedSize >>> 0; - abortOnCannotGrowMemory(requestedSize) -} -var ENV = {}; - -function getExecutableName() { - return thisProgram || "./this.program" -} - -function getEnvStrings() { - if (!getEnvStrings.strings) { - var lang = (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; - var env = { - "USER": "web_user", - "LOGNAME": "web_user", - "PATH": "/", - "PWD": "/", - "HOME": "/home/web_user", - "LANG": lang, - "_": getExecutableName() - }; - for (var x in ENV) { - env[x] = ENV[x] - } - var strings = []; - for (var x in env) { - strings.push(x + "=" + env[x]) - } - getEnvStrings.strings = strings - } - return getEnvStrings.strings -} - -function _environ_get(__environ, environ_buf) { - var bufSize = 0; - getEnvStrings().forEach(function(string, i) { - var ptr = environ_buf + bufSize; - HEAP32[__environ + i * 4 >> 2] = ptr; - writeAsciiToMemory(string, ptr); - bufSize += string.length + 1 - }); - return 0 -} - -function _environ_sizes_get(penviron_count, penviron_buf_size) { - var strings = getEnvStrings(); - HEAP32[penviron_count >> 2] = strings.length; - var bufSize = 0; - strings.forEach(function(string) { - bufSize += string.length + 1 - }); - HEAP32[penviron_buf_size >> 2] = bufSize; - return 0 -} -var PATH = { - splitPath: function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1) - }, - normalizeArray: function(parts, allowAboveRoot) { - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === ".") { - parts.splice(i, 1) - } else if (last === "..") { - parts.splice(i, 1); - up++ - } else if (up) { - parts.splice(i, 1); - up-- - } - } - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift("..") - } - } - return parts - }, - normalize: function(path) { - var isAbsolute = path.charAt(0) === "/"; - var trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), !isAbsolute).join("/"); - if (!path && !isAbsolute) { - path = "." - } - if (path && trailingSlash) { - path += "/" - } - return (isAbsolute ? "/" : "") + path - }, - dirname: function(path) { - var result = PATH.splitPath(path); - var root = result[0]; - var dir = result[1]; - if (!root && !dir) { - return "." - } - if (dir) { - dir = dir.substr(0, dir.length - 1) - } - return root + dir - }, - basename: function(path) { - if (path === "/") return "/"; - path = PATH.normalize(path); - path = path.replace(/\/$/, ""); - var lastSlash = path.lastIndexOf("/"); - if (lastSlash === -1) return path; - return path.substr(lastSlash + 1) - }, - extname: function(path) { - return PATH.splitPath(path)[3] - }, - join: function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join("/")) - }, - join2: function(l, r) { - return PATH.normalize(l + "/" + r) - } -}; - -function setErrNo(value) { - HEAP32[___errno_location() >> 2] = value; - return value -} - -function getRandomDevice() { - if (typeof crypto === "object" && typeof crypto.getRandomValues === "function") { - var randomBuffer = new Uint8Array(1); - return function() { - crypto.getRandomValues(randomBuffer); - return randomBuffer[0] - } - } else if (ENVIRONMENT_IS_NODE) { - try { - var crypto_module = require("crypto"); - return function() { - return crypto_module.randomBytes(1)[0] - } - } catch (e) {} - } - return function() { - abort("randomDevice") - } -} -var PATH_FS = { - resolve: function() { - var resolvedPath = ""; - var resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); - if (typeof path !== "string") { - throw new TypeError("Arguments to path.resolve must be strings") - } else if (!path) { - return "" - } - resolvedPath = path + "/" + resolvedPath; - resolvedAbsolute = path.charAt(0) === "/" - } - resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function(p) { - return !!p - }), !resolvedAbsolute).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "." - }, - relative: function(from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== "") break - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== "") break - } - if (start > end) return []; - return arr.slice(start, end - start + 1) - } - var fromParts = trim(from.split("/")); - var toParts = trim(to.split("/")); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push("..") - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join("/") - } -}; -var TTY = { - ttys: [], - init: function() {}, - shutdown: function() {}, - register: function(dev, ops) { - TTY.ttys[dev] = { - input: [], - output: [], - ops: ops - }; - FS.registerDevice(dev, TTY.stream_ops) - }, - stream_ops: { - open: function(stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(43) - } - stream.tty = tty; - stream.seekable = false - }, - close: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - flush: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - read: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(60) - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty) - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(60) - } - try { - for (var i = 0; i < length; i++) { - stream.tty.ops.put_char(stream.tty, buffer[offset + i]) - } - } catch (e) { - throw new FS.ErrnoError(29) - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }, - default_tty_ops: { - get_char: function(tty) { - if (!tty.input.length) { - var result = null; - if (ENVIRONMENT_IS_NODE) { - var BUFSIZE = 256; - var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); - var bytesRead = 0; - try { - bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null) - } catch (e) { - if (e.toString().indexOf("EOF") != -1) bytesRead = 0; - else throw e - } - if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString("utf-8") - } else { - result = null - } - } else if (typeof window !== "undefined" && typeof window.prompt === "function") { - result = window.prompt("Input: "); - if (result !== null) { - result += "\n" - } - } else if (typeof readline === "function") { - result = readline(); - if (result !== null) { - result += "\n" - } - } - if (!result) { - return null - } - tty.input = intArrayFromString(result, true) - } - return tty.input.shift() - }, - put_char: function(tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - }, - default_tty1_ops: { - put_char: function(tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - } -}; - -function mmapAlloc(size) { - var alignedSize = alignMemory(size, 16384); - var ptr = _malloc(alignedSize); - while (size < alignedSize) HEAP8[ptr + size++] = 0; - return ptr -} -var MEMFS = { - ops_table: null, - mount: function(mount) { - return MEMFS.createNode(null, "/", 16384 | 511, 0) - }, - createNode: function(parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - throw new FS.ErrnoError(63) - } - if (!MEMFS.ops_table) { - MEMFS.ops_table = { - dir: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - lookup: MEMFS.node_ops.lookup, - mknod: MEMFS.node_ops.mknod, - rename: MEMFS.node_ops.rename, - unlink: MEMFS.node_ops.unlink, - rmdir: MEMFS.node_ops.rmdir, - readdir: MEMFS.node_ops.readdir, - symlink: MEMFS.node_ops.symlink - }, - stream: { - llseek: MEMFS.stream_ops.llseek - } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap, - msync: MEMFS.stream_ops.msync - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - } - } - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {} - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; - node.contents = null - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream - } - node.timestamp = Date.now(); - if (parent) { - parent.contents[name] = node - } - return node - }, - getFileDataAsRegularArray: function(node) { - if (node.contents && node.contents.subarray) { - var arr = []; - for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); - return arr - } - return node.contents - }, - getFileDataAsTypedArray: function(node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); - return new Uint8Array(node.contents) - }, - expandFileStorage: function(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) return; - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); - }, - resizeFileStorage: function(node, newSize) { - if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; - node.usedBytes = 0; - return - } - if (!node.contents || node.contents.subarray) { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); - if (oldContents) { - node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) - } - node.usedBytes = newSize; - return - } - if (!node.contents) node.contents = []; - if (node.contents.length > newSize) node.contents.length = newSize; - else - while (node.contents.length < newSize) node.contents.push(0); - node.usedBytes = newSize - }, - node_ops: { - getattr: function(node) { - var attr = {}; - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096 - } else if (FS.isFile(node.mode)) { - attr.size = node.usedBytes - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length - } else { - attr.size = 0 - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr - }, - setattr: function(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp - } - if (attr.size !== undefined) { - MEMFS.resizeFileStorage(node, attr.size) - } - }, - lookup: function(parent, name) { - throw FS.genericErrors[44] - }, - mknod: function(parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev) - }, - rename: function(old_node, new_dir, new_name) { - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55) - } - } - } - delete old_node.parent.contents[old_node.name]; - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - old_node.parent = new_dir - }, - unlink: function(parent, name) { - delete parent.contents[name] - }, - rmdir: function(parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(55) - } - delete parent.contents[name] - }, - readdir: function(node) { - var entries = [".", ".."]; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue - } - entries.push(key) - } - return entries - }, - symlink: function(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); - node.link = oldpath; - return node - }, - readlink: function(node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(28) - } - return node.link - } - }, - stream_ops: { - read: function(stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) return 0; - var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) { - buffer.set(contents.subarray(position, position + size), offset) - } else { - for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] - } - return size - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (!length) return 0; - var node = stream.node; - node.timestamp = Date.now(); - if (buffer.subarray && (!node.contents || node.contents.subarray)) { - if (canOwn) { - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length - } else if (node.usedBytes === 0 && position === 0) { - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length - } else if (position + length <= node.usedBytes) { - node.contents.set(buffer.subarray(offset, offset + length), position); - return length - } - } - MEMFS.expandFileStorage(node, position + length); - if (node.contents.subarray && buffer.subarray) { - node.contents.set(buffer.subarray(offset, offset + length), position) - } else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer[offset + i] - } - } - node.usedBytes = Math.max(node.usedBytes, position + length); - return length - }, - llseek: function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.usedBytes - } - } - if (position < 0) { - throw new FS.ErrnoError(28) - } - return position - }, - allocate: function(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) - }, - mmap: function(stream, address, length, position, prot, flags) { - assert(address === 0); - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - var ptr; - var allocated; - var contents = stream.node.contents; - if (!(flags & 2) && contents.buffer === buffer) { - allocated = false; - ptr = contents.byteOffset - } else { - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length) - } else { - contents = Array.prototype.slice.call(contents, position, position + length) - } - } - allocated = true; - ptr = mmapAlloc(length); - if (!ptr) { - throw new FS.ErrnoError(48) - } - HEAP8.set(contents, ptr) - } - return { - ptr: ptr, - allocated: allocated - } - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (mmapFlags & 2) { - return 0 - } - var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); - return 0 - } - } -}; -var FS = { - root: null, - mounts: [], - devices: {}, - streams: [], - nextInode: 1, - nameTable: null, - currentPath: "/", - initialized: false, - ignorePermissions: true, - trackingDelegate: {}, - tracking: { - openFlags: { - READ: 1, - WRITE: 2 - } - }, - ErrnoError: null, - genericErrors: {}, - filesystems: null, - syncFSRequests: 0, - handleFSError: function(e) { - if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace(); - return setErrNo(e.errno) - }, - lookupPath: function(path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - if (!path) return { - path: "", - node: null - }; - var defaults = { - follow_mount: true, - recurse_count: 0 - }; - for (var key in defaults) { - if (opts[key] === undefined) { - opts[key] = defaults[key] - } - } - if (opts.recurse_count > 8) { - throw new FS.ErrnoError(32) - } - var parts = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), false); - var current = FS.root; - var current_path = "/"; - for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; - if (islast && opts.parent) { - break - } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - if (FS.isMountpoint(current)) { - if (!islast || islast && opts.follow_mount) { - current = current.mounted.root - } - } - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { - recurse_count: opts.recurse_count - }); - current = lookup.node; - if (count++ > 40) { - throw new FS.ErrnoError(32) - } - } - } - } - return { - path: current_path, - node: current - } - }, - getPath: function(node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path - } - path = path ? node.name + "/" + path : node.name; - node = node.parent - } - }, - hashName: function(parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) { - hash = (hash << 5) - hash + name.charCodeAt(i) | 0 - } - return (parentid + hash >>> 0) % FS.nameTable.length - }, - hashAddNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node - }, - hashRemoveNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break - } - current = current.name_next - } - } - }, - lookupNode: function(parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) { - throw new FS.ErrnoError(errCode, parent) - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node - } - } - return FS.lookup(parent, name) - }, - createNode: function(parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - FS.hashAddNode(node); - return node - }, - destroyNode: function(node) { - FS.hashRemoveNode(node) - }, - isRoot: function(node) { - return node === node.parent - }, - isMountpoint: function(node) { - return !!node.mounted - }, - isFile: function(mode) { - return (mode & 61440) === 32768 - }, - isDir: function(mode) { - return (mode & 61440) === 16384 - }, - isLink: function(mode) { - return (mode & 61440) === 40960 - }, - isChrdev: function(mode) { - return (mode & 61440) === 8192 - }, - isBlkdev: function(mode) { - return (mode & 61440) === 24576 - }, - isFIFO: function(mode) { - return (mode & 61440) === 4096 - }, - isSocket: function(mode) { - return (mode & 49152) === 49152 - }, - flagModes: { - "r": 0, - "rs": 1052672, - "r+": 2, - "w": 577, - "wx": 705, - "xw": 705, - "w+": 578, - "wx+": 706, - "xw+": 706, - "a": 1089, - "ax": 1217, - "xa": 1217, - "a+": 1090, - "ax+": 1218, - "xa+": 1218 - }, - modeStringToFlags: function(str) { - var flags = FS.flagModes[str]; - if (typeof flags === "undefined") { - throw new Error("Unknown file open mode: " + str) - } - return flags - }, - flagsToPermissionString: function(flag) { - var perms = ["r", "w", "rw"][flag & 3]; - if (flag & 512) { - perms += "w" - } - return perms - }, - nodePermissions: function(node, perms) { - if (FS.ignorePermissions) { - return 0 - } - if (perms.indexOf("r") !== -1 && !(node.mode & 292)) { - return 2 - } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) { - return 2 - } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) { - return 2 - } - return 0 - }, - mayLookup: function(dir) { - var errCode = FS.nodePermissions(dir, "x"); - if (errCode) return errCode; - if (!dir.node_ops.lookup) return 2; - return 0 - }, - mayCreate: function(dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20 - } catch (e) {} - return FS.nodePermissions(dir, "wx") - }, - mayDelete: function(dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name) - } catch (e) { - return e.errno - } - var errCode = FS.nodePermissions(dir, "wx"); - if (errCode) { - return errCode - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return 54 - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return 10 - } - } else { - if (FS.isDir(node.mode)) { - return 31 - } - } - return 0 - }, - mayOpen: function(node, flags) { - if (!node) { - return 44 - } - if (FS.isLink(node.mode)) { - return 32 - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { - return 31 - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) - }, - MAX_OPEN_FDS: 4096, - nextfd: function(fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd - } - } - throw new FS.ErrnoError(33) - }, - getStream: function(fd) { - return FS.streams[fd] - }, - createStream: function(stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function() {}; - FS.FSStream.prototype = { - object: { - get: function() { - return this.node - }, - set: function(val) { - this.node = val - } - }, - isRead: { - get: function() { - return (this.flags & 2097155) !== 1 - } - }, - isWrite: { - get: function() { - return (this.flags & 2097155) !== 0 - } - }, - isAppend: { - get: function() { - return this.flags & 1024 - } - } - } - } - var newStream = new FS.FSStream; - for (var p in stream) { - newStream[p] = stream[p] - } - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream - }, - closeStream: function(fd) { - FS.streams[fd] = null - }, - chrdev_stream_ops: { - open: function(stream) { - var device = FS.getDevice(stream.node.rdev); - stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - }, - llseek: function() { - throw new FS.ErrnoError(70) - } - }, - major: function(dev) { - return dev >> 8 - }, - minor: function(dev) { - return dev & 255 - }, - makedev: function(ma, mi) { - return ma << 8 | mi - }, - registerDevice: function(dev, ops) { - FS.devices[dev] = { - stream_ops: ops - } - }, - getDevice: function(dev) { - return FS.devices[dev] - }, - getMounts: function(mount) { - var mounts = []; - var check = [mount]; - while (check.length) { - var m = check.pop(); - mounts.push(m); - check.push.apply(check, m.mounts) - } - return mounts - }, - syncfs: function(populate, callback) { - if (typeof populate === "function") { - callback = populate; - populate = false - } - FS.syncFSRequests++; - if (FS.syncFSRequests > 1) { - err("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work") - } - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - - function doCallback(errCode) { - FS.syncFSRequests--; - return callback(errCode) - } - - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode) - } - return - } - if (++completed >= mounts.length) { - doCallback(null) - } - } - mounts.forEach(function(mount) { - if (!mount.type.syncfs) { - return done(null) - } - mount.type.syncfs(mount, populate, done) - }) - }, - mount: function(type, opts, mountpoint) { - var root = mountpoint === "/"; - var pseudo = !mountpoint; - var node; - if (root && FS.root) { - throw new FS.ErrnoError(10) - } else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - mountpoint = lookup.path; - node = lookup.node; - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - if (!FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - } - var mount = { - type: type, - opts: opts, - mountpoint: mountpoint, - mounts: [] - }; - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - if (root) { - FS.root = mountRoot - } else if (node) { - node.mounted = mount; - if (node.mount) { - node.mount.mounts.push(mount) - } - } - return mountRoot - }, - unmount: function(mountpoint) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - if (!FS.isMountpoint(lookup.node)) { - throw new FS.ErrnoError(28) - } - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach(function(hash) { - var current = FS.nameTable[hash]; - while (current) { - var next = current.name_next; - if (mounts.indexOf(current.mount) !== -1) { - FS.destroyNode(current) - } - current = next - } - }); - node.mounted = null; - var idx = node.mount.mounts.indexOf(mount); - node.mount.mounts.splice(idx, 1) - }, - lookup: function(parent, name) { - return parent.node_ops.lookup(parent, name) - }, - mknod: function(path, mode, dev) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === "." || name === "..") { - throw new FS.ErrnoError(28) - } - var errCode = FS.mayCreate(parent, name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.mknod(parent, name, mode, dev) - }, - create: function(path, mode) { - mode = mode !== undefined ? mode : 438; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0) - }, - mkdir: function(path, mode) { - mode = mode !== undefined ? mode : 511; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0) - }, - mkdirTree: function(path, mode) { - var dirs = path.split("/"); - var d = ""; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += "/" + dirs[i]; - try { - FS.mkdir(d, mode) - } catch (e) { - if (e.errno != 20) throw e - } - } - }, - mkdev: function(path, mode, dev) { - if (typeof dev === "undefined") { - dev = mode; - mode = 438 - } - mode |= 8192; - return FS.mknod(path, mode, dev) - }, - symlink: function(oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) { - throw new FS.ErrnoError(44) - } - var lookup = FS.lookupPath(newpath, { - parent: true - }); - var parent = lookup.node; - if (!parent) { - throw new FS.ErrnoError(44) - } - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.symlink(parent, newname, oldpath) - }, - rename: function(old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - var lookup, old_dir, new_dir; - lookup = FS.lookupPath(old_path, { - parent: true - }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { - parent: true - }); - new_dir = lookup.node; - if (!old_dir || !new_dir) throw new FS.ErrnoError(44); - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(75) - } - var old_node = FS.lookupNode(old_dir, old_name); - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(28) - } - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(55) - } - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (old_node === new_node) { - return - } - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { - throw new FS.ErrnoError(10) - } - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - try { - if (FS.trackingDelegate.willMovePath) { - FS.trackingDelegate.willMovePath(old_path, new_path) - } - } catch (e) { - err("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name) - } catch (e) { - throw e - } finally { - FS.hashAddNode(old_node) - } - try { - if (FS.trackingDelegate.onMovePath) FS.trackingDelegate.onMovePath(old_path, new_path) - } catch (e) { - err("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - }, - rmdir: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate.willDeletePath) { - FS.trackingDelegate.willDeletePath(path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate.onDeletePath) FS.trackingDelegate.onDeletePath(path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54) - } - return node.node_ops.readdir(node) - }, - unlink: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate.willDeletePath) { - FS.trackingDelegate.willDeletePath(path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate.onDeletePath) FS.trackingDelegate.onDeletePath(path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readlink: function(path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) { - throw new FS.ErrnoError(44) - } - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(28) - } - return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) - }, - stat: function(path, dontFollow) { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44) - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63) - } - return node.node_ops.getattr(node) - }, - lstat: function(path) { - return FS.stat(path, true) - }, - chmod: function(path, mode, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - mode: mode & 4095 | node.mode & ~4095, - timestamp: Date.now() - }) - }, - lchmod: function(path, mode) { - FS.chmod(path, mode, true) - }, - fchmod: function(fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chmod(stream.node, mode) - }, - chown: function(path, uid, gid, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - timestamp: Date.now() - }) - }, - lchown: function(path, uid, gid) { - FS.chown(path, uid, gid, true) - }, - fchown: function(fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chown(stream.node, uid, gid) - }, - truncate: function(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28) - } - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(31) - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(28) - } - var errCode = FS.nodePermissions(node, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - node.node_ops.setattr(node, { - size: len, - timestamp: Date.now() - }) - }, - ftruncate: function(fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(28) - } - FS.truncate(stream.node, len) - }, - utime: function(path, atime, mtime) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) - }) - }, - open: function(path, flags, mode, fd_start, fd_end) { - if (path === "") { - throw new FS.ErrnoError(44) - } - flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === "undefined" ? 438 : mode; - if (flags & 64) { - mode = mode & 4095 | 32768 - } else { - mode = 0 - } - var node; - if (typeof path === "object") { - node = path - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node - } catch (e) {} - } - var created = false; - if (flags & 64) { - if (node) { - if (flags & 128) { - throw new FS.ErrnoError(20) - } - } else { - node = FS.mknod(path, mode, 0); - created = true - } - } - if (!node) { - throw new FS.ErrnoError(44) - } - if (FS.isChrdev(node.mode)) { - flags &= ~512 - } - if (flags & 65536 && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - if (flags & 512) { - FS.truncate(node, 0) - } - flags &= ~(128 | 512 | 131072); - var stream = FS.createStream({ - node: node, - path: FS.getPath(node), - flags: flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - ungotten: [], - error: false - }, fd_start, fd_end); - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - if (Module.logReadFiles && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path) - } - } - try { - if (FS.trackingDelegate.onOpenFile) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) { - trackingFlags |= FS.tracking.openFlags.READ - } - if ((flags & 2097155) !== 0) { - trackingFlags |= FS.tracking.openFlags.WRITE - } - FS.trackingDelegate.onOpenFile(path, trackingFlags) - } - } catch (e) { - err("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message) - } - return stream - }, - close: function(stream) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (stream.getdents) stream.getdents = null; - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream) - } - } catch (e) { - throw e - } finally { - FS.closeStream(stream.fd) - } - stream.fd = null - }, - isClosed: function(stream) { - return stream.fd === null - }, - llseek: function(stream, offset, whence) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(70) - } - if (whence != 0 && whence != 1 && whence != 2) { - throw new FS.ErrnoError(28) - } - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position - }, - read: function(stream, buffer, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(28) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(28) - } - if (stream.seekable && stream.flags & 1024) { - FS.llseek(stream, 0, 2) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - try { - if (stream.path && FS.trackingDelegate.onWriteToFile) FS.trackingDelegate.onWriteToFile(stream.path) - } catch (e) { - err("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message) - } - return bytesWritten - }, - allocate: function(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138) - } - stream.stream_ops.allocate(stream, offset, length) - }, - mmap: function(stream, address, length, position, prot, flags) { - if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { - throw new FS.ErrnoError(2) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(2) - } - if (!stream.stream_ops.mmap) { - throw new FS.ErrnoError(43) - } - return stream.stream_ops.mmap(stream, address, length, position, prot, flags) - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) { - return 0 - } - return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) - }, - munmap: function(stream) { - return 0 - }, - ioctl: function(stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(59) - } - return stream.stream_ops.ioctl(stream, cmd, arg) - }, - readFile: function(path, opts) { - opts = opts || {}; - opts.flags = opts.flags || "r"; - opts.encoding = opts.encoding || "binary"; - if (opts.encoding !== "utf8" && opts.encoding !== "binary") { - throw new Error('Invalid encoding type "' + opts.encoding + '"') - } - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === "utf8") { - ret = UTF8ArrayToString(buf, 0) - } else if (opts.encoding === "binary") { - ret = buf - } - FS.close(stream); - return ret - }, - writeFile: function(path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || "w"; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === "string") { - var buf = new Uint8Array(lengthBytesUTF8(data) + 1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) - } else { - throw new Error("Unsupported data type") - } - FS.close(stream) - }, - cwd: function() { - return FS.currentPath - }, - chdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - if (lookup.node === null) { - throw new FS.ErrnoError(44) - } - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(54) - } - var errCode = FS.nodePermissions(lookup.node, "x"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - FS.currentPath = lookup.path - }, - createDefaultDirectories: function() { - FS.mkdir("/tmp"); - FS.mkdir("/home"); - FS.mkdir("/home/web_user") - }, - createDefaultDevices: function() { - FS.mkdir("/dev"); - FS.registerDevice(FS.makedev(1, 3), { - read: function() { - return 0 - }, - write: function(stream, buffer, offset, length, pos) { - return length - } - }); - FS.mkdev("/dev/null", FS.makedev(1, 3)); - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev("/dev/tty", FS.makedev(5, 0)); - FS.mkdev("/dev/tty1", FS.makedev(6, 0)); - var random_device = getRandomDevice(); - FS.createDevice("/dev", "random", random_device); - FS.createDevice("/dev", "urandom", random_device); - FS.mkdir("/dev/shm"); - FS.mkdir("/dev/shm/tmp") - }, - createSpecialDirectories: function() { - FS.mkdir("/proc"); - FS.mkdir("/proc/self"); - FS.mkdir("/proc/self/fd"); - FS.mount({ - mount: function() { - var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73); - node.node_ops = { - lookup: function(parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - var ret = { - parent: null, - mount: { - mountpoint: "fake" - }, - node_ops: { - readlink: function() { - return stream.path - } - } - }; - ret.parent = ret; - return ret - } - }; - return node - } - }, {}, "/proc/self/fd") - }, - createStandardStreams: function() { - if (Module.stdin) { - FS.createDevice("/dev", "stdin", Module.stdin) - } else { - FS.symlink("/dev/tty", "/dev/stdin") - } - if (Module.stdout) { - FS.createDevice("/dev", "stdout", null, Module.stdout) - } else { - FS.symlink("/dev/tty", "/dev/stdout") - } - if (Module.stderr) { - FS.createDevice("/dev", "stderr", null, Module.stderr) - } else { - FS.symlink("/dev/tty1", "/dev/stderr") - } - var stdin = FS.open("/dev/stdin", "r"); - var stdout = FS.open("/dev/stdout", "w"); - var stderr = FS.open("/dev/stderr", "w") - }, - ensureErrnoError: function() { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.node = node; - this.setErrno = function(errno) { - this.errno = errno - }; - this.setErrno(errno); - this.message = "FS error" - }; - FS.ErrnoError.prototype = new Error; - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [44].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = "" - }) - }, - staticInit: function() { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.mount(MEMFS, {}, "/"); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - FS.filesystems = { - "MEMFS": MEMFS - } - }, - init: function(input, output, error) { - FS.init.initialized = true; - FS.ensureErrnoError(); - Module.stdin = input || Module.stdin; - Module.stdout = output || Module.stdout; - Module.stderr = error || Module.stderr; - FS.createStandardStreams() - }, - quit: function() { - FS.init.initialized = false; - var fflush = Module._fflush; - if (fflush) fflush(0); - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue - } - FS.close(stream) - } - }, - getMode: function(canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode - }, - findObject: function(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object - } else { - setErrNo(ret.error); - return null - } - }, - analyzePath: function(path, dontResolveLastLink) { - try { - var lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - path = lookup.path - } catch (e) {} - var ret = { - isRoot: false, - exists: false, - error: 0, - name: null, - path: null, - object: null, - parentExists: false, - parentPath: null, - parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { - parent: true - }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === "/" - } catch (e) { - ret.error = e.errno - } - return ret - }, - createPath: function(parent, path, canRead, canWrite) { - parent = typeof parent === "string" ? parent : FS.getPath(parent); - var parts = path.split("/").reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current) - } catch (e) {} - parent = current - } - return current - }, - createFile: function(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode) - }, - createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === "string") { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr - } - FS.chmod(node, mode | 146); - var stream = FS.open(node, "w"); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode) - } - return node - }, - createDevice: function(parent, name, input, output) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false - }, - close: function(stream) { - if (output && output.buffer && output.buffer.length) { - output(10) - } - }, - read: function(stream, buffer, offset, length, pos) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input() - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer[offset + i]) - } catch (e) { - throw new FS.ErrnoError(29) - } - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }); - return FS.mkdev(path, mode, dev) - }, - forceLoadFile: function(obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - var success = true; - if (typeof XMLHttpRequest !== "undefined") { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.") - } else if (read_) { - try { - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length - } catch (e) { - success = false - } - } else { - throw new Error("Cannot load without read() or XMLHttpRequest.") - } - if (!success) setErrNo(29); - return success - }, - createLazyFile: function(parent, name, url, canRead, canWrite) { - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = [] - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length - 1 || idx < 0) { - return undefined - } - var chunkOffset = idx % this.chunkSize; - var chunkNum = idx / this.chunkSize | 0; - return this.getter(chunkNum)[chunkOffset] - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter - }; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - var xhr = new XMLHttpRequest; - xhr.open("HEAD", url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; - var chunkSize = 1024 * 1024; - if (!hasByteServing) chunkSize = datalength; - var doXHR = function(from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - if (typeof Uint8Array !== "undefined") xhr.responseType = "arraybuffer"; - if (xhr.overrideMimeType) { - xhr.overrideMimeType("text/plain; charset=x-user-defined") - } - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - if (xhr.response !== undefined) { - return new Uint8Array(xhr.response || []) - } else { - return intArrayFromString(xhr.responseText || "", true) - } - }; - var lazyArray = this; - lazyArray.setDataGetter(function(chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum + 1) * chunkSize - 1; - end = Math.min(end, datalength - 1); - if (typeof lazyArray.chunks[chunkNum] === "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end) - } - if (typeof lazyArray.chunks[chunkNum] === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum] - }); - if (usesGzip || !datalength) { - chunkSize = datalength = 1; - datalength = this.getter(0).length; - chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed") - } - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true - }; - if (typeof XMLHttpRequest !== "undefined") { - if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; - var lazyArray = new LazyUint8Array; - Object.defineProperties(lazyArray, { - length: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._length - } - }, - chunkSize: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._chunkSize - } - } - }); - var properties = { - isDevice: false, - contents: lazyArray - } - } else { - var properties = { - isDevice: false, - url: url - } - } - var node = FS.createFile(parent, name, properties, canRead, canWrite); - if (properties.contents) { - node.contents = properties.contents - } else if (properties.url) { - node.contents = null; - node.url = properties.url - } - Object.defineProperties(node, { - usedBytes: { - get: function() { - return this.contents.length - } - } - }); - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - return fn.apply(null, arguments) - } - }); - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - var contents = stream.node.contents; - if (position >= contents.length) return 0; - var size = Math.min(contents.length - position, length); - if (contents.slice) { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i] - } - } else { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents.get(position + i) - } - } - return size - }; - node.stream_ops = stream_ops; - return node - }, - createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency("cp " + fullname); - - function processData(byteArray) { - function finish(byteArray) { - if (preFinish) preFinish(); - if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) - } - if (onload) onload(); - removeRunDependency(dep) - } - var handled = false; - Module.preloadPlugins.forEach(function(plugin) { - if (handled) return; - if (plugin.canHandle(fullname)) { - plugin.handle(byteArray, fullname, finish, function() { - if (onerror) onerror(); - removeRunDependency(dep) - }); - handled = true - } - }); - if (!handled) finish(byteArray) - } - addRunDependency(dep); - if (typeof url === "string") { - Browser.asyncLoad(url, function(byteArray) { - processData(byteArray) - }, onerror) - } else { - processData(url) - } - }, - indexedDB: function() { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB - }, - DB_NAME: function() { - return "EM_FS_" + window.location.pathname - }, - DB_VERSION: 20, - DB_STORE_NAME: "FILE_DATA", - saveFilesToDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out("creating db"); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME) - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0; - var fail = 0; - var total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { - ok++; - if (ok + fail == total) finish() - }; - putRequest.onerror = function putRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - }, - loadFilesFromDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = onerror; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], "readonly") - } catch (e) { - onerror(e); - return - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0; - var fail = 0; - var total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path) - } - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish() - }; - getRequest.onerror = function getRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - } -}; -var SYSCALLS = { - mappings: {}, - DEFAULT_POLLMASK: 5, - umask: 511, - calculateAt: function(dirfd, path) { - if (path[0] !== "/") { - var dir; - if (dirfd === -100) { - dir = FS.cwd() - } else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) throw new FS.ErrnoError(8); - dir = dirstream.path - } - path = PATH.join2(dir, path) - } - return path - }, - doStat: function(func, path, buf) { - try { - var stat = func(path) - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54 - } - throw e - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 4 >> 2] = 0; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAP32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - HEAP32[buf + 32 >> 2] = 0; - tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; - HEAP32[buf + 60 >> 2] = 0; - HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; - HEAP32[buf + 68 >> 2] = 0; - HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; - HEAP32[buf + 76 >> 2] = 0; - tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; - return 0 - }, - doMsync: function(addr, stream, len, flags, offset) { - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags) - }, - doMkdir: function(path, mode) { - path = PATH.normalize(path); - if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); - FS.mkdir(path, mode, 0); - return 0 - }, - doMknod: function(path, mode, dev) { - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - return -28 - } - FS.mknod(path, mode, dev); - return 0 - }, - doReadlink: function(path, buf, bufsize) { - if (bufsize <= 0) return -28; - var ret = FS.readlink(path); - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf + len]; - stringToUTF8(ret, buf, bufsize + 1); - HEAP8[buf + len] = endChar; - return len - }, - doAccess: function(path, amode) { - if (amode & ~7) { - return -28 - } - var node; - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node; - if (!node) { - return -44 - } - var perms = ""; - if (amode & 4) perms += "r"; - if (amode & 2) perms += "w"; - if (amode & 1) perms += "x"; - if (perms && FS.nodePermissions(node, perms)) { - return -2 - } - return 0 - }, - doDup: function(path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd - }, - doReadv: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.read(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) break - } - return ret - }, - doWritev: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr - } - return ret - }, - varargs: undefined, - get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret - }, - getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret - }, - getStreamFromFD: function(fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream - }, - get64: function(low, high) { - return low - } -}; - -function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_read(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 4294967296; - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - var DOUBLE_LIMIT = 9007199254740992; - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { - return -61 - } - FS.llseek(stream, offset, whence); - tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function __isLeapYear(year) { - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) -} - -function __arraySum(array, index) { - var sum = 0; - for (var i = 0; i <= index; sum += array[i++]) {} - return sum -} -var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; -var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - -function __addDays(date, days) { - var newDate = new Date(date.getTime()); - while (days > 0) { - var leap = __isLeapYear(newDate.getFullYear()); - var currentMonth = newDate.getMonth(); - var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth]; - if (days > daysInCurrentMonth - newDate.getDate()) { - days -= daysInCurrentMonth - newDate.getDate() + 1; - newDate.setDate(1); - if (currentMonth < 11) { - newDate.setMonth(currentMonth + 1) - } else { - newDate.setMonth(0); - newDate.setFullYear(newDate.getFullYear() + 1) - } - } else { - newDate.setDate(newDate.getDate() + days); - return newDate - } - } - return newDate -} - -function _strftime(s, maxsize, format, tm) { - var tm_zone = HEAP32[tm + 40 >> 2]; - var date = { - tm_sec: HEAP32[tm >> 2], - tm_min: HEAP32[tm + 4 >> 2], - tm_hour: HEAP32[tm + 8 >> 2], - tm_mday: HEAP32[tm + 12 >> 2], - tm_mon: HEAP32[tm + 16 >> 2], - tm_year: HEAP32[tm + 20 >> 2], - tm_wday: HEAP32[tm + 24 >> 2], - tm_yday: HEAP32[tm + 28 >> 2], - tm_isdst: HEAP32[tm + 32 >> 2], - tm_gmtoff: HEAP32[tm + 36 >> 2], - tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" - }; - var pattern = UTF8ToString(format); - var EXPANSION_RULES_1 = { - "%c": "%a %b %d %H:%M:%S %Y", - "%D": "%m/%d/%y", - "%F": "%Y-%m-%d", - "%h": "%b", - "%r": "%I:%M:%S %p", - "%R": "%H:%M", - "%T": "%H:%M:%S", - "%x": "%m/%d/%y", - "%X": "%H:%M:%S", - "%Ec": "%c", - "%EC": "%C", - "%Ex": "%m/%d/%y", - "%EX": "%H:%M:%S", - "%Ey": "%y", - "%EY": "%Y", - "%Od": "%d", - "%Oe": "%e", - "%OH": "%H", - "%OI": "%I", - "%Om": "%m", - "%OM": "%M", - "%OS": "%S", - "%Ou": "%u", - "%OU": "%U", - "%OV": "%V", - "%Ow": "%w", - "%OW": "%W", - "%Oy": "%y" - }; - for (var rule in EXPANSION_RULES_1) { - pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]) - } - var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; - var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - - function leadingSomething(value, digits, character) { - var str = typeof value === "number" ? value.toString() : value || ""; - while (str.length < digits) { - str = character[0] + str - } - return str - } - - function leadingNulls(value, digits) { - return leadingSomething(value, digits, "0") - } - - function compareByDay(date1, date2) { - function sgn(value) { - return value < 0 ? -1 : value > 0 ? 1 : 0 - } - var compare; - if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { - if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) { - compare = sgn(date1.getDate() - date2.getDate()) - } - } - return compare - } - - function getFirstWeekStartDate(janFourth) { - switch (janFourth.getDay()) { - case 0: - return new Date(janFourth.getFullYear() - 1, 11, 29); - case 1: - return janFourth; - case 2: - return new Date(janFourth.getFullYear(), 0, 3); - case 3: - return new Date(janFourth.getFullYear(), 0, 2); - case 4: - return new Date(janFourth.getFullYear(), 0, 1); - case 5: - return new Date(janFourth.getFullYear() - 1, 11, 31); - case 6: - return new Date(janFourth.getFullYear() - 1, 11, 30) - } - } - - function getWeekBasedYear(date) { - var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); - var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { - if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { - return thisDate.getFullYear() + 1 - } else { - return thisDate.getFullYear() - } - } else { - return thisDate.getFullYear() - 1 - } - } - var EXPANSION_RULES_2 = { - "%a": function(date) { - return WEEKDAYS[date.tm_wday].substring(0, 3) - }, - "%A": function(date) { - return WEEKDAYS[date.tm_wday] - }, - "%b": function(date) { - return MONTHS[date.tm_mon].substring(0, 3) - }, - "%B": function(date) { - return MONTHS[date.tm_mon] - }, - "%C": function(date) { - var year = date.tm_year + 1900; - return leadingNulls(year / 100 | 0, 2) - }, - "%d": function(date) { - return leadingNulls(date.tm_mday, 2) - }, - "%e": function(date) { - return leadingSomething(date.tm_mday, 2, " ") - }, - "%g": function(date) { - return getWeekBasedYear(date).toString().substring(2) - }, - "%G": function(date) { - return getWeekBasedYear(date) - }, - "%H": function(date) { - return leadingNulls(date.tm_hour, 2) - }, - "%I": function(date) { - var twelveHour = date.tm_hour; - if (twelveHour == 0) twelveHour = 12; - else if (twelveHour > 12) twelveHour -= 12; - return leadingNulls(twelveHour, 2) - }, - "%j": function(date) { - return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3) - }, - "%m": function(date) { - return leadingNulls(date.tm_mon + 1, 2) - }, - "%M": function(date) { - return leadingNulls(date.tm_min, 2) - }, - "%n": function() { - return "\n" - }, - "%p": function(date) { - if (date.tm_hour >= 0 && date.tm_hour < 12) { - return "AM" - } else { - return "PM" - } - }, - "%S": function(date) { - return leadingNulls(date.tm_sec, 2) - }, - "%t": function() { - return "\t" - }, - "%u": function(date) { - return date.tm_wday || 7 - }, - "%U": function(date) { - var janFirst = new Date(date.tm_year + 1900, 0, 1); - var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay()); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstSunday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstSundayUntilEndJanuary = 31 - firstSunday.getDate(); - var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2) - } - return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00" - }, - "%V": function(date) { - var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4); - var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - if (compareByDay(endDate, firstWeekStartThisYear) < 0) { - return "53" - } - if (compareByDay(firstWeekStartNextYear, endDate) <= 0) { - return "01" - } - var daysDifference; - if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) { - daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate() - } else { - daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate() - } - return leadingNulls(Math.ceil(daysDifference / 7), 2) - }, - "%w": function(date) { - return date.tm_wday - }, - "%W": function(date) { - var janFirst = new Date(date.tm_year, 0, 1); - var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstMonday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstMondayUntilEndJanuary = 31 - firstMonday.getDate(); - var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2) - } - return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00" - }, - "%y": function(date) { - return (date.tm_year + 1900).toString().substring(2) - }, - "%Y": function(date) { - return date.tm_year + 1900 - }, - "%z": function(date) { - var off = date.tm_gmtoff; - var ahead = off >= 0; - off = Math.abs(off) / 60; - off = off / 60 * 100 + off % 60; - return (ahead ? "+" : "-") + String("0000" + off).slice(-4) - }, - "%Z": function(date) { - return date.tm_zone - }, - "%%": function() { - return "%" - } - }; - for (var rule in EXPANSION_RULES_2) { - if (pattern.indexOf(rule) >= 0) { - pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date)) - } - } - var bytes = intArrayFromString(pattern, false); - if (bytes.length > maxsize) { - return 0 - } - writeArrayToMemory(bytes, s); - return bytes.length - 1 -} - -function _strftime_l(s, maxsize, format, tm) { - return _strftime(s, maxsize, format, tm) -} -var FSNode = function(parent, name, mode, rdev) { - if (!parent) { - parent = this - } - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev -}; -var readMode = 292 | 73; -var writeMode = 146; -Object.defineProperties(FSNode.prototype, { - read: { - get: function() { - return (this.mode & readMode) === readMode - }, - set: function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode - } - }, - write: { - get: function() { - return (this.mode & writeMode) === writeMode - }, - set: function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode - } - }, - isFolder: { - get: function() { - return FS.isDir(this.mode) - } - }, - isDevice: { - get: function() { - return FS.isChrdev(this.mode) - } - } -}); -FS.FSNode = FSNode; -FS.staticInit(); - -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array -} -__ATINIT__.push({ - func: function() { - ___wasm_call_ctors() - } -}); -var asmLibraryArg = { - "m": ___cxa_allocate_exception, - "l": ___cxa_throw, - "c": _abort, - "k": _emscripten_memcpy_big, - "d": _emscripten_resize_heap, - "f": _environ_get, - "g": _environ_sizes_get, - "i": _fd_close, - "h": _fd_read, - "j": _fd_seek, - "b": _fd_write, - "a": wasmMemory, - "e": _strftime_l -}; -var asm = createWasm(); -var ___wasm_call_ctors = Module.___wasm_call_ctors = function() { - return (___wasm_call_ctors = Module.___wasm_call_ctors = Module.asm.o).apply(null, arguments) -}; -var _Encoder_new = Module._Encoder_new = function() { - return (_Encoder_new = Module._Encoder_new = Module.asm.p).apply(null, arguments) -}; -var _Encoder_delete = Module._Encoder_delete = function() { - return (_Encoder_delete = Module._Encoder_delete = Module.asm.q).apply(null, arguments) -}; -var _Encoder_input = Module._Encoder_input = function() { - return (_Encoder_input = Module._Encoder_input = Module.asm.r).apply(null, arguments) -}; -var _Encoder_output = Module._Encoder_output = function() { - return (_Encoder_output = Module._Encoder_output = Module.asm.s).apply(null, arguments) -}; -var _Decoder_new = Module._Decoder_new = function() { - return (_Decoder_new = Module._Decoder_new = Module.asm.t).apply(null, arguments) -}; -var _Decoder_delete = Module._Decoder_delete = function() { - return (_Decoder_delete = Module._Decoder_delete = Module.asm.u).apply(null, arguments) -}; -var _Decoder_input = Module._Decoder_input = function() { - return (_Decoder_input = Module._Decoder_input = Module.asm.v).apply(null, arguments) -}; -var _Decoder_output = Module._Decoder_output = function() { - return (_Decoder_output = Module._Decoder_output = Module.asm.w).apply(null, arguments) -}; -var _String_size = Module._String_size = function() { - return (_String_size = Module._String_size = Module.asm.x).apply(null, arguments) -}; -var _String_new = Module._String_new = function() { - return (_String_new = Module._String_new = Module.asm.y).apply(null, arguments) -}; -var _String_data = Module._String_data = function() { - return (_String_data = Module._String_data = Module.asm.z).apply(null, arguments) -}; -var _String_delete = Module._String_delete = function() { - return (_String_delete = Module._String_delete = Module.asm.A).apply(null, arguments) -}; -var _Int16Array_size = Module._Int16Array_size = function() { - return (_Int16Array_size = Module._Int16Array_size = Module.asm.B).apply(null, arguments) -}; -var _Int16Array_new = Module._Int16Array_new = function() { - return (_Int16Array_new = Module._Int16Array_new = Module.asm.C).apply(null, arguments) -}; -var _Int16Array_data = Module._Int16Array_data = function() { - return (_Int16Array_data = Module._Int16Array_data = Module.asm.D).apply(null, arguments) -}; -var _Int16Array_delete = Module._Int16Array_delete = function() { - return (_Int16Array_delete = Module._Int16Array_delete = Module.asm.E).apply(null, arguments) -}; -var _malloc = Module._malloc = function() { - return (_malloc = Module._malloc = Module.asm.F).apply(null, arguments) -}; -var _free = Module._free = function() { - return (_free = Module._free = Module.asm.G).apply(null, arguments) -}; -var ___errno_location = Module.___errno_location = function() { - return (___errno_location = Module.___errno_location = Module.asm.H).apply(null, arguments) -}; -var calledRun; - -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status -} -dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller -}; - -function run(args) { - args = args || arguments_; - if (runDependencies > 0) { - return - } - preRun(); - if (runDependencies > 0) return; - - function doRun() { - if (calledRun) return; - calledRun = true; - Module.calledRun = true; - if (ABORT) return; - initRuntime(); - preMain(); - if (Module.onRuntimeInitialized) Module.onRuntimeInitialized(); - postRun() - } - if (Module.setStatus) { - Module.setStatus("Running..."); - setTimeout(function() { - setTimeout(function() { - Module.setStatus("") - }, 1); - doRun() - }, 1) - } else { - doRun() - } -} -Module.run = run; -if (Module.preInit) { - if (typeof Module.preInit === "function") Module.preInit = [Module.preInit]; - while (Module.preInit.length > 0) { - Module.preInit.pop()() - } -} -noExitRuntime = true; -run(); - -function Encoder(channels, samplerate, bitrate, frame_size, voice_optimization) { - this.enc = Module._Encoder_new.apply(null, arguments); - this.out = Module._String_new() -} -Encoder.prototype.destroy = function() { - Module._Encoder_delete(this.enc); - Module._String_delete(this.out) -}; -Encoder.prototype.input = function(samples) { - var ptr = Module._malloc(samples.length * samples.BYTES_PER_ELEMENT); - var pdata = new Uint8Array(Module.HEAPU8.buffer, ptr, samples.length * samples.BYTES_PER_ELEMENT); - pdata.set(new Uint8Array(samples.buffer, samples.byteOffset, samples.length * samples.BYTES_PER_ELEMENT)); - Module._Encoder_input(this.enc, ptr, samples.length); - Module._free(ptr) -}; -Encoder.prototype.output = function() { - var ok = Module._Encoder_output(this.enc, this.out); - if (ok) { - return new Uint8Array(Module.HEAPU8.buffer, Module._String_data(this.out), Module._String_size(this.out)) - } else { - throw new Error('not ok'); - } -}; - -function Decoder(channels, samplerate) { - this.dec = Module._Decoder_new.apply(null, arguments); - this.out = Module._Int16Array_new() -} -Decoder.prototype.destroy = function() { - Module._Decoder_delete(this.dec); - Module._Int16Array_delete(this.out) -}; -Decoder.prototype.input = function(packet) { - var ptr = Module._malloc(packet.length * packet.BYTES_PER_ELEMENT); - var pdata = new Uint8Array(Module.HEAPU8.buffer, ptr, packet.length * packet.BYTES_PER_ELEMENT); - pdata.set(new Uint8Array(packet.buffer, packet.byteOffset, packet.length * packet.BYTES_PER_ELEMENT)); - Module._Decoder_input(this.dec, ptr, packet.length); - Module._free(ptr) -}; -Decoder.prototype.output = function() { - var ok = Module._Decoder_output(this.dec, this.out); - if (ok) { - return new Int16Array(Module.HEAPU8.buffer, Module._Int16Array_data(this.out), Module._Int16Array_size(this.out)) - // } else { - // throw new Error('not ok'); - } -}; -Module.Encoder = Encoder; -Module.Decoder = Decoder; -if (Module.ENVIRONMENT != "NODE") libopus = Module; -let accept; -const p = new Promise((a, r) => { - accept = a; -}); -libopus.waitForReady = () => p; -libopus.onRuntimeInitialized = () => { - accept(); -}; -export default libopus; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.fs.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.fs.js deleted file mode 100644 index fb1ed4115..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.fs.js +++ /dev/null @@ -1,3741 +0,0 @@ -import path from 'path'; -import fs from 'fs'; - -const loadWasm = p => { - const b = fs.readFileSync(p); - const m = new WebAssembly.Module(b); - return m; -}; - -const dirname = path.dirname(new URL(import.meta.url).pathname); -const wasm = loadWasm(path.join(dirname, '/libopus.wasm')); - -const location = new URL('http://localhost'); - -let libopus; -var Module = typeof Module !== "undefined" ? Module : {}; -Module.onRuntimeInitialized = function() { - if (Module.onload) Module.onload(); - Module.loaded = true -}; -Module.locateFile = function(url) { - if (url == "libopusjs/libopus.wasm" && typeof LIBOPUS_WASM_URL !== "undefined") return LIBOPUS_WASM_URL; - else return url -}; -var moduleOverrides = {}; -var key; -for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key] - } -} -var arguments_ = []; -var thisProgram = "./this.program"; -var quit_ = function(status, toThrow) { - throw toThrow -}; -var ENVIRONMENT_IS_WEB = true; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; -// ENVIRONMENT_IS_WEB = typeof window === "object"; -// ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; -// ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; -// ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; -var scriptDirectory = ""; - -function locateFile(path) { - if (Module.locateFile) { - return Module.locateFile(path, scriptDirectory) - } - return scriptDirectory + path -} -var read_, readAsync, readBinary, setWindowTitle; -var nodeFS; -var nodePath; -if (ENVIRONMENT_IS_NODE) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = require("path").dirname(scriptDirectory) + "/" - } else { - scriptDirectory = __dirname + "/" - } - read_ = function shell_read(filename, binary) { - throw new Error("no fs"); - // if (!nodeFS) nodeFS = require("fs"); - if (!nodePath) nodePath = require("path"); - filename = nodePath.normalize(filename); - return nodeFS.readFileSync(filename, binary ? null : "utf8") - }; - readBinary = function readBinary(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret) - } - assert(ret.buffer); - return ret - }; - if (process.argv.length > 1) { - thisProgram = process.argv[1].replace(/\\/g, "/") - } - arguments_ = process.argv.slice(2); - // if (typeof module !== "undefined") { - // module.exports = Module - // } - process.on("uncaughtException", function(ex) { - if (!(ex instanceof ExitStatus)) { - throw ex - } - }); - process.on("unhandledRejection", abort); - quit_ = function(status) { - process.exit(status) - }; - Module.inspect = function() { - return "[Emscripten Module object]" - } -} else if (ENVIRONMENT_IS_SHELL) { - if (typeof read !== "undefined") { - read_ = function shell_read(f) { - return read(f) - } - } - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === "function") { - return new Uint8Array(readbuffer(f)) - } - data = read(f, "binary"); - assert(typeof data === "object"); - return data - }; - if (typeof scriptArgs !== "undefined") { - arguments_ = scriptArgs - } else if (typeof arguments !== "undefined") { - arguments_ = arguments - } - if (typeof quit === "function") { - quit_ = function(status) { - quit(status) - } - } - if (typeof print !== "undefined") { - if (typeof console === "undefined") console = {}; - console.log = print; - console.warn = console.error = typeof printErr !== "undefined" ? printErr : print - } -} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = location.href - } else if (globalThis.document?.currentScript) { - scriptDirectory = globalThis.document?.currentScript.src - } - if (scriptDirectory.indexOf("blob:") !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1) - } else { - scriptDirectory = "" - } { - read_ = function shell_read(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = function readBinary(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response) - } - } - readAsync = function readAsync(url, onload, onerror) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return - } - onerror() - }; - xhr.onerror = onerror; - xhr.send(null) - } - } - setWindowTitle = function(title) { - globalThis.document && (globalThis.document.title = title); - } -} else {} -var out = Module.print || console.log.bind(console); -var err = Module.printErr || console.warn.bind(console); -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key] - } -} -moduleOverrides = null; -if (Module.arguments) arguments_ = Module.arguments; -if (Module.thisProgram) thisProgram = Module.thisProgram; -if (Module.quit) quit_ = Module.quit; -var STACK_ALIGN = 16; - -function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; - return Math.ceil(size / factor) * factor -} -var wasmBinary; -if (Module.wasmBinary) wasmBinary = Module.wasmBinary; -var noExitRuntime; -if (Module.noExitRuntime) noExitRuntime = Module.noExitRuntime; -if (typeof WebAssembly !== "object") { - abort("no native wasm support detected") -} -var wasmMemory; -var wasmTable; -var ABORT = false; -var EXITSTATUS = 0; - -function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text) - } -} -var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; - -function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)) - } else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2 - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63 - } - if (u0 < 65536) { - str += String.fromCharCode(u0) - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) - } - } - } - return str -} - -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" -} - -function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023 - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63 - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } - } - heap[outIdx] = 0; - return outIdx - startIdx -} - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) -} - -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) ++len; - else if (u <= 2047) len += 2; - else if (u <= 65535) len += 3; - else len += 4 - } - return len -} - -function writeArrayToMemory(array, buffer) { - HEAP8.set(array, buffer) -} - -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) { - HEAP8[buffer++ >> 0] = str.charCodeAt(i) - } - if (!dontAddNull) HEAP8[buffer >> 0] = 0 -} -var WASM_PAGE_SIZE = 65536; -var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - -function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module.HEAP8 = HEAP8 = new Int8Array(buf); - Module.HEAP16 = HEAP16 = new Int16Array(buf); - Module.HEAP32 = HEAP32 = new Int32Array(buf); - Module.HEAPU8 = HEAPU8 = new Uint8Array(buf); - Module.HEAPU16 = HEAPU16 = new Uint16Array(buf); - Module.HEAPU32 = HEAPU32 = new Uint32Array(buf); - Module.HEAPF32 = HEAPF32 = new Float32Array(buf); - Module.HEAPF64 = HEAPF64 = new Float64Array(buf) -} -var INITIAL_INITIAL_MEMORY = Module.INITIAL_MEMORY || 16777216; -if (Module.wasmMemory) { - wasmMemory = Module.wasmMemory -} else { - wasmMemory = new WebAssembly.Memory({ - "initial": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE, - "maximum": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE - }) -} -if (wasmMemory) { - buffer = wasmMemory.buffer -} -INITIAL_INITIAL_MEMORY = buffer.byteLength; -updateGlobalBufferAndViews(buffer); -var __ATPRERUN__ = []; -var __ATINIT__ = []; -var __ATMAIN__ = []; -var __ATPOSTRUN__ = []; -var runtimeInitialized = false; - -function preRun() { - if (Module.preRun) { - if (typeof Module.preRun === "function") Module.preRun = [Module.preRun]; - while (Module.preRun.length) { - addOnPreRun(Module.preRun.shift()) - } - } - callRuntimeCallbacks(__ATPRERUN__) -} - -function initRuntime() { - runtimeInitialized = true; - if (!Module.noFSInit && !FS.init.initialized) FS.init(); - TTY.init(); - callRuntimeCallbacks(__ATINIT__) -} - -function preMain() { - FS.ignorePermissions = false; - callRuntimeCallbacks(__ATMAIN__) -} - -function postRun() { - if (Module.postRun) { - if (typeof Module.postRun === "function") Module.postRun = [Module.postRun]; - while (Module.postRun.length) { - addOnPostRun(Module.postRun.shift()) - } - } - callRuntimeCallbacks(__ATPOSTRUN__) -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb) -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb) -} -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; - -function getUniqueRunDependency(id) { - return id -} - -function addRunDependency(id) { - runDependencies++; - if (Module.monitorRunDependencies) { - Module.monitorRunDependencies(runDependencies) - } -} - -function removeRunDependency(id) { - runDependencies--; - if (Module.monitorRunDependencies) { - Module.monitorRunDependencies(runDependencies) - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback() - } - } -} -Module.preloadedImages = {}; -Module.preloadedAudios = {}; - -function abort(what) { - if (Module.onAbort) { - Module.onAbort(what) - } - what += ""; - err(what); - ABORT = true; - EXITSTATUS = 1; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - throw e -} - -function hasPrefix(str, prefix) { - return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0 -} -var dataURIPrefix = "data:application/octet-stream;base64,"; - -function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix) -} -var fileURIPrefix = "file://"; - -function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix) -} -var wasmBinaryFile = "libopusjs/libopus.wasm"; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile) -} - -function getBinary() { - try { - if (wasmBinary) { - return new Uint8Array(wasmBinary) - } - if (readBinary) { - return readBinary(wasmBinaryFile) - } else { - throw "both async and sync fetching of the wasm failed" - } - } catch (err) { - abort(err) - } -} - -async function getBinaryPromise() { - return wasm; - /* if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { - console.log('binary promise', { - wasmBinaryFile, - }); - const s = new URL(wasmBinaryFile, 'http://localhost'); - return fetch(s, { - // credentials: "same-origin" - }).then(function(response) { - if (!response.ok) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" - } - return response.arrayBuffer() - }).catch(function() { - return getBinary() - }) - } - return Promise.resolve().then(getBinary) */ -} - -function createWasm() { - var info = { - "a": asmLibraryArg - }; - - function receiveInstance(instance, module) { - var exports = instance.exports; - Module.asm = exports; - wasmTable = Module.asm.n; - removeRunDependency("wasm-instantiate") - } - addRunDependency("wasm-instantiate"); - - function receiveInstantiatedSource(output) { - receiveInstance(output.instance) - } - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info) - }).then(receiver, function(reason) { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason) - }) - } - - async function instantiateAsync() { - const instance = await WebAssembly.instantiate(wasm, info); - receiveInstance(instance); - } - if (Module.instantiateWasm) { - try { - var exports = Module.instantiateWasm(info, receiveInstance); - return exports - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false - } - } - instantiateAsync(); - return {} -} -var tempDouble; -var tempI64; - -function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback === "function") { - callback(Module); - continue - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === undefined) { - wasmTable.get(func)() - } else { - wasmTable.get(func)(callback.arg) - } - } else { - func(callback.arg === undefined ? null : callback.arg) - } - } -} - -function demangle(func) { - return func -} - -function demangleAll(text) { - var regex = /\b_Z[\w\d_]+/g; - return text.replace(regex, function(x) { - var y = demangle(x); - return x === y ? x : y + " [" + x + "]" - }) -} - -function jsStackTrace() { - var error = new Error; - if (!error.stack) { - try { - throw new Error - } catch (e) { - error = e - } - if (!error.stack) { - return "(no stack trace available)" - } - } - return error.stack.toString() -} - -function stackTrace() { - var js = jsStackTrace(); - if (Module.extraStackTrace) js += "\n" + Module.extraStackTrace(); - return demangleAll(js) -} -var ExceptionInfoAttrs = { - DESTRUCTOR_OFFSET: 0, - REFCOUNT_OFFSET: 4, - TYPE_OFFSET: 8, - CAUGHT_OFFSET: 12, - RETHROWN_OFFSET: 13, - SIZE: 16 -}; - -function ___cxa_allocate_exception(size) { - return _malloc(size + ExceptionInfoAttrs.SIZE) + ExceptionInfoAttrs.SIZE -} - -function ExceptionInfo(excPtr) { - this.excPtr = excPtr; - this.ptr = excPtr - ExceptionInfoAttrs.SIZE; - this.set_type = function(type) { - HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] = type - }; - this.get_type = function() { - return HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] - }; - this.set_destructor = function(destructor) { - HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] = destructor - }; - this.get_destructor = function() { - return HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] - }; - this.set_refcount = function(refcount) { - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = refcount - }; - this.set_caught = function(caught) { - caught = caught ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] = caught - }; - this.get_caught = function() { - return HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] != 0 - }; - this.set_rethrown = function(rethrown) { - rethrown = rethrown ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] = rethrown - }; - this.get_rethrown = function() { - return HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] != 0 - }; - this.init = function(type, destructor) { - this.set_type(type); - this.set_destructor(destructor); - this.set_refcount(0); - this.set_caught(false); - this.set_rethrown(false) - }; - this.add_ref = function() { - var value = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = value + 1 - }; - this.release_ref = function() { - var prev = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = prev - 1; - return prev === 1 - } -} -var exceptionLast = 0; - -function __ZSt18uncaught_exceptionv() { - return __ZSt18uncaught_exceptionv.uncaught_exceptions > 0 -} - -function ___cxa_throw(ptr, type, destructor) { - var info = new ExceptionInfo(ptr); - info.init(type, destructor); - exceptionLast = ptr; - if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { - __ZSt18uncaught_exceptionv.uncaught_exceptions = 1 - } else { - __ZSt18uncaught_exceptionv.uncaught_exceptions++ - } - throw ptr -} - -function _abort() { - abort() -} - -function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num) -} - -function abortOnCannotGrowMemory(requestedSize) { - abort("OOM") -} - -function _emscripten_resize_heap(requestedSize) { - requestedSize = requestedSize >>> 0; - abortOnCannotGrowMemory(requestedSize) -} -var ENV = {}; - -function getExecutableName() { - return thisProgram || "./this.program" -} - -function getEnvStrings() { - if (!getEnvStrings.strings) { - var lang = (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; - var env = { - "USER": "web_user", - "LOGNAME": "web_user", - "PATH": "/", - "PWD": "/", - "HOME": "/home/web_user", - "LANG": lang, - "_": getExecutableName() - }; - for (var x in ENV) { - env[x] = ENV[x] - } - var strings = []; - for (var x in env) { - strings.push(x + "=" + env[x]) - } - getEnvStrings.strings = strings - } - return getEnvStrings.strings -} - -function _environ_get(__environ, environ_buf) { - var bufSize = 0; - getEnvStrings().forEach(function(string, i) { - var ptr = environ_buf + bufSize; - HEAP32[__environ + i * 4 >> 2] = ptr; - writeAsciiToMemory(string, ptr); - bufSize += string.length + 1 - }); - return 0 -} - -function _environ_sizes_get(penviron_count, penviron_buf_size) { - var strings = getEnvStrings(); - HEAP32[penviron_count >> 2] = strings.length; - var bufSize = 0; - strings.forEach(function(string) { - bufSize += string.length + 1 - }); - HEAP32[penviron_buf_size >> 2] = bufSize; - return 0 -} -var PATH = { - splitPath: function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1) - }, - normalizeArray: function(parts, allowAboveRoot) { - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === ".") { - parts.splice(i, 1) - } else if (last === "..") { - parts.splice(i, 1); - up++ - } else if (up) { - parts.splice(i, 1); - up-- - } - } - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift("..") - } - } - return parts - }, - normalize: function(path) { - var isAbsolute = path.charAt(0) === "/"; - var trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), !isAbsolute).join("/"); - if (!path && !isAbsolute) { - path = "." - } - if (path && trailingSlash) { - path += "/" - } - return (isAbsolute ? "/" : "") + path - }, - dirname: function(path) { - var result = PATH.splitPath(path); - var root = result[0]; - var dir = result[1]; - if (!root && !dir) { - return "." - } - if (dir) { - dir = dir.substr(0, dir.length - 1) - } - return root + dir - }, - basename: function(path) { - if (path === "/") return "/"; - path = PATH.normalize(path); - path = path.replace(/\/$/, ""); - var lastSlash = path.lastIndexOf("/"); - if (lastSlash === -1) return path; - return path.substr(lastSlash + 1) - }, - extname: function(path) { - return PATH.splitPath(path)[3] - }, - join: function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join("/")) - }, - join2: function(l, r) { - return PATH.normalize(l + "/" + r) - } -}; - -function setErrNo(value) { - HEAP32[___errno_location() >> 2] = value; - return value -} - -function getRandomDevice() { - if (typeof crypto === "object" && typeof crypto.getRandomValues === "function") { - var randomBuffer = new Uint8Array(1); - return function() { - crypto.getRandomValues(randomBuffer); - return randomBuffer[0] - } - } else if (ENVIRONMENT_IS_NODE) { - try { - var crypto_module = require("crypto"); - return function() { - return crypto_module.randomBytes(1)[0] - } - } catch (e) {} - } - return function() { - abort("randomDevice") - } -} -var PATH_FS = { - resolve: function() { - var resolvedPath = ""; - var resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); - if (typeof path !== "string") { - throw new TypeError("Arguments to path.resolve must be strings") - } else if (!path) { - return "" - } - resolvedPath = path + "/" + resolvedPath; - resolvedAbsolute = path.charAt(0) === "/" - } - resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function(p) { - return !!p - }), !resolvedAbsolute).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "." - }, - relative: function(from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== "") break - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== "") break - } - if (start > end) return []; - return arr.slice(start, end - start + 1) - } - var fromParts = trim(from.split("/")); - var toParts = trim(to.split("/")); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push("..") - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join("/") - } -}; -var TTY = { - ttys: [], - init: function() {}, - shutdown: function() {}, - register: function(dev, ops) { - TTY.ttys[dev] = { - input: [], - output: [], - ops: ops - }; - FS.registerDevice(dev, TTY.stream_ops) - }, - stream_ops: { - open: function(stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(43) - } - stream.tty = tty; - stream.seekable = false - }, - close: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - flush: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - read: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(60) - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty) - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(60) - } - try { - for (var i = 0; i < length; i++) { - stream.tty.ops.put_char(stream.tty, buffer[offset + i]) - } - } catch (e) { - throw new FS.ErrnoError(29) - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }, - default_tty_ops: { - get_char: function(tty) { - if (!tty.input.length) { - var result = null; - if (ENVIRONMENT_IS_NODE) { - var BUFSIZE = 256; - var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); - var bytesRead = 0; - try { - bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null) - } catch (e) { - if (e.toString().indexOf("EOF") != -1) bytesRead = 0; - else throw e - } - if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString("utf-8") - } else { - result = null - } - } else if (typeof window !== "undefined" && typeof window.prompt === "function") { - result = window.prompt("Input: "); - if (result !== null) { - result += "\n" - } - } else if (typeof readline === "function") { - result = readline(); - if (result !== null) { - result += "\n" - } - } - if (!result) { - return null - } - tty.input = intArrayFromString(result, true) - } - return tty.input.shift() - }, - put_char: function(tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - }, - default_tty1_ops: { - put_char: function(tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - } -}; - -function mmapAlloc(size) { - var alignedSize = alignMemory(size, 16384); - var ptr = _malloc(alignedSize); - while (size < alignedSize) HEAP8[ptr + size++] = 0; - return ptr -} -var MEMFS = { - ops_table: null, - mount: function(mount) { - return MEMFS.createNode(null, "/", 16384 | 511, 0) - }, - createNode: function(parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - throw new FS.ErrnoError(63) - } - if (!MEMFS.ops_table) { - MEMFS.ops_table = { - dir: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - lookup: MEMFS.node_ops.lookup, - mknod: MEMFS.node_ops.mknod, - rename: MEMFS.node_ops.rename, - unlink: MEMFS.node_ops.unlink, - rmdir: MEMFS.node_ops.rmdir, - readdir: MEMFS.node_ops.readdir, - symlink: MEMFS.node_ops.symlink - }, - stream: { - llseek: MEMFS.stream_ops.llseek - } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap, - msync: MEMFS.stream_ops.msync - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - } - } - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {} - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; - node.contents = null - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream - } - node.timestamp = Date.now(); - if (parent) { - parent.contents[name] = node - } - return node - }, - getFileDataAsRegularArray: function(node) { - if (node.contents && node.contents.subarray) { - var arr = []; - for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); - return arr - } - return node.contents - }, - getFileDataAsTypedArray: function(node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); - return new Uint8Array(node.contents) - }, - expandFileStorage: function(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) return; - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); - }, - resizeFileStorage: function(node, newSize) { - if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; - node.usedBytes = 0; - return - } - if (!node.contents || node.contents.subarray) { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); - if (oldContents) { - node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) - } - node.usedBytes = newSize; - return - } - if (!node.contents) node.contents = []; - if (node.contents.length > newSize) node.contents.length = newSize; - else - while (node.contents.length < newSize) node.contents.push(0); - node.usedBytes = newSize - }, - node_ops: { - getattr: function(node) { - var attr = {}; - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096 - } else if (FS.isFile(node.mode)) { - attr.size = node.usedBytes - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length - } else { - attr.size = 0 - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr - }, - setattr: function(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp - } - if (attr.size !== undefined) { - MEMFS.resizeFileStorage(node, attr.size) - } - }, - lookup: function(parent, name) { - throw FS.genericErrors[44] - }, - mknod: function(parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev) - }, - rename: function(old_node, new_dir, new_name) { - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55) - } - } - } - delete old_node.parent.contents[old_node.name]; - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - old_node.parent = new_dir - }, - unlink: function(parent, name) { - delete parent.contents[name] - }, - rmdir: function(parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(55) - } - delete parent.contents[name] - }, - readdir: function(node) { - var entries = [".", ".."]; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue - } - entries.push(key) - } - return entries - }, - symlink: function(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); - node.link = oldpath; - return node - }, - readlink: function(node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(28) - } - return node.link - } - }, - stream_ops: { - read: function(stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) return 0; - var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) { - buffer.set(contents.subarray(position, position + size), offset) - } else { - for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] - } - return size - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (!length) return 0; - var node = stream.node; - node.timestamp = Date.now(); - if (buffer.subarray && (!node.contents || node.contents.subarray)) { - if (canOwn) { - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length - } else if (node.usedBytes === 0 && position === 0) { - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length - } else if (position + length <= node.usedBytes) { - node.contents.set(buffer.subarray(offset, offset + length), position); - return length - } - } - MEMFS.expandFileStorage(node, position + length); - if (node.contents.subarray && buffer.subarray) { - node.contents.set(buffer.subarray(offset, offset + length), position) - } else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer[offset + i] - } - } - node.usedBytes = Math.max(node.usedBytes, position + length); - return length - }, - llseek: function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.usedBytes - } - } - if (position < 0) { - throw new FS.ErrnoError(28) - } - return position - }, - allocate: function(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) - }, - mmap: function(stream, address, length, position, prot, flags) { - assert(address === 0); - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - var ptr; - var allocated; - var contents = stream.node.contents; - if (!(flags & 2) && contents.buffer === buffer) { - allocated = false; - ptr = contents.byteOffset - } else { - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length) - } else { - contents = Array.prototype.slice.call(contents, position, position + length) - } - } - allocated = true; - ptr = mmapAlloc(length); - if (!ptr) { - throw new FS.ErrnoError(48) - } - HEAP8.set(contents, ptr) - } - return { - ptr: ptr, - allocated: allocated - } - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (mmapFlags & 2) { - return 0 - } - var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); - return 0 - } - } -}; -var FS = { - root: null, - mounts: [], - devices: {}, - streams: [], - nextInode: 1, - nameTable: null, - currentPath: "/", - initialized: false, - ignorePermissions: true, - trackingDelegate: {}, - tracking: { - openFlags: { - READ: 1, - WRITE: 2 - } - }, - ErrnoError: null, - genericErrors: {}, - filesystems: null, - syncFSRequests: 0, - handleFSError: function(e) { - if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace(); - return setErrNo(e.errno) - }, - lookupPath: function(path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - if (!path) return { - path: "", - node: null - }; - var defaults = { - follow_mount: true, - recurse_count: 0 - }; - for (var key in defaults) { - if (opts[key] === undefined) { - opts[key] = defaults[key] - } - } - if (opts.recurse_count > 8) { - throw new FS.ErrnoError(32) - } - var parts = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), false); - var current = FS.root; - var current_path = "/"; - for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; - if (islast && opts.parent) { - break - } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - if (FS.isMountpoint(current)) { - if (!islast || islast && opts.follow_mount) { - current = current.mounted.root - } - } - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { - recurse_count: opts.recurse_count - }); - current = lookup.node; - if (count++ > 40) { - throw new FS.ErrnoError(32) - } - } - } - } - return { - path: current_path, - node: current - } - }, - getPath: function(node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path - } - path = path ? node.name + "/" + path : node.name; - node = node.parent - } - }, - hashName: function(parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) { - hash = (hash << 5) - hash + name.charCodeAt(i) | 0 - } - return (parentid + hash >>> 0) % FS.nameTable.length - }, - hashAddNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node - }, - hashRemoveNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break - } - current = current.name_next - } - } - }, - lookupNode: function(parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) { - throw new FS.ErrnoError(errCode, parent) - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node - } - } - return FS.lookup(parent, name) - }, - createNode: function(parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - FS.hashAddNode(node); - return node - }, - destroyNode: function(node) { - FS.hashRemoveNode(node) - }, - isRoot: function(node) { - return node === node.parent - }, - isMountpoint: function(node) { - return !!node.mounted - }, - isFile: function(mode) { - return (mode & 61440) === 32768 - }, - isDir: function(mode) { - return (mode & 61440) === 16384 - }, - isLink: function(mode) { - return (mode & 61440) === 40960 - }, - isChrdev: function(mode) { - return (mode & 61440) === 8192 - }, - isBlkdev: function(mode) { - return (mode & 61440) === 24576 - }, - isFIFO: function(mode) { - return (mode & 61440) === 4096 - }, - isSocket: function(mode) { - return (mode & 49152) === 49152 - }, - flagModes: { - "r": 0, - "rs": 1052672, - "r+": 2, - "w": 577, - "wx": 705, - "xw": 705, - "w+": 578, - "wx+": 706, - "xw+": 706, - "a": 1089, - "ax": 1217, - "xa": 1217, - "a+": 1090, - "ax+": 1218, - "xa+": 1218 - }, - modeStringToFlags: function(str) { - var flags = FS.flagModes[str]; - if (typeof flags === "undefined") { - throw new Error("Unknown file open mode: " + str) - } - return flags - }, - flagsToPermissionString: function(flag) { - var perms = ["r", "w", "rw"][flag & 3]; - if (flag & 512) { - perms += "w" - } - return perms - }, - nodePermissions: function(node, perms) { - if (FS.ignorePermissions) { - return 0 - } - if (perms.indexOf("r") !== -1 && !(node.mode & 292)) { - return 2 - } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) { - return 2 - } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) { - return 2 - } - return 0 - }, - mayLookup: function(dir) { - var errCode = FS.nodePermissions(dir, "x"); - if (errCode) return errCode; - if (!dir.node_ops.lookup) return 2; - return 0 - }, - mayCreate: function(dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20 - } catch (e) {} - return FS.nodePermissions(dir, "wx") - }, - mayDelete: function(dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name) - } catch (e) { - return e.errno - } - var errCode = FS.nodePermissions(dir, "wx"); - if (errCode) { - return errCode - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return 54 - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return 10 - } - } else { - if (FS.isDir(node.mode)) { - return 31 - } - } - return 0 - }, - mayOpen: function(node, flags) { - if (!node) { - return 44 - } - if (FS.isLink(node.mode)) { - return 32 - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { - return 31 - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) - }, - MAX_OPEN_FDS: 4096, - nextfd: function(fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd - } - } - throw new FS.ErrnoError(33) - }, - getStream: function(fd) { - return FS.streams[fd] - }, - createStream: function(stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function() {}; - FS.FSStream.prototype = { - object: { - get: function() { - return this.node - }, - set: function(val) { - this.node = val - } - }, - isRead: { - get: function() { - return (this.flags & 2097155) !== 1 - } - }, - isWrite: { - get: function() { - return (this.flags & 2097155) !== 0 - } - }, - isAppend: { - get: function() { - return this.flags & 1024 - } - } - } - } - var newStream = new FS.FSStream; - for (var p in stream) { - newStream[p] = stream[p] - } - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream - }, - closeStream: function(fd) { - FS.streams[fd] = null - }, - chrdev_stream_ops: { - open: function(stream) { - var device = FS.getDevice(stream.node.rdev); - stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - }, - llseek: function() { - throw new FS.ErrnoError(70) - } - }, - major: function(dev) { - return dev >> 8 - }, - minor: function(dev) { - return dev & 255 - }, - makedev: function(ma, mi) { - return ma << 8 | mi - }, - registerDevice: function(dev, ops) { - FS.devices[dev] = { - stream_ops: ops - } - }, - getDevice: function(dev) { - return FS.devices[dev] - }, - getMounts: function(mount) { - var mounts = []; - var check = [mount]; - while (check.length) { - var m = check.pop(); - mounts.push(m); - check.push.apply(check, m.mounts) - } - return mounts - }, - syncfs: function(populate, callback) { - if (typeof populate === "function") { - callback = populate; - populate = false - } - FS.syncFSRequests++; - if (FS.syncFSRequests > 1) { - err("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work") - } - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - - function doCallback(errCode) { - FS.syncFSRequests--; - return callback(errCode) - } - - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode) - } - return - } - if (++completed >= mounts.length) { - doCallback(null) - } - } - mounts.forEach(function(mount) { - if (!mount.type.syncfs) { - return done(null) - } - mount.type.syncfs(mount, populate, done) - }) - }, - mount: function(type, opts, mountpoint) { - var root = mountpoint === "/"; - var pseudo = !mountpoint; - var node; - if (root && FS.root) { - throw new FS.ErrnoError(10) - } else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - mountpoint = lookup.path; - node = lookup.node; - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - if (!FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - } - var mount = { - type: type, - opts: opts, - mountpoint: mountpoint, - mounts: [] - }; - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - if (root) { - FS.root = mountRoot - } else if (node) { - node.mounted = mount; - if (node.mount) { - node.mount.mounts.push(mount) - } - } - return mountRoot - }, - unmount: function(mountpoint) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - if (!FS.isMountpoint(lookup.node)) { - throw new FS.ErrnoError(28) - } - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach(function(hash) { - var current = FS.nameTable[hash]; - while (current) { - var next = current.name_next; - if (mounts.indexOf(current.mount) !== -1) { - FS.destroyNode(current) - } - current = next - } - }); - node.mounted = null; - var idx = node.mount.mounts.indexOf(mount); - node.mount.mounts.splice(idx, 1) - }, - lookup: function(parent, name) { - return parent.node_ops.lookup(parent, name) - }, - mknod: function(path, mode, dev) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === "." || name === "..") { - throw new FS.ErrnoError(28) - } - var errCode = FS.mayCreate(parent, name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.mknod(parent, name, mode, dev) - }, - create: function(path, mode) { - mode = mode !== undefined ? mode : 438; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0) - }, - mkdir: function(path, mode) { - mode = mode !== undefined ? mode : 511; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0) - }, - mkdirTree: function(path, mode) { - var dirs = path.split("/"); - var d = ""; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += "/" + dirs[i]; - try { - FS.mkdir(d, mode) - } catch (e) { - if (e.errno != 20) throw e - } - } - }, - mkdev: function(path, mode, dev) { - if (typeof dev === "undefined") { - dev = mode; - mode = 438 - } - mode |= 8192; - return FS.mknod(path, mode, dev) - }, - symlink: function(oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) { - throw new FS.ErrnoError(44) - } - var lookup = FS.lookupPath(newpath, { - parent: true - }); - var parent = lookup.node; - if (!parent) { - throw new FS.ErrnoError(44) - } - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.symlink(parent, newname, oldpath) - }, - rename: function(old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - var lookup, old_dir, new_dir; - lookup = FS.lookupPath(old_path, { - parent: true - }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { - parent: true - }); - new_dir = lookup.node; - if (!old_dir || !new_dir) throw new FS.ErrnoError(44); - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(75) - } - var old_node = FS.lookupNode(old_dir, old_name); - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(28) - } - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(55) - } - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (old_node === new_node) { - return - } - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { - throw new FS.ErrnoError(10) - } - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - try { - if (FS.trackingDelegate.willMovePath) { - FS.trackingDelegate.willMovePath(old_path, new_path) - } - } catch (e) { - err("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name) - } catch (e) { - throw e - } finally { - FS.hashAddNode(old_node) - } - try { - if (FS.trackingDelegate.onMovePath) FS.trackingDelegate.onMovePath(old_path, new_path) - } catch (e) { - err("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - }, - rmdir: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate.willDeletePath) { - FS.trackingDelegate.willDeletePath(path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate.onDeletePath) FS.trackingDelegate.onDeletePath(path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54) - } - return node.node_ops.readdir(node) - }, - unlink: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate.willDeletePath) { - FS.trackingDelegate.willDeletePath(path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate.onDeletePath) FS.trackingDelegate.onDeletePath(path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readlink: function(path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) { - throw new FS.ErrnoError(44) - } - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(28) - } - return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) - }, - stat: function(path, dontFollow) { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44) - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63) - } - return node.node_ops.getattr(node) - }, - lstat: function(path) { - return FS.stat(path, true) - }, - chmod: function(path, mode, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - mode: mode & 4095 | node.mode & ~4095, - timestamp: Date.now() - }) - }, - lchmod: function(path, mode) { - FS.chmod(path, mode, true) - }, - fchmod: function(fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chmod(stream.node, mode) - }, - chown: function(path, uid, gid, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - timestamp: Date.now() - }) - }, - lchown: function(path, uid, gid) { - FS.chown(path, uid, gid, true) - }, - fchown: function(fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chown(stream.node, uid, gid) - }, - truncate: function(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28) - } - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(31) - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(28) - } - var errCode = FS.nodePermissions(node, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - node.node_ops.setattr(node, { - size: len, - timestamp: Date.now() - }) - }, - ftruncate: function(fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(28) - } - FS.truncate(stream.node, len) - }, - utime: function(path, atime, mtime) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) - }) - }, - open: function(path, flags, mode, fd_start, fd_end) { - if (path === "") { - throw new FS.ErrnoError(44) - } - flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === "undefined" ? 438 : mode; - if (flags & 64) { - mode = mode & 4095 | 32768 - } else { - mode = 0 - } - var node; - if (typeof path === "object") { - node = path - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node - } catch (e) {} - } - var created = false; - if (flags & 64) { - if (node) { - if (flags & 128) { - throw new FS.ErrnoError(20) - } - } else { - node = FS.mknod(path, mode, 0); - created = true - } - } - if (!node) { - throw new FS.ErrnoError(44) - } - if (FS.isChrdev(node.mode)) { - flags &= ~512 - } - if (flags & 65536 && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - if (flags & 512) { - FS.truncate(node, 0) - } - flags &= ~(128 | 512 | 131072); - var stream = FS.createStream({ - node: node, - path: FS.getPath(node), - flags: flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - ungotten: [], - error: false - }, fd_start, fd_end); - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - if (Module.logReadFiles && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path) - } - } - try { - if (FS.trackingDelegate.onOpenFile) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) { - trackingFlags |= FS.tracking.openFlags.READ - } - if ((flags & 2097155) !== 0) { - trackingFlags |= FS.tracking.openFlags.WRITE - } - FS.trackingDelegate.onOpenFile(path, trackingFlags) - } - } catch (e) { - err("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message) - } - return stream - }, - close: function(stream) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (stream.getdents) stream.getdents = null; - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream) - } - } catch (e) { - throw e - } finally { - FS.closeStream(stream.fd) - } - stream.fd = null - }, - isClosed: function(stream) { - return stream.fd === null - }, - llseek: function(stream, offset, whence) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(70) - } - if (whence != 0 && whence != 1 && whence != 2) { - throw new FS.ErrnoError(28) - } - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position - }, - read: function(stream, buffer, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(28) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(28) - } - if (stream.seekable && stream.flags & 1024) { - FS.llseek(stream, 0, 2) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - try { - if (stream.path && FS.trackingDelegate.onWriteToFile) FS.trackingDelegate.onWriteToFile(stream.path) - } catch (e) { - err("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message) - } - return bytesWritten - }, - allocate: function(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138) - } - stream.stream_ops.allocate(stream, offset, length) - }, - mmap: function(stream, address, length, position, prot, flags) { - if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { - throw new FS.ErrnoError(2) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(2) - } - if (!stream.stream_ops.mmap) { - throw new FS.ErrnoError(43) - } - return stream.stream_ops.mmap(stream, address, length, position, prot, flags) - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) { - return 0 - } - return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) - }, - munmap: function(stream) { - return 0 - }, - ioctl: function(stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(59) - } - return stream.stream_ops.ioctl(stream, cmd, arg) - }, - readFile: function(path, opts) { - opts = opts || {}; - opts.flags = opts.flags || "r"; - opts.encoding = opts.encoding || "binary"; - if (opts.encoding !== "utf8" && opts.encoding !== "binary") { - throw new Error('Invalid encoding type "' + opts.encoding + '"') - } - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === "utf8") { - ret = UTF8ArrayToString(buf, 0) - } else if (opts.encoding === "binary") { - ret = buf - } - FS.close(stream); - return ret - }, - writeFile: function(path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || "w"; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === "string") { - var buf = new Uint8Array(lengthBytesUTF8(data) + 1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) - } else { - throw new Error("Unsupported data type") - } - FS.close(stream) - }, - cwd: function() { - return FS.currentPath - }, - chdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - if (lookup.node === null) { - throw new FS.ErrnoError(44) - } - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(54) - } - var errCode = FS.nodePermissions(lookup.node, "x"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - FS.currentPath = lookup.path - }, - createDefaultDirectories: function() { - FS.mkdir("/tmp"); - FS.mkdir("/home"); - FS.mkdir("/home/web_user") - }, - createDefaultDevices: function() { - FS.mkdir("/dev"); - FS.registerDevice(FS.makedev(1, 3), { - read: function() { - return 0 - }, - write: function(stream, buffer, offset, length, pos) { - return length - } - }); - FS.mkdev("/dev/null", FS.makedev(1, 3)); - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev("/dev/tty", FS.makedev(5, 0)); - FS.mkdev("/dev/tty1", FS.makedev(6, 0)); - var random_device = getRandomDevice(); - FS.createDevice("/dev", "random", random_device); - FS.createDevice("/dev", "urandom", random_device); - FS.mkdir("/dev/shm"); - FS.mkdir("/dev/shm/tmp") - }, - createSpecialDirectories: function() { - FS.mkdir("/proc"); - FS.mkdir("/proc/self"); - FS.mkdir("/proc/self/fd"); - FS.mount({ - mount: function() { - var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73); - node.node_ops = { - lookup: function(parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - var ret = { - parent: null, - mount: { - mountpoint: "fake" - }, - node_ops: { - readlink: function() { - return stream.path - } - } - }; - ret.parent = ret; - return ret - } - }; - return node - } - }, {}, "/proc/self/fd") - }, - createStandardStreams: function() { - if (Module.stdin) { - FS.createDevice("/dev", "stdin", Module.stdin) - } else { - FS.symlink("/dev/tty", "/dev/stdin") - } - if (Module.stdout) { - FS.createDevice("/dev", "stdout", null, Module.stdout) - } else { - FS.symlink("/dev/tty", "/dev/stdout") - } - if (Module.stderr) { - FS.createDevice("/dev", "stderr", null, Module.stderr) - } else { - FS.symlink("/dev/tty1", "/dev/stderr") - } - var stdin = FS.open("/dev/stdin", "r"); - var stdout = FS.open("/dev/stdout", "w"); - var stderr = FS.open("/dev/stderr", "w") - }, - ensureErrnoError: function() { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.node = node; - this.setErrno = function(errno) { - this.errno = errno - }; - this.setErrno(errno); - this.message = "FS error" - }; - FS.ErrnoError.prototype = new Error; - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [44].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = "" - }) - }, - staticInit: function() { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.mount(MEMFS, {}, "/"); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - FS.filesystems = { - "MEMFS": MEMFS - } - }, - init: function(input, output, error) { - FS.init.initialized = true; - FS.ensureErrnoError(); - Module.stdin = input || Module.stdin; - Module.stdout = output || Module.stdout; - Module.stderr = error || Module.stderr; - FS.createStandardStreams() - }, - quit: function() { - FS.init.initialized = false; - var fflush = Module._fflush; - if (fflush) fflush(0); - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue - } - FS.close(stream) - } - }, - getMode: function(canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode - }, - findObject: function(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object - } else { - setErrNo(ret.error); - return null - } - }, - analyzePath: function(path, dontResolveLastLink) { - try { - var lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - path = lookup.path - } catch (e) {} - var ret = { - isRoot: false, - exists: false, - error: 0, - name: null, - path: null, - object: null, - parentExists: false, - parentPath: null, - parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { - parent: true - }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === "/" - } catch (e) { - ret.error = e.errno - } - return ret - }, - createPath: function(parent, path, canRead, canWrite) { - parent = typeof parent === "string" ? parent : FS.getPath(parent); - var parts = path.split("/").reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current) - } catch (e) {} - parent = current - } - return current - }, - createFile: function(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode) - }, - createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === "string") { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr - } - FS.chmod(node, mode | 146); - var stream = FS.open(node, "w"); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode) - } - return node - }, - createDevice: function(parent, name, input, output) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false - }, - close: function(stream) { - if (output && output.buffer && output.buffer.length) { - output(10) - } - }, - read: function(stream, buffer, offset, length, pos) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input() - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer[offset + i]) - } catch (e) { - throw new FS.ErrnoError(29) - } - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }); - return FS.mkdev(path, mode, dev) - }, - forceLoadFile: function(obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - var success = true; - if (typeof XMLHttpRequest !== "undefined") { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.") - } else if (read_) { - try { - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length - } catch (e) { - success = false - } - } else { - throw new Error("Cannot load without read() or XMLHttpRequest.") - } - if (!success) setErrNo(29); - return success - }, - createLazyFile: function(parent, name, url, canRead, canWrite) { - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = [] - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length - 1 || idx < 0) { - return undefined - } - var chunkOffset = idx % this.chunkSize; - var chunkNum = idx / this.chunkSize | 0; - return this.getter(chunkNum)[chunkOffset] - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter - }; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - var xhr = new XMLHttpRequest; - xhr.open("HEAD", url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; - var chunkSize = 1024 * 1024; - if (!hasByteServing) chunkSize = datalength; - var doXHR = function(from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - if (typeof Uint8Array !== "undefined") xhr.responseType = "arraybuffer"; - if (xhr.overrideMimeType) { - xhr.overrideMimeType("text/plain; charset=x-user-defined") - } - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - if (xhr.response !== undefined) { - return new Uint8Array(xhr.response || []) - } else { - return intArrayFromString(xhr.responseText || "", true) - } - }; - var lazyArray = this; - lazyArray.setDataGetter(function(chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum + 1) * chunkSize - 1; - end = Math.min(end, datalength - 1); - if (typeof lazyArray.chunks[chunkNum] === "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end) - } - if (typeof lazyArray.chunks[chunkNum] === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum] - }); - if (usesGzip || !datalength) { - chunkSize = datalength = 1; - datalength = this.getter(0).length; - chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed") - } - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true - }; - if (typeof XMLHttpRequest !== "undefined") { - if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; - var lazyArray = new LazyUint8Array; - Object.defineProperties(lazyArray, { - length: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._length - } - }, - chunkSize: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._chunkSize - } - } - }); - var properties = { - isDevice: false, - contents: lazyArray - } - } else { - var properties = { - isDevice: false, - url: url - } - } - var node = FS.createFile(parent, name, properties, canRead, canWrite); - if (properties.contents) { - node.contents = properties.contents - } else if (properties.url) { - node.contents = null; - node.url = properties.url - } - Object.defineProperties(node, { - usedBytes: { - get: function() { - return this.contents.length - } - } - }); - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - return fn.apply(null, arguments) - } - }); - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - var contents = stream.node.contents; - if (position >= contents.length) return 0; - var size = Math.min(contents.length - position, length); - if (contents.slice) { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i] - } - } else { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents.get(position + i) - } - } - return size - }; - node.stream_ops = stream_ops; - return node - }, - createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency("cp " + fullname); - - function processData(byteArray) { - function finish(byteArray) { - if (preFinish) preFinish(); - if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) - } - if (onload) onload(); - removeRunDependency(dep) - } - var handled = false; - Module.preloadPlugins.forEach(function(plugin) { - if (handled) return; - if (plugin.canHandle(fullname)) { - plugin.handle(byteArray, fullname, finish, function() { - if (onerror) onerror(); - removeRunDependency(dep) - }); - handled = true - } - }); - if (!handled) finish(byteArray) - } - addRunDependency(dep); - if (typeof url === "string") { - Browser.asyncLoad(url, function(byteArray) { - processData(byteArray) - }, onerror) - } else { - processData(url) - } - }, - indexedDB: function() { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB - }, - DB_NAME: function() { - return "EM_FS_" + window.location.pathname - }, - DB_VERSION: 20, - DB_STORE_NAME: "FILE_DATA", - saveFilesToDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out("creating db"); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME) - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0; - var fail = 0; - var total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { - ok++; - if (ok + fail == total) finish() - }; - putRequest.onerror = function putRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - }, - loadFilesFromDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = onerror; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], "readonly") - } catch (e) { - onerror(e); - return - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0; - var fail = 0; - var total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path) - } - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish() - }; - getRequest.onerror = function getRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - } -}; -var SYSCALLS = { - mappings: {}, - DEFAULT_POLLMASK: 5, - umask: 511, - calculateAt: function(dirfd, path) { - if (path[0] !== "/") { - var dir; - if (dirfd === -100) { - dir = FS.cwd() - } else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) throw new FS.ErrnoError(8); - dir = dirstream.path - } - path = PATH.join2(dir, path) - } - return path - }, - doStat: function(func, path, buf) { - try { - var stat = func(path) - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54 - } - throw e - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 4 >> 2] = 0; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAP32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - HEAP32[buf + 32 >> 2] = 0; - tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; - HEAP32[buf + 60 >> 2] = 0; - HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; - HEAP32[buf + 68 >> 2] = 0; - HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; - HEAP32[buf + 76 >> 2] = 0; - tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; - return 0 - }, - doMsync: function(addr, stream, len, flags, offset) { - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags) - }, - doMkdir: function(path, mode) { - path = PATH.normalize(path); - if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); - FS.mkdir(path, mode, 0); - return 0 - }, - doMknod: function(path, mode, dev) { - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - return -28 - } - FS.mknod(path, mode, dev); - return 0 - }, - doReadlink: function(path, buf, bufsize) { - if (bufsize <= 0) return -28; - var ret = FS.readlink(path); - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf + len]; - stringToUTF8(ret, buf, bufsize + 1); - HEAP8[buf + len] = endChar; - return len - }, - doAccess: function(path, amode) { - if (amode & ~7) { - return -28 - } - var node; - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node; - if (!node) { - return -44 - } - var perms = ""; - if (amode & 4) perms += "r"; - if (amode & 2) perms += "w"; - if (amode & 1) perms += "x"; - if (perms && FS.nodePermissions(node, perms)) { - return -2 - } - return 0 - }, - doDup: function(path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd - }, - doReadv: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.read(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) break - } - return ret - }, - doWritev: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr - } - return ret - }, - varargs: undefined, - get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret - }, - getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret - }, - getStreamFromFD: function(fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream - }, - get64: function(low, high) { - return low - } -}; - -function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_read(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 4294967296; - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - var DOUBLE_LIMIT = 9007199254740992; - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { - return -61 - } - FS.llseek(stream, offset, whence); - tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function __isLeapYear(year) { - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) -} - -function __arraySum(array, index) { - var sum = 0; - for (var i = 0; i <= index; sum += array[i++]) {} - return sum -} -var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; -var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - -function __addDays(date, days) { - var newDate = new Date(date.getTime()); - while (days > 0) { - var leap = __isLeapYear(newDate.getFullYear()); - var currentMonth = newDate.getMonth(); - var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth]; - if (days > daysInCurrentMonth - newDate.getDate()) { - days -= daysInCurrentMonth - newDate.getDate() + 1; - newDate.setDate(1); - if (currentMonth < 11) { - newDate.setMonth(currentMonth + 1) - } else { - newDate.setMonth(0); - newDate.setFullYear(newDate.getFullYear() + 1) - } - } else { - newDate.setDate(newDate.getDate() + days); - return newDate - } - } - return newDate -} - -function _strftime(s, maxsize, format, tm) { - var tm_zone = HEAP32[tm + 40 >> 2]; - var date = { - tm_sec: HEAP32[tm >> 2], - tm_min: HEAP32[tm + 4 >> 2], - tm_hour: HEAP32[tm + 8 >> 2], - tm_mday: HEAP32[tm + 12 >> 2], - tm_mon: HEAP32[tm + 16 >> 2], - tm_year: HEAP32[tm + 20 >> 2], - tm_wday: HEAP32[tm + 24 >> 2], - tm_yday: HEAP32[tm + 28 >> 2], - tm_isdst: HEAP32[tm + 32 >> 2], - tm_gmtoff: HEAP32[tm + 36 >> 2], - tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" - }; - var pattern = UTF8ToString(format); - var EXPANSION_RULES_1 = { - "%c": "%a %b %d %H:%M:%S %Y", - "%D": "%m/%d/%y", - "%F": "%Y-%m-%d", - "%h": "%b", - "%r": "%I:%M:%S %p", - "%R": "%H:%M", - "%T": "%H:%M:%S", - "%x": "%m/%d/%y", - "%X": "%H:%M:%S", - "%Ec": "%c", - "%EC": "%C", - "%Ex": "%m/%d/%y", - "%EX": "%H:%M:%S", - "%Ey": "%y", - "%EY": "%Y", - "%Od": "%d", - "%Oe": "%e", - "%OH": "%H", - "%OI": "%I", - "%Om": "%m", - "%OM": "%M", - "%OS": "%S", - "%Ou": "%u", - "%OU": "%U", - "%OV": "%V", - "%Ow": "%w", - "%OW": "%W", - "%Oy": "%y" - }; - for (var rule in EXPANSION_RULES_1) { - pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]) - } - var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; - var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - - function leadingSomething(value, digits, character) { - var str = typeof value === "number" ? value.toString() : value || ""; - while (str.length < digits) { - str = character[0] + str - } - return str - } - - function leadingNulls(value, digits) { - return leadingSomething(value, digits, "0") - } - - function compareByDay(date1, date2) { - function sgn(value) { - return value < 0 ? -1 : value > 0 ? 1 : 0 - } - var compare; - if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { - if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) { - compare = sgn(date1.getDate() - date2.getDate()) - } - } - return compare - } - - function getFirstWeekStartDate(janFourth) { - switch (janFourth.getDay()) { - case 0: - return new Date(janFourth.getFullYear() - 1, 11, 29); - case 1: - return janFourth; - case 2: - return new Date(janFourth.getFullYear(), 0, 3); - case 3: - return new Date(janFourth.getFullYear(), 0, 2); - case 4: - return new Date(janFourth.getFullYear(), 0, 1); - case 5: - return new Date(janFourth.getFullYear() - 1, 11, 31); - case 6: - return new Date(janFourth.getFullYear() - 1, 11, 30) - } - } - - function getWeekBasedYear(date) { - var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); - var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { - if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { - return thisDate.getFullYear() + 1 - } else { - return thisDate.getFullYear() - } - } else { - return thisDate.getFullYear() - 1 - } - } - var EXPANSION_RULES_2 = { - "%a": function(date) { - return WEEKDAYS[date.tm_wday].substring(0, 3) - }, - "%A": function(date) { - return WEEKDAYS[date.tm_wday] - }, - "%b": function(date) { - return MONTHS[date.tm_mon].substring(0, 3) - }, - "%B": function(date) { - return MONTHS[date.tm_mon] - }, - "%C": function(date) { - var year = date.tm_year + 1900; - return leadingNulls(year / 100 | 0, 2) - }, - "%d": function(date) { - return leadingNulls(date.tm_mday, 2) - }, - "%e": function(date) { - return leadingSomething(date.tm_mday, 2, " ") - }, - "%g": function(date) { - return getWeekBasedYear(date).toString().substring(2) - }, - "%G": function(date) { - return getWeekBasedYear(date) - }, - "%H": function(date) { - return leadingNulls(date.tm_hour, 2) - }, - "%I": function(date) { - var twelveHour = date.tm_hour; - if (twelveHour == 0) twelveHour = 12; - else if (twelveHour > 12) twelveHour -= 12; - return leadingNulls(twelveHour, 2) - }, - "%j": function(date) { - return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3) - }, - "%m": function(date) { - return leadingNulls(date.tm_mon + 1, 2) - }, - "%M": function(date) { - return leadingNulls(date.tm_min, 2) - }, - "%n": function() { - return "\n" - }, - "%p": function(date) { - if (date.tm_hour >= 0 && date.tm_hour < 12) { - return "AM" - } else { - return "PM" - } - }, - "%S": function(date) { - return leadingNulls(date.tm_sec, 2) - }, - "%t": function() { - return "\t" - }, - "%u": function(date) { - return date.tm_wday || 7 - }, - "%U": function(date) { - var janFirst = new Date(date.tm_year + 1900, 0, 1); - var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay()); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstSunday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstSundayUntilEndJanuary = 31 - firstSunday.getDate(); - var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2) - } - return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00" - }, - "%V": function(date) { - var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4); - var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - if (compareByDay(endDate, firstWeekStartThisYear) < 0) { - return "53" - } - if (compareByDay(firstWeekStartNextYear, endDate) <= 0) { - return "01" - } - var daysDifference; - if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) { - daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate() - } else { - daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate() - } - return leadingNulls(Math.ceil(daysDifference / 7), 2) - }, - "%w": function(date) { - return date.tm_wday - }, - "%W": function(date) { - var janFirst = new Date(date.tm_year, 0, 1); - var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstMonday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstMondayUntilEndJanuary = 31 - firstMonday.getDate(); - var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2) - } - return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00" - }, - "%y": function(date) { - return (date.tm_year + 1900).toString().substring(2) - }, - "%Y": function(date) { - return date.tm_year + 1900 - }, - "%z": function(date) { - var off = date.tm_gmtoff; - var ahead = off >= 0; - off = Math.abs(off) / 60; - off = off / 60 * 100 + off % 60; - return (ahead ? "+" : "-") + String("0000" + off).slice(-4) - }, - "%Z": function(date) { - return date.tm_zone - }, - "%%": function() { - return "%" - } - }; - for (var rule in EXPANSION_RULES_2) { - if (pattern.indexOf(rule) >= 0) { - pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date)) - } - } - var bytes = intArrayFromString(pattern, false); - if (bytes.length > maxsize) { - return 0 - } - writeArrayToMemory(bytes, s); - return bytes.length - 1 -} - -function _strftime_l(s, maxsize, format, tm) { - return _strftime(s, maxsize, format, tm) -} -var FSNode = function(parent, name, mode, rdev) { - if (!parent) { - parent = this - } - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev -}; -var readMode = 292 | 73; -var writeMode = 146; -Object.defineProperties(FSNode.prototype, { - read: { - get: function() { - return (this.mode & readMode) === readMode - }, - set: function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode - } - }, - write: { - get: function() { - return (this.mode & writeMode) === writeMode - }, - set: function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode - } - }, - isFolder: { - get: function() { - return FS.isDir(this.mode) - } - }, - isDevice: { - get: function() { - return FS.isChrdev(this.mode) - } - } -}); -FS.FSNode = FSNode; -FS.staticInit(); - -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array -} -__ATINIT__.push({ - func: function() { - ___wasm_call_ctors() - } -}); -var asmLibraryArg = { - "m": ___cxa_allocate_exception, - "l": ___cxa_throw, - "c": _abort, - "k": _emscripten_memcpy_big, - "d": _emscripten_resize_heap, - "f": _environ_get, - "g": _environ_sizes_get, - "i": _fd_close, - "h": _fd_read, - "j": _fd_seek, - "b": _fd_write, - "a": wasmMemory, - "e": _strftime_l -}; -var asm = createWasm(); -var ___wasm_call_ctors = Module.___wasm_call_ctors = function() { - return (___wasm_call_ctors = Module.___wasm_call_ctors = Module.asm.o).apply(null, arguments) -}; -var _Encoder_new = Module._Encoder_new = function() { - return (_Encoder_new = Module._Encoder_new = Module.asm.p).apply(null, arguments) -}; -var _Encoder_delete = Module._Encoder_delete = function() { - return (_Encoder_delete = Module._Encoder_delete = Module.asm.q).apply(null, arguments) -}; -var _Encoder_input = Module._Encoder_input = function() { - return (_Encoder_input = Module._Encoder_input = Module.asm.r).apply(null, arguments) -}; -var _Encoder_output = Module._Encoder_output = function() { - return (_Encoder_output = Module._Encoder_output = Module.asm.s).apply(null, arguments) -}; -var _Decoder_new = Module._Decoder_new = function() { - return (_Decoder_new = Module._Decoder_new = Module.asm.t).apply(null, arguments) -}; -var _Decoder_delete = Module._Decoder_delete = function() { - return (_Decoder_delete = Module._Decoder_delete = Module.asm.u).apply(null, arguments) -}; -var _Decoder_input = Module._Decoder_input = function() { - return (_Decoder_input = Module._Decoder_input = Module.asm.v).apply(null, arguments) -}; -var _Decoder_output = Module._Decoder_output = function() { - return (_Decoder_output = Module._Decoder_output = Module.asm.w).apply(null, arguments) -}; -var _String_size = Module._String_size = function() { - return (_String_size = Module._String_size = Module.asm.x).apply(null, arguments) -}; -var _String_new = Module._String_new = function() { - return (_String_new = Module._String_new = Module.asm.y).apply(null, arguments) -}; -var _String_data = Module._String_data = function() { - return (_String_data = Module._String_data = Module.asm.z).apply(null, arguments) -}; -var _String_delete = Module._String_delete = function() { - return (_String_delete = Module._String_delete = Module.asm.A).apply(null, arguments) -}; -var _Int16Array_size = Module._Int16Array_size = function() { - return (_Int16Array_size = Module._Int16Array_size = Module.asm.B).apply(null, arguments) -}; -var _Int16Array_new = Module._Int16Array_new = function() { - return (_Int16Array_new = Module._Int16Array_new = Module.asm.C).apply(null, arguments) -}; -var _Int16Array_data = Module._Int16Array_data = function() { - return (_Int16Array_data = Module._Int16Array_data = Module.asm.D).apply(null, arguments) -}; -var _Int16Array_delete = Module._Int16Array_delete = function() { - return (_Int16Array_delete = Module._Int16Array_delete = Module.asm.E).apply(null, arguments) -}; -var _malloc = Module._malloc = function() { - return (_malloc = Module._malloc = Module.asm.F).apply(null, arguments) -}; -var _free = Module._free = function() { - return (_free = Module._free = Module.asm.G).apply(null, arguments) -}; -var ___errno_location = Module.___errno_location = function() { - return (___errno_location = Module.___errno_location = Module.asm.H).apply(null, arguments) -}; -var calledRun; - -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status -} -dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller -}; - -function run(args) { - args = args || arguments_; - if (runDependencies > 0) { - return - } - preRun(); - if (runDependencies > 0) return; - - function doRun() { - if (calledRun) return; - calledRun = true; - Module.calledRun = true; - if (ABORT) return; - initRuntime(); - preMain(); - if (Module.onRuntimeInitialized) Module.onRuntimeInitialized(); - postRun() - } - if (Module.setStatus) { - Module.setStatus("Running..."); - setTimeout(function() { - setTimeout(function() { - Module.setStatus("") - }, 1); - doRun() - }, 1) - } else { - doRun() - } -} -Module.run = run; -if (Module.preInit) { - if (typeof Module.preInit === "function") Module.preInit = [Module.preInit]; - while (Module.preInit.length > 0) { - Module.preInit.pop()() - } -} -noExitRuntime = true; -run(); - -function Encoder(channels, samplerate, bitrate, frame_size, voice_optimization) { - this.enc = Module._Encoder_new.apply(null, arguments); - this.out = Module._String_new() -} -Encoder.prototype.destroy = function() { - Module._Encoder_delete(this.enc); - Module._String_delete(this.out) -}; -Encoder.prototype.input = function(samples) { - var ptr = Module._malloc(samples.length * samples.BYTES_PER_ELEMENT); - var pdata = new Uint8Array(Module.HEAPU8.buffer, ptr, samples.length * samples.BYTES_PER_ELEMENT); - pdata.set(new Uint8Array(samples.buffer, samples.byteOffset, samples.length * samples.BYTES_PER_ELEMENT)); - Module._Encoder_input(this.enc, ptr, samples.length); - Module._free(ptr) -}; -Encoder.prototype.output = function() { - var ok = Module._Encoder_output(this.enc, this.out); - if (ok) { - return new Uint8Array(Module.HEAPU8.buffer, Module._String_data(this.out), Module._String_size(this.out)) - } else { - throw new Error('not ok'); - } -}; - -function Decoder(channels, samplerate) { - this.dec = Module._Decoder_new.apply(null, arguments); - this.out = Module._Int16Array_new() -} -Decoder.prototype.destroy = function() { - Module._Decoder_delete(this.dec); - Module._Int16Array_delete(this.out) -}; -Decoder.prototype.input = function(packet) { - var ptr = Module._malloc(packet.length * packet.BYTES_PER_ELEMENT); - var pdata = new Uint8Array(Module.HEAPU8.buffer, ptr, packet.length * packet.BYTES_PER_ELEMENT); - pdata.set(new Uint8Array(packet.buffer, packet.byteOffset, packet.length * packet.BYTES_PER_ELEMENT)); - Module._Decoder_input(this.dec, ptr, packet.length); - Module._free(ptr) -}; -Decoder.prototype.output = function() { - var ok = Module._Decoder_output(this.dec, this.out); - if (ok) { - return new Int16Array(Module.HEAPU8.buffer, Module._Int16Array_data(this.out), Module._Int16Array_size(this.out)) - // } else { - // throw new Error('not ok'); - } -}; -Module.Encoder = Encoder; -Module.Decoder = Decoder; -if (Module.ENVIRONMENT != "NODE") libopus = Module; -let accept; -const p = new Promise((a, r) => { - accept = a; -}); -libopus.waitForReady = () => p; -libopus.onRuntimeInitialized = () => { - accept(); -}; -export default libopus; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.js deleted file mode 100644 index 3b9deceea..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/libopus.wasm.js +++ /dev/null @@ -1,3731 +0,0 @@ -import wasm from './libopus.wasm'; - -const location = new URL('http://localhost'); - -let libopus; -var Module = typeof Module !== "undefined" ? Module : {}; -Module.onRuntimeInitialized = function() { - if (Module.onload) Module.onload(); - Module.loaded = true -}; -Module.locateFile = function(url) { - if (url == "libopusjs/libopus.wasm" && typeof LIBOPUS_WASM_URL !== "undefined") return LIBOPUS_WASM_URL; - else return url -}; -var moduleOverrides = {}; -var key; -for (key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key] - } -} -var arguments_ = []; -var thisProgram = "./this.program"; -var quit_ = function(status, toThrow) { - throw toThrow -}; -var ENVIRONMENT_IS_WEB = true; -var ENVIRONMENT_IS_WORKER = false; -var ENVIRONMENT_IS_NODE = false; -var ENVIRONMENT_IS_SHELL = false; -// ENVIRONMENT_IS_WEB = typeof window === "object"; -// ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; -// ENVIRONMENT_IS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; -// ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; -var scriptDirectory = ""; - -function locateFile(path) { - if (Module.locateFile) { - return Module.locateFile(path, scriptDirectory) - } - return scriptDirectory + path -} -var read_, readAsync, readBinary, setWindowTitle; -var nodeFS; -var nodePath; -if (ENVIRONMENT_IS_NODE) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = require("path").dirname(scriptDirectory) + "/" - } else { - scriptDirectory = __dirname + "/" - } - read_ = function shell_read(filename, binary) { - throw new Error("no fs"); - // if (!nodeFS) nodeFS = require("fs"); - if (!nodePath) nodePath = require("path"); - filename = nodePath.normalize(filename); - return nodeFS.readFileSync(filename, binary ? null : "utf8") - }; - readBinary = function readBinary(filename) { - var ret = read_(filename, true); - if (!ret.buffer) { - ret = new Uint8Array(ret) - } - assert(ret.buffer); - return ret - }; - if (process.argv.length > 1) { - thisProgram = process.argv[1].replace(/\\/g, "/") - } - arguments_ = process.argv.slice(2); - // if (typeof module !== "undefined") { - // module.exports = Module - // } - process.on("uncaughtException", function(ex) { - if (!(ex instanceof ExitStatus)) { - throw ex - } - }); - process.on("unhandledRejection", abort); - quit_ = function(status) { - process.exit(status) - }; - Module.inspect = function() { - return "[Emscripten Module object]" - } -} else if (ENVIRONMENT_IS_SHELL) { - if (typeof read !== "undefined") { - read_ = function shell_read(f) { - return read(f) - } - } - readBinary = function readBinary(f) { - var data; - if (typeof readbuffer === "function") { - return new Uint8Array(readbuffer(f)) - } - data = read(f, "binary"); - assert(typeof data === "object"); - return data - }; - if (typeof scriptArgs !== "undefined") { - arguments_ = scriptArgs - } else if (typeof arguments !== "undefined") { - arguments_ = arguments - } - if (typeof quit === "function") { - quit_ = function(status) { - quit(status) - } - } - if (typeof print !== "undefined") { - if (typeof console === "undefined") console = {}; - console.log = print; - console.warn = console.error = typeof printErr !== "undefined" ? printErr : print - } -} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = location.href - } else if (globalThis.document?.currentScript) { - scriptDirectory = globalThis.document?.currentScript.src - } - if (scriptDirectory.indexOf("blob:") !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1) - } else { - scriptDirectory = "" - } { - read_ = function shell_read(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = function readBinary(url) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response) - } - } - readAsync = function readAsync(url, onload, onerror) { - var xhr = new XMLHttpRequest; - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return - } - onerror() - }; - xhr.onerror = onerror; - xhr.send(null) - } - } - setWindowTitle = function(title) { - globalThis.document && (globalThis.document.title = title); - } -} else {} -var out = Module.print || console.log.bind(console); -var err = Module.printErr || console.warn.bind(console); -for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key] - } -} -moduleOverrides = null; -if (Module.arguments) arguments_ = Module.arguments; -if (Module.thisProgram) thisProgram = Module.thisProgram; -if (Module.quit) quit_ = Module.quit; -var STACK_ALIGN = 16; - -function alignMemory(size, factor) { - if (!factor) factor = STACK_ALIGN; - return Math.ceil(size / factor) * factor -} -var wasmBinary; -if (Module.wasmBinary) wasmBinary = Module.wasmBinary; -var noExitRuntime; -if (Module.noExitRuntime) noExitRuntime = Module.noExitRuntime; -if (typeof WebAssembly !== "object") { - abort("no native wasm support detected") -} -var wasmMemory; -var wasmTable; -var ABORT = false; -var EXITSTATUS = 0; - -function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text) - } -} -var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; - -function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)) - } else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2 - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63 - } - if (u0 < 65536) { - str += String.fromCharCode(u0) - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) - } - } - } - return str -} - -function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" -} - -function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023 - } - if (u <= 127) { - if (outIdx >= endIdx) break; - heap[outIdx++] = u - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63 - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } else { - if (outIdx + 3 >= endIdx) break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63 - } - } - heap[outIdx] = 0; - return outIdx - startIdx -} - -function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) -} - -function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) ++len; - else if (u <= 2047) len += 2; - else if (u <= 65535) len += 3; - else len += 4 - } - return len -} - -function writeArrayToMemory(array, buffer) { - HEAP8.set(array, buffer) -} - -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; ++i) { - HEAP8[buffer++ >> 0] = str.charCodeAt(i) - } - if (!dontAddNull) HEAP8[buffer >> 0] = 0 -} -var WASM_PAGE_SIZE = 65536; -var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - -function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module.HEAP8 = HEAP8 = new Int8Array(buf); - Module.HEAP16 = HEAP16 = new Int16Array(buf); - Module.HEAP32 = HEAP32 = new Int32Array(buf); - Module.HEAPU8 = HEAPU8 = new Uint8Array(buf); - Module.HEAPU16 = HEAPU16 = new Uint16Array(buf); - Module.HEAPU32 = HEAPU32 = new Uint32Array(buf); - Module.HEAPF32 = HEAPF32 = new Float32Array(buf); - Module.HEAPF64 = HEAPF64 = new Float64Array(buf) -} -var INITIAL_INITIAL_MEMORY = Module.INITIAL_MEMORY || 16777216; -if (Module.wasmMemory) { - wasmMemory = Module.wasmMemory -} else { - wasmMemory = new WebAssembly.Memory({ - "initial": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE, - "maximum": INITIAL_INITIAL_MEMORY / WASM_PAGE_SIZE - }) -} -if (wasmMemory) { - buffer = wasmMemory.buffer -} -INITIAL_INITIAL_MEMORY = buffer.byteLength; -updateGlobalBufferAndViews(buffer); -var __ATPRERUN__ = []; -var __ATINIT__ = []; -var __ATMAIN__ = []; -var __ATPOSTRUN__ = []; -var runtimeInitialized = false; - -function preRun() { - if (Module.preRun) { - if (typeof Module.preRun === "function") Module.preRun = [Module.preRun]; - while (Module.preRun.length) { - addOnPreRun(Module.preRun.shift()) - } - } - callRuntimeCallbacks(__ATPRERUN__) -} - -function initRuntime() { - runtimeInitialized = true; - if (!Module.noFSInit && !FS.init.initialized) FS.init(); - TTY.init(); - callRuntimeCallbacks(__ATINIT__) -} - -function preMain() { - FS.ignorePermissions = false; - callRuntimeCallbacks(__ATMAIN__) -} - -function postRun() { - if (Module.postRun) { - if (typeof Module.postRun === "function") Module.postRun = [Module.postRun]; - while (Module.postRun.length) { - addOnPostRun(Module.postRun.shift()) - } - } - callRuntimeCallbacks(__ATPOSTRUN__) -} - -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb) -} - -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb) -} -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; - -function getUniqueRunDependency(id) { - return id -} - -function addRunDependency(id) { - runDependencies++; - if (Module.monitorRunDependencies) { - Module.monitorRunDependencies(runDependencies) - } -} - -function removeRunDependency(id) { - runDependencies--; - if (Module.monitorRunDependencies) { - Module.monitorRunDependencies(runDependencies) - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback() - } - } -} -Module.preloadedImages = {}; -Module.preloadedAudios = {}; - -function abort(what) { - if (Module.onAbort) { - Module.onAbort(what) - } - what += ""; - err(what); - ABORT = true; - EXITSTATUS = 1; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - throw e -} - -function hasPrefix(str, prefix) { - return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0 -} -var dataURIPrefix = "data:application/octet-stream;base64,"; - -function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix) -} -var fileURIPrefix = "file://"; - -function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix) -} -var wasmBinaryFile = "libopusjs/libopus.wasm"; -if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile) -} - -function getBinary() { - try { - if (wasmBinary) { - return new Uint8Array(wasmBinary) - } - if (readBinary) { - return readBinary(wasmBinaryFile) - } else { - throw "both async and sync fetching of the wasm failed" - } - } catch (err) { - abort(err) - } -} - -async function getBinaryPromise() { - return wasm; - /* if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { - console.log('binary promise', { - wasmBinaryFile, - }); - const s = new URL(wasmBinaryFile, 'http://localhost'); - return fetch(s, { - // credentials: "same-origin" - }).then(function(response) { - if (!response.ok) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" - } - return response.arrayBuffer() - }).catch(function() { - return getBinary() - }) - } - return Promise.resolve().then(getBinary) */ -} - -function createWasm() { - var info = { - "a": asmLibraryArg - }; - - function receiveInstance(instance, module) { - var exports = instance.exports; - Module.asm = exports; - wasmTable = Module.asm.n; - removeRunDependency("wasm-instantiate") - } - addRunDependency("wasm-instantiate"); - - function receiveInstantiatedSource(output) { - receiveInstance(output.instance) - } - - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - return WebAssembly.instantiate(binary, info) - }).then(receiver, function(reason) { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason) - }) - } - - async function instantiateAsync() { - const instance = await WebAssembly.instantiate(wasm, info); - receiveInstance(instance); - } - if (Module.instantiateWasm) { - try { - var exports = Module.instantiateWasm(info, receiveInstance); - return exports - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false - } - } - instantiateAsync(); - return {} -} -var tempDouble; -var tempI64; - -function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback === "function") { - callback(Module); - continue - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === undefined) { - wasmTable.get(func)() - } else { - wasmTable.get(func)(callback.arg) - } - } else { - func(callback.arg === undefined ? null : callback.arg) - } - } -} - -function demangle(func) { - return func -} - -function demangleAll(text) { - var regex = /\b_Z[\w\d_]+/g; - return text.replace(regex, function(x) { - var y = demangle(x); - return x === y ? x : y + " [" + x + "]" - }) -} - -function jsStackTrace() { - var error = new Error; - if (!error.stack) { - try { - throw new Error - } catch (e) { - error = e - } - if (!error.stack) { - return "(no stack trace available)" - } - } - return error.stack.toString() -} - -function stackTrace() { - var js = jsStackTrace(); - if (Module.extraStackTrace) js += "\n" + Module.extraStackTrace(); - return demangleAll(js) -} -var ExceptionInfoAttrs = { - DESTRUCTOR_OFFSET: 0, - REFCOUNT_OFFSET: 4, - TYPE_OFFSET: 8, - CAUGHT_OFFSET: 12, - RETHROWN_OFFSET: 13, - SIZE: 16 -}; - -function ___cxa_allocate_exception(size) { - return _malloc(size + ExceptionInfoAttrs.SIZE) + ExceptionInfoAttrs.SIZE -} - -function ExceptionInfo(excPtr) { - this.excPtr = excPtr; - this.ptr = excPtr - ExceptionInfoAttrs.SIZE; - this.set_type = function(type) { - HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] = type - }; - this.get_type = function() { - return HEAP32[this.ptr + ExceptionInfoAttrs.TYPE_OFFSET >> 2] - }; - this.set_destructor = function(destructor) { - HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] = destructor - }; - this.get_destructor = function() { - return HEAP32[this.ptr + ExceptionInfoAttrs.DESTRUCTOR_OFFSET >> 2] - }; - this.set_refcount = function(refcount) { - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = refcount - }; - this.set_caught = function(caught) { - caught = caught ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] = caught - }; - this.get_caught = function() { - return HEAP8[this.ptr + ExceptionInfoAttrs.CAUGHT_OFFSET >> 0] != 0 - }; - this.set_rethrown = function(rethrown) { - rethrown = rethrown ? 1 : 0; - HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] = rethrown - }; - this.get_rethrown = function() { - return HEAP8[this.ptr + ExceptionInfoAttrs.RETHROWN_OFFSET >> 0] != 0 - }; - this.init = function(type, destructor) { - this.set_type(type); - this.set_destructor(destructor); - this.set_refcount(0); - this.set_caught(false); - this.set_rethrown(false) - }; - this.add_ref = function() { - var value = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = value + 1 - }; - this.release_ref = function() { - var prev = HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2]; - HEAP32[this.ptr + ExceptionInfoAttrs.REFCOUNT_OFFSET >> 2] = prev - 1; - return prev === 1 - } -} -var exceptionLast = 0; - -function __ZSt18uncaught_exceptionv() { - return __ZSt18uncaught_exceptionv.uncaught_exceptions > 0 -} - -function ___cxa_throw(ptr, type, destructor) { - var info = new ExceptionInfo(ptr); - info.init(type, destructor); - exceptionLast = ptr; - if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { - __ZSt18uncaught_exceptionv.uncaught_exceptions = 1 - } else { - __ZSt18uncaught_exceptionv.uncaught_exceptions++ - } - throw ptr -} - -function _abort() { - abort() -} - -function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num) -} - -function abortOnCannotGrowMemory(requestedSize) { - abort("OOM") -} - -function _emscripten_resize_heap(requestedSize) { - requestedSize = requestedSize >>> 0; - abortOnCannotGrowMemory(requestedSize) -} -var ENV = {}; - -function getExecutableName() { - return thisProgram || "./this.program" -} - -function getEnvStrings() { - if (!getEnvStrings.strings) { - var lang = (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8"; - var env = { - "USER": "web_user", - "LOGNAME": "web_user", - "PATH": "/", - "PWD": "/", - "HOME": "/home/web_user", - "LANG": lang, - "_": getExecutableName() - }; - for (var x in ENV) { - env[x] = ENV[x] - } - var strings = []; - for (var x in env) { - strings.push(x + "=" + env[x]) - } - getEnvStrings.strings = strings - } - return getEnvStrings.strings -} - -function _environ_get(__environ, environ_buf) { - var bufSize = 0; - getEnvStrings().forEach(function(string, i) { - var ptr = environ_buf + bufSize; - HEAP32[__environ + i * 4 >> 2] = ptr; - writeAsciiToMemory(string, ptr); - bufSize += string.length + 1 - }); - return 0 -} - -function _environ_sizes_get(penviron_count, penviron_buf_size) { - var strings = getEnvStrings(); - HEAP32[penviron_count >> 2] = strings.length; - var bufSize = 0; - strings.forEach(function(string) { - bufSize += string.length + 1 - }); - HEAP32[penviron_buf_size >> 2] = bufSize; - return 0 -} -var PATH = { - splitPath: function(filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1) - }, - normalizeArray: function(parts, allowAboveRoot) { - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === ".") { - parts.splice(i, 1) - } else if (last === "..") { - parts.splice(i, 1); - up++ - } else if (up) { - parts.splice(i, 1); - up-- - } - } - if (allowAboveRoot) { - for (; up; up--) { - parts.unshift("..") - } - } - return parts - }, - normalize: function(path) { - var isAbsolute = path.charAt(0) === "/"; - var trailingSlash = path.substr(-1) === "/"; - path = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), !isAbsolute).join("/"); - if (!path && !isAbsolute) { - path = "." - } - if (path && trailingSlash) { - path += "/" - } - return (isAbsolute ? "/" : "") + path - }, - dirname: function(path) { - var result = PATH.splitPath(path); - var root = result[0]; - var dir = result[1]; - if (!root && !dir) { - return "." - } - if (dir) { - dir = dir.substr(0, dir.length - 1) - } - return root + dir - }, - basename: function(path) { - if (path === "/") return "/"; - path = PATH.normalize(path); - path = path.replace(/\/$/, ""); - var lastSlash = path.lastIndexOf("/"); - if (lastSlash === -1) return path; - return path.substr(lastSlash + 1) - }, - extname: function(path) { - return PATH.splitPath(path)[3] - }, - join: function() { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join("/")) - }, - join2: function(l, r) { - return PATH.normalize(l + "/" + r) - } -}; - -function setErrNo(value) { - HEAP32[___errno_location() >> 2] = value; - return value -} - -function getRandomDevice() { - if (typeof crypto === "object" && typeof crypto.getRandomValues === "function") { - var randomBuffer = new Uint8Array(1); - return function() { - crypto.getRandomValues(randomBuffer); - return randomBuffer[0] - } - } else if (ENVIRONMENT_IS_NODE) { - try { - var crypto_module = require("crypto"); - return function() { - return crypto_module.randomBytes(1)[0] - } - } catch (e) {} - } - return function() { - abort("randomDevice") - } -} -var PATH_FS = { - resolve: function() { - var resolvedPath = ""; - var resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = i >= 0 ? arguments[i] : FS.cwd(); - if (typeof path !== "string") { - throw new TypeError("Arguments to path.resolve must be strings") - } else if (!path) { - return "" - } - resolvedPath = path + "/" + resolvedPath; - resolvedAbsolute = path.charAt(0) === "/" - } - resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function(p) { - return !!p - }), !resolvedAbsolute).join("/"); - return (resolvedAbsolute ? "/" : "") + resolvedPath || "." - }, - relative: function(from, to) { - from = PATH_FS.resolve(from).substr(1); - to = PATH_FS.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== "") break - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== "") break - } - if (start > end) return []; - return arr.slice(start, end - start + 1) - } - var fromParts = trim(from.split("/")); - var toParts = trim(to.split("/")); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push("..") - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join("/") - } -}; -var TTY = { - ttys: [], - init: function() {}, - shutdown: function() {}, - register: function(dev, ops) { - TTY.ttys[dev] = { - input: [], - output: [], - ops: ops - }; - FS.registerDevice(dev, TTY.stream_ops) - }, - stream_ops: { - open: function(stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(43) - } - stream.tty = tty; - stream.seekable = false - }, - close: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - flush: function(stream) { - stream.tty.ops.flush(stream.tty) - }, - read: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(60) - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty) - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(60) - } - try { - for (var i = 0; i < length; i++) { - stream.tty.ops.put_char(stream.tty, buffer[offset + i]) - } - } catch (e) { - throw new FS.ErrnoError(29) - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }, - default_tty_ops: { - get_char: function(tty) { - if (!tty.input.length) { - var result = null; - if (ENVIRONMENT_IS_NODE) { - var BUFSIZE = 256; - var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); - var bytesRead = 0; - try { - bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null) - } catch (e) { - if (e.toString().indexOf("EOF") != -1) bytesRead = 0; - else throw e - } - if (bytesRead > 0) { - result = buf.slice(0, bytesRead).toString("utf-8") - } else { - result = null - } - } else if (typeof window !== "undefined" && typeof window.prompt === "function") { - result = window.prompt("Input: "); - if (result !== null) { - result += "\n" - } - } else if (typeof readline === "function") { - result = readline(); - if (result !== null) { - result += "\n" - } - } - if (!result) { - return null - } - tty.input = intArrayFromString(result, true) - } - return tty.input.shift() - }, - put_char: function(tty, val) { - if (val === null || val === 10) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - out(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - }, - default_tty1_ops: { - put_char: function(tty, val) { - if (val === null || val === 10) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } else { - if (val != 0) tty.output.push(val) - } - }, - flush: function(tty) { - if (tty.output && tty.output.length > 0) { - err(UTF8ArrayToString(tty.output, 0)); - tty.output = [] - } - } - } -}; - -function mmapAlloc(size) { - var alignedSize = alignMemory(size, 16384); - var ptr = _malloc(alignedSize); - while (size < alignedSize) HEAP8[ptr + size++] = 0; - return ptr -} -var MEMFS = { - ops_table: null, - mount: function(mount) { - return MEMFS.createNode(null, "/", 16384 | 511, 0) - }, - createNode: function(parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - throw new FS.ErrnoError(63) - } - if (!MEMFS.ops_table) { - MEMFS.ops_table = { - dir: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - lookup: MEMFS.node_ops.lookup, - mknod: MEMFS.node_ops.mknod, - rename: MEMFS.node_ops.rename, - unlink: MEMFS.node_ops.unlink, - rmdir: MEMFS.node_ops.rmdir, - readdir: MEMFS.node_ops.readdir, - symlink: MEMFS.node_ops.symlink - }, - stream: { - llseek: MEMFS.stream_ops.llseek - } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap, - msync: MEMFS.stream_ops.msync - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - } - } - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {} - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.usedBytes = 0; - node.contents = null - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream - } - node.timestamp = Date.now(); - if (parent) { - parent.contents[name] = node - } - return node - }, - getFileDataAsRegularArray: function(node) { - if (node.contents && node.contents.subarray) { - var arr = []; - for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]); - return arr - } - return node.contents - }, - getFileDataAsTypedArray: function(node) { - if (!node.contents) return new Uint8Array(0); - if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); - return new Uint8Array(node.contents) - }, - expandFileStorage: function(node, newCapacity) { - var prevCapacity = node.contents ? node.contents.length : 0; - if (prevCapacity >= newCapacity) return; - var CAPACITY_DOUBLING_MAX = 1024 * 1024; - newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0); - if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); - var oldContents = node.contents; - node.contents = new Uint8Array(newCapacity); - if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); - }, - resizeFileStorage: function(node, newSize) { - if (node.usedBytes == newSize) return; - if (newSize == 0) { - node.contents = null; - node.usedBytes = 0; - return - } - if (!node.contents || node.contents.subarray) { - var oldContents = node.contents; - node.contents = new Uint8Array(newSize); - if (oldContents) { - node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) - } - node.usedBytes = newSize; - return - } - if (!node.contents) node.contents = []; - if (node.contents.length > newSize) node.contents.length = newSize; - else - while (node.contents.length < newSize) node.contents.push(0); - node.usedBytes = newSize - }, - node_ops: { - getattr: function(node) { - var attr = {}; - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096 - } else if (FS.isFile(node.mode)) { - attr.size = node.usedBytes - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length - } else { - attr.size = 0 - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr - }, - setattr: function(node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp - } - if (attr.size !== undefined) { - MEMFS.resizeFileStorage(node, attr.size) - } - }, - lookup: function(parent, name) { - throw FS.genericErrors[44] - }, - mknod: function(parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev) - }, - rename: function(old_node, new_dir, new_name) { - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(55) - } - } - } - delete old_node.parent.contents[old_node.name]; - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - old_node.parent = new_dir - }, - unlink: function(parent, name) { - delete parent.contents[name] - }, - rmdir: function(parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(55) - } - delete parent.contents[name] - }, - readdir: function(node) { - var entries = [".", ".."]; - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue - } - entries.push(key) - } - return entries - }, - symlink: function(parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); - node.link = oldpath; - return node - }, - readlink: function(node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(28) - } - return node.link - } - }, - stream_ops: { - read: function(stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= stream.node.usedBytes) return 0; - var size = Math.min(stream.node.usedBytes - position, length); - if (size > 8 && contents.subarray) { - buffer.set(contents.subarray(position, position + size), offset) - } else { - for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] - } - return size - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (!length) return 0; - var node = stream.node; - node.timestamp = Date.now(); - if (buffer.subarray && (!node.contents || node.contents.subarray)) { - if (canOwn) { - node.contents = buffer.subarray(offset, offset + length); - node.usedBytes = length; - return length - } else if (node.usedBytes === 0 && position === 0) { - node.contents = buffer.slice(offset, offset + length); - node.usedBytes = length; - return length - } else if (position + length <= node.usedBytes) { - node.contents.set(buffer.subarray(offset, offset + length), position); - return length - } - } - MEMFS.expandFileStorage(node, position + length); - if (node.contents.subarray && buffer.subarray) { - node.contents.set(buffer.subarray(offset, offset + length), position) - } else { - for (var i = 0; i < length; i++) { - node.contents[position + i] = buffer[offset + i] - } - } - node.usedBytes = Math.max(node.usedBytes, position + length); - return length - }, - llseek: function(stream, offset, whence) { - var position = offset; - if (whence === 1) { - position += stream.position - } else if (whence === 2) { - if (FS.isFile(stream.node.mode)) { - position += stream.node.usedBytes - } - } - if (position < 0) { - throw new FS.ErrnoError(28) - } - return position - }, - allocate: function(stream, offset, length) { - MEMFS.expandFileStorage(stream.node, offset + length); - stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) - }, - mmap: function(stream, address, length, position, prot, flags) { - assert(address === 0); - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - var ptr; - var allocated; - var contents = stream.node.contents; - if (!(flags & 2) && contents.buffer === buffer) { - allocated = false; - ptr = contents.byteOffset - } else { - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length) - } else { - contents = Array.prototype.slice.call(contents, position, position + length) - } - } - allocated = true; - ptr = mmapAlloc(length); - if (!ptr) { - throw new FS.ErrnoError(48) - } - HEAP8.set(contents, ptr) - } - return { - ptr: ptr, - allocated: allocated - } - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (mmapFlags & 2) { - return 0 - } - var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); - return 0 - } - } -}; -var FS = { - root: null, - mounts: [], - devices: {}, - streams: [], - nextInode: 1, - nameTable: null, - currentPath: "/", - initialized: false, - ignorePermissions: true, - trackingDelegate: {}, - tracking: { - openFlags: { - READ: 1, - WRITE: 2 - } - }, - ErrnoError: null, - genericErrors: {}, - filesystems: null, - syncFSRequests: 0, - handleFSError: function(e) { - if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace(); - return setErrNo(e.errno) - }, - lookupPath: function(path, opts) { - path = PATH_FS.resolve(FS.cwd(), path); - opts = opts || {}; - if (!path) return { - path: "", - node: null - }; - var defaults = { - follow_mount: true, - recurse_count: 0 - }; - for (var key in defaults) { - if (opts[key] === undefined) { - opts[key] = defaults[key] - } - } - if (opts.recurse_count > 8) { - throw new FS.ErrnoError(32) - } - var parts = PATH.normalizeArray(path.split("/").filter(function(p) { - return !!p - }), false); - var current = FS.root; - var current_path = "/"; - for (var i = 0; i < parts.length; i++) { - var islast = i === parts.length - 1; - if (islast && opts.parent) { - break - } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - if (FS.isMountpoint(current)) { - if (!islast || islast && opts.follow_mount) { - current = current.mounted.root - } - } - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH_FS.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { - recurse_count: opts.recurse_count - }); - current = lookup.node; - if (count++ > 40) { - throw new FS.ErrnoError(32) - } - } - } - } - return { - path: current_path, - node: current - } - }, - getPath: function(node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path - } - path = path ? node.name + "/" + path : node.name; - node = node.parent - } - }, - hashName: function(parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) { - hash = (hash << 5) - hash + name.charCodeAt(i) | 0 - } - return (parentid + hash >>> 0) % FS.nameTable.length - }, - hashAddNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node - }, - hashRemoveNode: function(node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break - } - current = current.name_next - } - } - }, - lookupNode: function(parent, name) { - var errCode = FS.mayLookup(parent); - if (errCode) { - throw new FS.ErrnoError(errCode, parent) - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node - } - } - return FS.lookup(parent, name) - }, - createNode: function(parent, name, mode, rdev) { - var node = new FS.FSNode(parent, name, mode, rdev); - FS.hashAddNode(node); - return node - }, - destroyNode: function(node) { - FS.hashRemoveNode(node) - }, - isRoot: function(node) { - return node === node.parent - }, - isMountpoint: function(node) { - return !!node.mounted - }, - isFile: function(mode) { - return (mode & 61440) === 32768 - }, - isDir: function(mode) { - return (mode & 61440) === 16384 - }, - isLink: function(mode) { - return (mode & 61440) === 40960 - }, - isChrdev: function(mode) { - return (mode & 61440) === 8192 - }, - isBlkdev: function(mode) { - return (mode & 61440) === 24576 - }, - isFIFO: function(mode) { - return (mode & 61440) === 4096 - }, - isSocket: function(mode) { - return (mode & 49152) === 49152 - }, - flagModes: { - "r": 0, - "rs": 1052672, - "r+": 2, - "w": 577, - "wx": 705, - "xw": 705, - "w+": 578, - "wx+": 706, - "xw+": 706, - "a": 1089, - "ax": 1217, - "xa": 1217, - "a+": 1090, - "ax+": 1218, - "xa+": 1218 - }, - modeStringToFlags: function(str) { - var flags = FS.flagModes[str]; - if (typeof flags === "undefined") { - throw new Error("Unknown file open mode: " + str) - } - return flags - }, - flagsToPermissionString: function(flag) { - var perms = ["r", "w", "rw"][flag & 3]; - if (flag & 512) { - perms += "w" - } - return perms - }, - nodePermissions: function(node, perms) { - if (FS.ignorePermissions) { - return 0 - } - if (perms.indexOf("r") !== -1 && !(node.mode & 292)) { - return 2 - } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) { - return 2 - } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) { - return 2 - } - return 0 - }, - mayLookup: function(dir) { - var errCode = FS.nodePermissions(dir, "x"); - if (errCode) return errCode; - if (!dir.node_ops.lookup) return 2; - return 0 - }, - mayCreate: function(dir, name) { - try { - var node = FS.lookupNode(dir, name); - return 20 - } catch (e) {} - return FS.nodePermissions(dir, "wx") - }, - mayDelete: function(dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name) - } catch (e) { - return e.errno - } - var errCode = FS.nodePermissions(dir, "wx"); - if (errCode) { - return errCode - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return 54 - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return 10 - } - } else { - if (FS.isDir(node.mode)) { - return 31 - } - } - return 0 - }, - mayOpen: function(node, flags) { - if (!node) { - return 44 - } - if (FS.isLink(node.mode)) { - return 32 - } else if (FS.isDir(node.mode)) { - if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { - return 31 - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) - }, - MAX_OPEN_FDS: 4096, - nextfd: function(fd_start, fd_end) { - fd_start = fd_start || 0; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd - } - } - throw new FS.ErrnoError(33) - }, - getStream: function(fd) { - return FS.streams[fd] - }, - createStream: function(stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function() {}; - FS.FSStream.prototype = { - object: { - get: function() { - return this.node - }, - set: function(val) { - this.node = val - } - }, - isRead: { - get: function() { - return (this.flags & 2097155) !== 1 - } - }, - isWrite: { - get: function() { - return (this.flags & 2097155) !== 0 - } - }, - isAppend: { - get: function() { - return this.flags & 1024 - } - } - } - } - var newStream = new FS.FSStream; - for (var p in stream) { - newStream[p] = stream[p] - } - stream = newStream; - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream - }, - closeStream: function(fd) { - FS.streams[fd] = null - }, - chrdev_stream_ops: { - open: function(stream) { - var device = FS.getDevice(stream.node.rdev); - stream.stream_ops = device.stream_ops; - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - }, - llseek: function() { - throw new FS.ErrnoError(70) - } - }, - major: function(dev) { - return dev >> 8 - }, - minor: function(dev) { - return dev & 255 - }, - makedev: function(ma, mi) { - return ma << 8 | mi - }, - registerDevice: function(dev, ops) { - FS.devices[dev] = { - stream_ops: ops - } - }, - getDevice: function(dev) { - return FS.devices[dev] - }, - getMounts: function(mount) { - var mounts = []; - var check = [mount]; - while (check.length) { - var m = check.pop(); - mounts.push(m); - check.push.apply(check, m.mounts) - } - return mounts - }, - syncfs: function(populate, callback) { - if (typeof populate === "function") { - callback = populate; - populate = false - } - FS.syncFSRequests++; - if (FS.syncFSRequests > 1) { - err("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work") - } - var mounts = FS.getMounts(FS.root.mount); - var completed = 0; - - function doCallback(errCode) { - FS.syncFSRequests--; - return callback(errCode) - } - - function done(errCode) { - if (errCode) { - if (!done.errored) { - done.errored = true; - return doCallback(errCode) - } - return - } - if (++completed >= mounts.length) { - doCallback(null) - } - } - mounts.forEach(function(mount) { - if (!mount.type.syncfs) { - return done(null) - } - mount.type.syncfs(mount, populate, done) - }) - }, - mount: function(type, opts, mountpoint) { - var root = mountpoint === "/"; - var pseudo = !mountpoint; - var node; - if (root && FS.root) { - throw new FS.ErrnoError(10) - } else if (!root && !pseudo) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - mountpoint = lookup.path; - node = lookup.node; - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - if (!FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - } - var mount = { - type: type, - opts: opts, - mountpoint: mountpoint, - mounts: [] - }; - var mountRoot = type.mount(mount); - mountRoot.mount = mount; - mount.root = mountRoot; - if (root) { - FS.root = mountRoot - } else if (node) { - node.mounted = mount; - if (node.mount) { - node.mount.mounts.push(mount) - } - } - return mountRoot - }, - unmount: function(mountpoint) { - var lookup = FS.lookupPath(mountpoint, { - follow_mount: false - }); - if (!FS.isMountpoint(lookup.node)) { - throw new FS.ErrnoError(28) - } - var node = lookup.node; - var mount = node.mounted; - var mounts = FS.getMounts(mount); - Object.keys(FS.nameTable).forEach(function(hash) { - var current = FS.nameTable[hash]; - while (current) { - var next = current.name_next; - if (mounts.indexOf(current.mount) !== -1) { - FS.destroyNode(current) - } - current = next - } - }); - node.mounted = null; - var idx = node.mount.mounts.indexOf(mount); - node.mount.mounts.splice(idx, 1) - }, - lookup: function(parent, name) { - return parent.node_ops.lookup(parent, name) - }, - mknod: function(path, mode, dev) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - if (!name || name === "." || name === "..") { - throw new FS.ErrnoError(28) - } - var errCode = FS.mayCreate(parent, name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.mknod(parent, name, mode, dev) - }, - create: function(path, mode) { - mode = mode !== undefined ? mode : 438; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0) - }, - mkdir: function(path, mode) { - mode = mode !== undefined ? mode : 511; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0) - }, - mkdirTree: function(path, mode) { - var dirs = path.split("/"); - var d = ""; - for (var i = 0; i < dirs.length; ++i) { - if (!dirs[i]) continue; - d += "/" + dirs[i]; - try { - FS.mkdir(d, mode) - } catch (e) { - if (e.errno != 20) throw e - } - } - }, - mkdev: function(path, mode, dev) { - if (typeof dev === "undefined") { - dev = mode; - mode = 438 - } - mode |= 8192; - return FS.mknod(path, mode, dev) - }, - symlink: function(oldpath, newpath) { - if (!PATH_FS.resolve(oldpath)) { - throw new FS.ErrnoError(44) - } - var lookup = FS.lookupPath(newpath, { - parent: true - }); - var parent = lookup.node; - if (!parent) { - throw new FS.ErrnoError(44) - } - var newname = PATH.basename(newpath); - var errCode = FS.mayCreate(parent, newname); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(63) - } - return parent.node_ops.symlink(parent, newname, oldpath) - }, - rename: function(old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - var lookup, old_dir, new_dir; - lookup = FS.lookupPath(old_path, { - parent: true - }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { - parent: true - }); - new_dir = lookup.node; - if (!old_dir || !new_dir) throw new FS.ErrnoError(44); - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(75) - } - var old_node = FS.lookupNode(old_dir, old_name); - var relative = PATH_FS.relative(old_path, new_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(28) - } - relative = PATH_FS.relative(new_path, old_dirname); - if (relative.charAt(0) !== ".") { - throw new FS.ErrnoError(55) - } - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name) - } catch (e) {} - if (old_node === new_node) { - return - } - var isdir = FS.isDir(old_node.mode); - var errCode = FS.mayDelete(old_dir, old_name, isdir); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { - throw new FS.ErrnoError(10) - } - if (new_dir !== old_dir) { - errCode = FS.nodePermissions(old_dir, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - try { - if (FS.trackingDelegate.willMovePath) { - FS.trackingDelegate.willMovePath(old_path, new_path) - } - } catch (e) { - err("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - FS.hashRemoveNode(old_node); - try { - old_dir.node_ops.rename(old_node, new_dir, new_name) - } catch (e) { - throw e - } finally { - FS.hashAddNode(old_node) - } - try { - if (FS.trackingDelegate.onMovePath) FS.trackingDelegate.onMovePath(old_path, new_path) - } catch (e) { - err("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) - } - }, - rmdir: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, true); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate.willDeletePath) { - FS.trackingDelegate.willDeletePath(path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate.onDeletePath) FS.trackingDelegate.onDeletePath(path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(54) - } - return node.node_ops.readdir(node) - }, - unlink: function(path) { - var lookup = FS.lookupPath(path, { - parent: true - }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var errCode = FS.mayDelete(parent, name, false); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(63) - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(10) - } - try { - if (FS.trackingDelegate.willDeletePath) { - FS.trackingDelegate.willDeletePath(path) - } - } catch (e) { - err("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - try { - if (FS.trackingDelegate.onDeletePath) FS.trackingDelegate.onDeletePath(path) - } catch (e) { - err("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) - } - }, - readlink: function(path) { - var lookup = FS.lookupPath(path); - var link = lookup.node; - if (!link) { - throw new FS.ErrnoError(44) - } - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(28) - } - return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) - }, - stat: function(path, dontFollow) { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - var node = lookup.node; - if (!node) { - throw new FS.ErrnoError(44) - } - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(63) - } - return node.node_ops.getattr(node) - }, - lstat: function(path) { - return FS.stat(path, true) - }, - chmod: function(path, mode, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - mode: mode & 4095 | node.mode & ~4095, - timestamp: Date.now() - }) - }, - lchmod: function(path, mode) { - FS.chmod(path, mode, true) - }, - fchmod: function(fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chmod(stream.node, mode) - }, - chown: function(path, uid, gid, dontFollow) { - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: !dontFollow - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - node.node_ops.setattr(node, { - timestamp: Date.now() - }) - }, - lchown: function(path, uid, gid) { - FS.chown(path, uid, gid, true) - }, - fchown: function(fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - FS.chown(stream.node, uid, gid) - }, - truncate: function(path, len) { - if (len < 0) { - throw new FS.ErrnoError(28) - } - var node; - if (typeof path === "string") { - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node - } else { - node = path - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(63) - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(31) - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(28) - } - var errCode = FS.nodePermissions(node, "w"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - node.node_ops.setattr(node, { - size: len, - timestamp: Date.now() - }) - }, - ftruncate: function(fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(28) - } - FS.truncate(stream.node, len) - }, - utime: function(path, atime, mtime) { - var lookup = FS.lookupPath(path, { - follow: true - }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) - }) - }, - open: function(path, flags, mode, fd_start, fd_end) { - if (path === "") { - throw new FS.ErrnoError(44) - } - flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === "undefined" ? 438 : mode; - if (flags & 64) { - mode = mode & 4095 | 32768 - } else { - mode = 0 - } - var node; - if (typeof path === "object") { - node = path - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node - } catch (e) {} - } - var created = false; - if (flags & 64) { - if (node) { - if (flags & 128) { - throw new FS.ErrnoError(20) - } - } else { - node = FS.mknod(path, mode, 0); - created = true - } - } - if (!node) { - throw new FS.ErrnoError(44) - } - if (FS.isChrdev(node.mode)) { - flags &= ~512 - } - if (flags & 65536 && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(54) - } - if (!created) { - var errCode = FS.mayOpen(node, flags); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - } - if (flags & 512) { - FS.truncate(node, 0) - } - flags &= ~(128 | 512 | 131072); - var stream = FS.createStream({ - node: node, - path: FS.getPath(node), - flags: flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - ungotten: [], - error: false - }, fd_start, fd_end); - if (stream.stream_ops.open) { - stream.stream_ops.open(stream) - } - if (Module.logReadFiles && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - err("FS.trackingDelegate error on read file: " + path) - } - } - try { - if (FS.trackingDelegate.onOpenFile) { - var trackingFlags = 0; - if ((flags & 2097155) !== 1) { - trackingFlags |= FS.tracking.openFlags.READ - } - if ((flags & 2097155) !== 0) { - trackingFlags |= FS.tracking.openFlags.WRITE - } - FS.trackingDelegate.onOpenFile(path, trackingFlags) - } - } catch (e) { - err("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message) - } - return stream - }, - close: function(stream) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (stream.getdents) stream.getdents = null; - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream) - } - } catch (e) { - throw e - } finally { - FS.closeStream(stream.fd) - } - stream.fd = null - }, - isClosed: function(stream) { - return stream.fd === null - }, - llseek: function(stream, offset, whence) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(70) - } - if (whence != 0 && whence != 1 && whence != 2) { - throw new FS.ErrnoError(28) - } - stream.position = stream.stream_ops.llseek(stream, offset, whence); - stream.ungotten = []; - return stream.position - }, - read: function(stream, buffer, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(28) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead - }, - write: function(stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(28) - } - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(31) - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(28) - } - if (stream.seekable && stream.flags & 1024) { - FS.llseek(stream, 0, 2) - } - var seeking = typeof position !== "undefined"; - if (!seeking) { - position = stream.position - } else if (!stream.seekable) { - throw new FS.ErrnoError(70) - } - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - try { - if (stream.path && FS.trackingDelegate.onWriteToFile) FS.trackingDelegate.onWriteToFile(stream.path) - } catch (e) { - err("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message) - } - return bytesWritten - }, - allocate: function(stream, offset, length) { - if (FS.isClosed(stream)) { - throw new FS.ErrnoError(8) - } - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(28) - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(8) - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(43) - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(138) - } - stream.stream_ops.allocate(stream, offset, length) - }, - mmap: function(stream, address, length, position, prot, flags) { - if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { - throw new FS.ErrnoError(2) - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(2) - } - if (!stream.stream_ops.mmap) { - throw new FS.ErrnoError(43) - } - return stream.stream_ops.mmap(stream, address, length, position, prot, flags) - }, - msync: function(stream, buffer, offset, length, mmapFlags) { - if (!stream || !stream.stream_ops.msync) { - return 0 - } - return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) - }, - munmap: function(stream) { - return 0 - }, - ioctl: function(stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(59) - } - return stream.stream_ops.ioctl(stream, cmd, arg) - }, - readFile: function(path, opts) { - opts = opts || {}; - opts.flags = opts.flags || "r"; - opts.encoding = opts.encoding || "binary"; - if (opts.encoding !== "utf8" && opts.encoding !== "binary") { - throw new Error('Invalid encoding type "' + opts.encoding + '"') - } - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === "utf8") { - ret = UTF8ArrayToString(buf, 0) - } else if (opts.encoding === "binary") { - ret = buf - } - FS.close(stream); - return ret - }, - writeFile: function(path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || "w"; - var stream = FS.open(path, opts.flags, opts.mode); - if (typeof data === "string") { - var buf = new Uint8Array(lengthBytesUTF8(data) + 1); - var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); - FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) - } else if (ArrayBuffer.isView(data)) { - FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) - } else { - throw new Error("Unsupported data type") - } - FS.close(stream) - }, - cwd: function() { - return FS.currentPath - }, - chdir: function(path) { - var lookup = FS.lookupPath(path, { - follow: true - }); - if (lookup.node === null) { - throw new FS.ErrnoError(44) - } - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(54) - } - var errCode = FS.nodePermissions(lookup.node, "x"); - if (errCode) { - throw new FS.ErrnoError(errCode) - } - FS.currentPath = lookup.path - }, - createDefaultDirectories: function() { - FS.mkdir("/tmp"); - FS.mkdir("/home"); - FS.mkdir("/home/web_user") - }, - createDefaultDevices: function() { - FS.mkdir("/dev"); - FS.registerDevice(FS.makedev(1, 3), { - read: function() { - return 0 - }, - write: function(stream, buffer, offset, length, pos) { - return length - } - }); - FS.mkdev("/dev/null", FS.makedev(1, 3)); - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev("/dev/tty", FS.makedev(5, 0)); - FS.mkdev("/dev/tty1", FS.makedev(6, 0)); - var random_device = getRandomDevice(); - FS.createDevice("/dev", "random", random_device); - FS.createDevice("/dev", "urandom", random_device); - FS.mkdir("/dev/shm"); - FS.mkdir("/dev/shm/tmp") - }, - createSpecialDirectories: function() { - FS.mkdir("/proc"); - FS.mkdir("/proc/self"); - FS.mkdir("/proc/self/fd"); - FS.mount({ - mount: function() { - var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73); - node.node_ops = { - lookup: function(parent, name) { - var fd = +name; - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - var ret = { - parent: null, - mount: { - mountpoint: "fake" - }, - node_ops: { - readlink: function() { - return stream.path - } - } - }; - ret.parent = ret; - return ret - } - }; - return node - } - }, {}, "/proc/self/fd") - }, - createStandardStreams: function() { - if (Module.stdin) { - FS.createDevice("/dev", "stdin", Module.stdin) - } else { - FS.symlink("/dev/tty", "/dev/stdin") - } - if (Module.stdout) { - FS.createDevice("/dev", "stdout", null, Module.stdout) - } else { - FS.symlink("/dev/tty", "/dev/stdout") - } - if (Module.stderr) { - FS.createDevice("/dev", "stderr", null, Module.stderr) - } else { - FS.symlink("/dev/tty1", "/dev/stderr") - } - var stdin = FS.open("/dev/stdin", "r"); - var stdout = FS.open("/dev/stdout", "w"); - var stderr = FS.open("/dev/stderr", "w") - }, - ensureErrnoError: function() { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno, node) { - this.node = node; - this.setErrno = function(errno) { - this.errno = errno - }; - this.setErrno(errno); - this.message = "FS error" - }; - FS.ErrnoError.prototype = new Error; - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - [44].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = "" - }) - }, - staticInit: function() { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.mount(MEMFS, {}, "/"); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - FS.createSpecialDirectories(); - FS.filesystems = { - "MEMFS": MEMFS - } - }, - init: function(input, output, error) { - FS.init.initialized = true; - FS.ensureErrnoError(); - Module.stdin = input || Module.stdin; - Module.stdout = output || Module.stdout; - Module.stderr = error || Module.stderr; - FS.createStandardStreams() - }, - quit: function() { - FS.init.initialized = false; - var fflush = Module._fflush; - if (fflush) fflush(0); - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue - } - FS.close(stream) - } - }, - getMode: function(canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode - }, - findObject: function(path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object - } else { - setErrNo(ret.error); - return null - } - }, - analyzePath: function(path, dontResolveLastLink) { - try { - var lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - path = lookup.path - } catch (e) {} - var ret = { - isRoot: false, - exists: false, - error: 0, - name: null, - path: null, - object: null, - parentExists: false, - parentPath: null, - parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { - parent: true - }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { - follow: !dontResolveLastLink - }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === "/" - } catch (e) { - ret.error = e.errno - } - return ret - }, - createPath: function(parent, path, canRead, canWrite) { - parent = typeof parent === "string" ? parent : FS.getPath(parent); - var parts = path.split("/").reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current) - } catch (e) {} - parent = current - } - return current - }, - createFile: function(parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode) - }, - createDataFile: function(parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === "string") { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr - } - FS.chmod(node, mode | 146); - var stream = FS.open(node, "w"); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode) - } - return node - }, - createDevice: function(parent, name, input, output) { - var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false - }, - close: function(stream) { - if (output && output.buffer && output.buffer.length) { - output(10) - } - }, - read: function(stream, buffer, offset, length, pos) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input() - } catch (e) { - throw new FS.ErrnoError(29) - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(6) - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset + i] = result - } - if (bytesRead) { - stream.node.timestamp = Date.now() - } - return bytesRead - }, - write: function(stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer[offset + i]) - } catch (e) { - throw new FS.ErrnoError(29) - } - } - if (length) { - stream.node.timestamp = Date.now() - } - return i - } - }); - return FS.mkdev(path, mode, dev) - }, - forceLoadFile: function(obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - var success = true; - if (typeof XMLHttpRequest !== "undefined") { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.") - } else if (read_) { - try { - obj.contents = intArrayFromString(read_(obj.url), true); - obj.usedBytes = obj.contents.length - } catch (e) { - success = false - } - } else { - throw new Error("Cannot load without read() or XMLHttpRequest.") - } - if (!success) setErrNo(29); - return success - }, - createLazyFile: function(parent, name, url, canRead, canWrite) { - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = [] - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length - 1 || idx < 0) { - return undefined - } - var chunkOffset = idx % this.chunkSize; - var chunkNum = idx / this.chunkSize | 0; - return this.getter(chunkNum)[chunkOffset] - }; - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter - }; - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - var xhr = new XMLHttpRequest; - xhr.open("HEAD", url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; - var chunkSize = 1024 * 1024; - if (!hasByteServing) chunkSize = datalength; - var doXHR = function(from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength - 1) throw new Error("only " + datalength + " bytes available! programmer error!"); - var xhr = new XMLHttpRequest; - xhr.open("GET", url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - if (typeof Uint8Array !== "undefined") xhr.responseType = "arraybuffer"; - if (xhr.overrideMimeType) { - xhr.overrideMimeType("text/plain; charset=x-user-defined") - } - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - if (xhr.response !== undefined) { - return new Uint8Array(xhr.response || []) - } else { - return intArrayFromString(xhr.responseText || "", true) - } - }; - var lazyArray = this; - lazyArray.setDataGetter(function(chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum + 1) * chunkSize - 1; - end = Math.min(end, datalength - 1); - if (typeof lazyArray.chunks[chunkNum] === "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end) - } - if (typeof lazyArray.chunks[chunkNum] === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum] - }); - if (usesGzip || !datalength) { - chunkSize = datalength = 1; - datalength = this.getter(0).length; - chunkSize = datalength; - out("LazyFiles on gzip forces download of the whole file when length is accessed") - } - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true - }; - if (typeof XMLHttpRequest !== "undefined") { - if (!ENVIRONMENT_IS_WORKER) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; - var lazyArray = new LazyUint8Array; - Object.defineProperties(lazyArray, { - length: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._length - } - }, - chunkSize: { - get: function() { - if (!this.lengthKnown) { - this.cacheLength() - } - return this._chunkSize - } - } - }); - var properties = { - isDevice: false, - contents: lazyArray - } - } else { - var properties = { - isDevice: false, - url: url - } - } - var node = FS.createFile(parent, name, properties, canRead, canWrite); - if (properties.contents) { - node.contents = properties.contents - } else if (properties.url) { - node.contents = null; - node.url = properties.url - } - Object.defineProperties(node, { - usedBytes: { - get: function() { - return this.contents.length - } - } - }); - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - return fn.apply(null, arguments) - } - }); - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(29) - } - var contents = stream.node.contents; - if (position >= contents.length) return 0; - var size = Math.min(contents.length - position, length); - if (contents.slice) { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i] - } - } else { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents.get(position + i) - } - } - return size - }; - node.stream_ops = stream_ops; - return node - }, - createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { - Browser.init(); - var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; - var dep = getUniqueRunDependency("cp " + fullname); - - function processData(byteArray) { - function finish(byteArray) { - if (preFinish) preFinish(); - if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) - } - if (onload) onload(); - removeRunDependency(dep) - } - var handled = false; - Module.preloadPlugins.forEach(function(plugin) { - if (handled) return; - if (plugin.canHandle(fullname)) { - plugin.handle(byteArray, fullname, finish, function() { - if (onerror) onerror(); - removeRunDependency(dep) - }); - handled = true - } - }); - if (!handled) finish(byteArray) - } - addRunDependency(dep); - if (typeof url === "string") { - Browser.asyncLoad(url, function(byteArray) { - processData(byteArray) - }, onerror) - } else { - processData(url) - } - }, - indexedDB: function() { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB - }, - DB_NAME: function() { - return "EM_FS_" + window.location.pathname - }, - DB_VERSION: 20, - DB_STORE_NAME: "FILE_DATA", - saveFilesToDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - out("creating db"); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME) - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0; - var fail = 0; - var total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { - ok++; - if (ok + fail == total) finish() - }; - putRequest.onerror = function putRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - }, - loadFilesFromDB: function(paths, onload, onerror) { - onload = onload || function() {}; - onerror = onerror || function() {}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) - } catch (e) { - return onerror(e) - } - openRequest.onupgradeneeded = onerror; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], "readonly") - } catch (e) { - onerror(e); - return - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0; - var fail = 0; - var total = paths.length; - - function finish() { - if (fail == 0) onload(); - else onerror() - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path) - } - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish() - }; - getRequest.onerror = function getRequest_onerror() { - fail++; - if (ok + fail == total) finish() - } - }); - transaction.onerror = onerror - }; - openRequest.onerror = onerror - } -}; -var SYSCALLS = { - mappings: {}, - DEFAULT_POLLMASK: 5, - umask: 511, - calculateAt: function(dirfd, path) { - if (path[0] !== "/") { - var dir; - if (dirfd === -100) { - dir = FS.cwd() - } else { - var dirstream = FS.getStream(dirfd); - if (!dirstream) throw new FS.ErrnoError(8); - dir = dirstream.path - } - path = PATH.join2(dir, path) - } - return path - }, - doStat: function(func, path, buf) { - try { - var stat = func(path) - } catch (e) { - if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { - return -54 - } - throw e - } - HEAP32[buf >> 2] = stat.dev; - HEAP32[buf + 4 >> 2] = 0; - HEAP32[buf + 8 >> 2] = stat.ino; - HEAP32[buf + 12 >> 2] = stat.mode; - HEAP32[buf + 16 >> 2] = stat.nlink; - HEAP32[buf + 20 >> 2] = stat.uid; - HEAP32[buf + 24 >> 2] = stat.gid; - HEAP32[buf + 28 >> 2] = stat.rdev; - HEAP32[buf + 32 >> 2] = 0; - tempI64 = [stat.size >>> 0, (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1]; - HEAP32[buf + 48 >> 2] = 4096; - HEAP32[buf + 52 >> 2] = stat.blocks; - HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; - HEAP32[buf + 60 >> 2] = 0; - HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; - HEAP32[buf + 68 >> 2] = 0; - HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; - HEAP32[buf + 76 >> 2] = 0; - tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1]; - return 0 - }, - doMsync: function(addr, stream, len, flags, offset) { - var buffer = HEAPU8.slice(addr, addr + len); - FS.msync(stream, buffer, offset, len, flags) - }, - doMkdir: function(path, mode) { - path = PATH.normalize(path); - if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); - FS.mkdir(path, mode, 0); - return 0 - }, - doMknod: function(path, mode, dev) { - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - return -28 - } - FS.mknod(path, mode, dev); - return 0 - }, - doReadlink: function(path, buf, bufsize) { - if (bufsize <= 0) return -28; - var ret = FS.readlink(path); - var len = Math.min(bufsize, lengthBytesUTF8(ret)); - var endChar = HEAP8[buf + len]; - stringToUTF8(ret, buf, bufsize + 1); - HEAP8[buf + len] = endChar; - return len - }, - doAccess: function(path, amode) { - if (amode & ~7) { - return -28 - } - var node; - var lookup = FS.lookupPath(path, { - follow: true - }); - node = lookup.node; - if (!node) { - return -44 - } - var perms = ""; - if (amode & 4) perms += "r"; - if (amode & 2) perms += "w"; - if (amode & 1) perms += "x"; - if (perms && FS.nodePermissions(node, perms)) { - return -2 - } - return 0 - }, - doDup: function(path, flags, suggestFD) { - var suggest = FS.getStream(suggestFD); - if (suggest) FS.close(suggest); - return FS.open(path, flags, 0, suggestFD, suggestFD).fd - }, - doReadv: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.read(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr; - if (curr < len) break - } - return ret - }, - doWritev: function(stream, iov, iovcnt, offset) { - var ret = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - var curr = FS.write(stream, HEAP8, ptr, len, offset); - if (curr < 0) return -1; - ret += curr - } - return ret - }, - varargs: undefined, - get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret - }, - getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret - }, - getStreamFromFD: function(fd) { - var stream = FS.getStream(fd); - if (!stream) throw new FS.ErrnoError(8); - return stream - }, - get64: function(low, high) { - return low - } -}; - -function _fd_close(fd) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - FS.close(stream); - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_read(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doReadv(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var HIGH_OFFSET = 4294967296; - var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); - var DOUBLE_LIMIT = 9007199254740992; - if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { - return -61 - } - FS.llseek(stream, offset, whence); - tempI64 = [stream.position >>> 0, (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1]; - if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function _fd_write(fd, iov, iovcnt, pnum) { - try { - var stream = SYSCALLS.getStreamFromFD(fd); - var num = SYSCALLS.doWritev(stream, iov, iovcnt); - HEAP32[pnum >> 2] = num; - return 0 - } catch (e) { - if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e); - return e.errno - } -} - -function __isLeapYear(year) { - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) -} - -function __arraySum(array, index) { - var sum = 0; - for (var i = 0; i <= index; sum += array[i++]) {} - return sum -} -var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; -var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - -function __addDays(date, days) { - var newDate = new Date(date.getTime()); - while (days > 0) { - var leap = __isLeapYear(newDate.getFullYear()); - var currentMonth = newDate.getMonth(); - var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth]; - if (days > daysInCurrentMonth - newDate.getDate()) { - days -= daysInCurrentMonth - newDate.getDate() + 1; - newDate.setDate(1); - if (currentMonth < 11) { - newDate.setMonth(currentMonth + 1) - } else { - newDate.setMonth(0); - newDate.setFullYear(newDate.getFullYear() + 1) - } - } else { - newDate.setDate(newDate.getDate() + days); - return newDate - } - } - return newDate -} - -function _strftime(s, maxsize, format, tm) { - var tm_zone = HEAP32[tm + 40 >> 2]; - var date = { - tm_sec: HEAP32[tm >> 2], - tm_min: HEAP32[tm + 4 >> 2], - tm_hour: HEAP32[tm + 8 >> 2], - tm_mday: HEAP32[tm + 12 >> 2], - tm_mon: HEAP32[tm + 16 >> 2], - tm_year: HEAP32[tm + 20 >> 2], - tm_wday: HEAP32[tm + 24 >> 2], - tm_yday: HEAP32[tm + 28 >> 2], - tm_isdst: HEAP32[tm + 32 >> 2], - tm_gmtoff: HEAP32[tm + 36 >> 2], - tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" - }; - var pattern = UTF8ToString(format); - var EXPANSION_RULES_1 = { - "%c": "%a %b %d %H:%M:%S %Y", - "%D": "%m/%d/%y", - "%F": "%Y-%m-%d", - "%h": "%b", - "%r": "%I:%M:%S %p", - "%R": "%H:%M", - "%T": "%H:%M:%S", - "%x": "%m/%d/%y", - "%X": "%H:%M:%S", - "%Ec": "%c", - "%EC": "%C", - "%Ex": "%m/%d/%y", - "%EX": "%H:%M:%S", - "%Ey": "%y", - "%EY": "%Y", - "%Od": "%d", - "%Oe": "%e", - "%OH": "%H", - "%OI": "%I", - "%Om": "%m", - "%OM": "%M", - "%OS": "%S", - "%Ou": "%u", - "%OU": "%U", - "%OV": "%V", - "%Ow": "%w", - "%OW": "%W", - "%Oy": "%y" - }; - for (var rule in EXPANSION_RULES_1) { - pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]) - } - var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; - var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - - function leadingSomething(value, digits, character) { - var str = typeof value === "number" ? value.toString() : value || ""; - while (str.length < digits) { - str = character[0] + str - } - return str - } - - function leadingNulls(value, digits) { - return leadingSomething(value, digits, "0") - } - - function compareByDay(date1, date2) { - function sgn(value) { - return value < 0 ? -1 : value > 0 ? 1 : 0 - } - var compare; - if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { - if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) { - compare = sgn(date1.getDate() - date2.getDate()) - } - } - return compare - } - - function getFirstWeekStartDate(janFourth) { - switch (janFourth.getDay()) { - case 0: - return new Date(janFourth.getFullYear() - 1, 11, 29); - case 1: - return janFourth; - case 2: - return new Date(janFourth.getFullYear(), 0, 3); - case 3: - return new Date(janFourth.getFullYear(), 0, 2); - case 4: - return new Date(janFourth.getFullYear(), 0, 1); - case 5: - return new Date(janFourth.getFullYear() - 1, 11, 31); - case 6: - return new Date(janFourth.getFullYear() - 1, 11, 30) - } - } - - function getWeekBasedYear(date) { - var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); - var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { - if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { - return thisDate.getFullYear() + 1 - } else { - return thisDate.getFullYear() - } - } else { - return thisDate.getFullYear() - 1 - } - } - var EXPANSION_RULES_2 = { - "%a": function(date) { - return WEEKDAYS[date.tm_wday].substring(0, 3) - }, - "%A": function(date) { - return WEEKDAYS[date.tm_wday] - }, - "%b": function(date) { - return MONTHS[date.tm_mon].substring(0, 3) - }, - "%B": function(date) { - return MONTHS[date.tm_mon] - }, - "%C": function(date) { - var year = date.tm_year + 1900; - return leadingNulls(year / 100 | 0, 2) - }, - "%d": function(date) { - return leadingNulls(date.tm_mday, 2) - }, - "%e": function(date) { - return leadingSomething(date.tm_mday, 2, " ") - }, - "%g": function(date) { - return getWeekBasedYear(date).toString().substring(2) - }, - "%G": function(date) { - return getWeekBasedYear(date) - }, - "%H": function(date) { - return leadingNulls(date.tm_hour, 2) - }, - "%I": function(date) { - var twelveHour = date.tm_hour; - if (twelveHour == 0) twelveHour = 12; - else if (twelveHour > 12) twelveHour -= 12; - return leadingNulls(twelveHour, 2) - }, - "%j": function(date) { - return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3) - }, - "%m": function(date) { - return leadingNulls(date.tm_mon + 1, 2) - }, - "%M": function(date) { - return leadingNulls(date.tm_min, 2) - }, - "%n": function() { - return "\n" - }, - "%p": function(date) { - if (date.tm_hour >= 0 && date.tm_hour < 12) { - return "AM" - } else { - return "PM" - } - }, - "%S": function(date) { - return leadingNulls(date.tm_sec, 2) - }, - "%t": function() { - return "\t" - }, - "%u": function(date) { - return date.tm_wday || 7 - }, - "%U": function(date) { - var janFirst = new Date(date.tm_year + 1900, 0, 1); - var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay()); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstSunday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstSundayUntilEndJanuary = 31 - firstSunday.getDate(); - var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2) - } - return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00" - }, - "%V": function(date) { - var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4); - var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4); - var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); - var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); - var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); - if (compareByDay(endDate, firstWeekStartThisYear) < 0) { - return "53" - } - if (compareByDay(firstWeekStartNextYear, endDate) <= 0) { - return "01" - } - var daysDifference; - if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) { - daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate() - } else { - daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate() - } - return leadingNulls(Math.ceil(daysDifference / 7), 2) - }, - "%w": function(date) { - return date.tm_wday - }, - "%W": function(date) { - var janFirst = new Date(date.tm_year, 0, 1); - var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1); - var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); - if (compareByDay(firstMonday, endDate) < 0) { - var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; - var firstMondayUntilEndJanuary = 31 - firstMonday.getDate(); - var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); - return leadingNulls(Math.ceil(days / 7), 2) - } - return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00" - }, - "%y": function(date) { - return (date.tm_year + 1900).toString().substring(2) - }, - "%Y": function(date) { - return date.tm_year + 1900 - }, - "%z": function(date) { - var off = date.tm_gmtoff; - var ahead = off >= 0; - off = Math.abs(off) / 60; - off = off / 60 * 100 + off % 60; - return (ahead ? "+" : "-") + String("0000" + off).slice(-4) - }, - "%Z": function(date) { - return date.tm_zone - }, - "%%": function() { - return "%" - } - }; - for (var rule in EXPANSION_RULES_2) { - if (pattern.indexOf(rule) >= 0) { - pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date)) - } - } - var bytes = intArrayFromString(pattern, false); - if (bytes.length > maxsize) { - return 0 - } - writeArrayToMemory(bytes, s); - return bytes.length - 1 -} - -function _strftime_l(s, maxsize, format, tm) { - return _strftime(s, maxsize, format, tm) -} -var FSNode = function(parent, name, mode, rdev) { - if (!parent) { - parent = this - } - this.parent = parent; - this.mount = parent.mount; - this.mounted = null; - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev -}; -var readMode = 292 | 73; -var writeMode = 146; -Object.defineProperties(FSNode.prototype, { - read: { - get: function() { - return (this.mode & readMode) === readMode - }, - set: function(val) { - val ? this.mode |= readMode : this.mode &= ~readMode - } - }, - write: { - get: function() { - return (this.mode & writeMode) === writeMode - }, - set: function(val) { - val ? this.mode |= writeMode : this.mode &= ~writeMode - } - }, - isFolder: { - get: function() { - return FS.isDir(this.mode) - } - }, - isDevice: { - get: function() { - return FS.isChrdev(this.mode) - } - } -}); -FS.FSNode = FSNode; -FS.staticInit(); - -function intArrayFromString(stringy, dontAddNull, length) { - var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; - var u8array = new Array(len); - var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); - if (dontAddNull) u8array.length = numBytesWritten; - return u8array -} -__ATINIT__.push({ - func: function() { - ___wasm_call_ctors() - } -}); -var asmLibraryArg = { - "m": ___cxa_allocate_exception, - "l": ___cxa_throw, - "c": _abort, - "k": _emscripten_memcpy_big, - "d": _emscripten_resize_heap, - "f": _environ_get, - "g": _environ_sizes_get, - "i": _fd_close, - "h": _fd_read, - "j": _fd_seek, - "b": _fd_write, - "a": wasmMemory, - "e": _strftime_l -}; -var asm = createWasm(); -var ___wasm_call_ctors = Module.___wasm_call_ctors = function() { - return (___wasm_call_ctors = Module.___wasm_call_ctors = Module.asm.o).apply(null, arguments) -}; -var _Encoder_new = Module._Encoder_new = function() { - return (_Encoder_new = Module._Encoder_new = Module.asm.p).apply(null, arguments) -}; -var _Encoder_delete = Module._Encoder_delete = function() { - return (_Encoder_delete = Module._Encoder_delete = Module.asm.q).apply(null, arguments) -}; -var _Encoder_input = Module._Encoder_input = function() { - return (_Encoder_input = Module._Encoder_input = Module.asm.r).apply(null, arguments) -}; -var _Encoder_output = Module._Encoder_output = function() { - return (_Encoder_output = Module._Encoder_output = Module.asm.s).apply(null, arguments) -}; -var _Decoder_new = Module._Decoder_new = function() { - return (_Decoder_new = Module._Decoder_new = Module.asm.t).apply(null, arguments) -}; -var _Decoder_delete = Module._Decoder_delete = function() { - return (_Decoder_delete = Module._Decoder_delete = Module.asm.u).apply(null, arguments) -}; -var _Decoder_input = Module._Decoder_input = function() { - return (_Decoder_input = Module._Decoder_input = Module.asm.v).apply(null, arguments) -}; -var _Decoder_output = Module._Decoder_output = function() { - return (_Decoder_output = Module._Decoder_output = Module.asm.w).apply(null, arguments) -}; -var _String_size = Module._String_size = function() { - return (_String_size = Module._String_size = Module.asm.x).apply(null, arguments) -}; -var _String_new = Module._String_new = function() { - return (_String_new = Module._String_new = Module.asm.y).apply(null, arguments) -}; -var _String_data = Module._String_data = function() { - return (_String_data = Module._String_data = Module.asm.z).apply(null, arguments) -}; -var _String_delete = Module._String_delete = function() { - return (_String_delete = Module._String_delete = Module.asm.A).apply(null, arguments) -}; -var _Int16Array_size = Module._Int16Array_size = function() { - return (_Int16Array_size = Module._Int16Array_size = Module.asm.B).apply(null, arguments) -}; -var _Int16Array_new = Module._Int16Array_new = function() { - return (_Int16Array_new = Module._Int16Array_new = Module.asm.C).apply(null, arguments) -}; -var _Int16Array_data = Module._Int16Array_data = function() { - return (_Int16Array_data = Module._Int16Array_data = Module.asm.D).apply(null, arguments) -}; -var _Int16Array_delete = Module._Int16Array_delete = function() { - return (_Int16Array_delete = Module._Int16Array_delete = Module.asm.E).apply(null, arguments) -}; -var _malloc = Module._malloc = function() { - return (_malloc = Module._malloc = Module.asm.F).apply(null, arguments) -}; -var _free = Module._free = function() { - return (_free = Module._free = Module.asm.G).apply(null, arguments) -}; -var ___errno_location = Module.___errno_location = function() { - return (___errno_location = Module.___errno_location = Module.asm.H).apply(null, arguments) -}; -var calledRun; - -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status -} -dependenciesFulfilled = function runCaller() { - if (!calledRun) run(); - if (!calledRun) dependenciesFulfilled = runCaller -}; - -function run(args) { - args = args || arguments_; - if (runDependencies > 0) { - return - } - preRun(); - if (runDependencies > 0) return; - - function doRun() { - if (calledRun) return; - calledRun = true; - Module.calledRun = true; - if (ABORT) return; - initRuntime(); - preMain(); - if (Module.onRuntimeInitialized) Module.onRuntimeInitialized(); - postRun() - } - if (Module.setStatus) { - Module.setStatus("Running..."); - setTimeout(function() { - setTimeout(function() { - Module.setStatus("") - }, 1); - doRun() - }, 1) - } else { - doRun() - } -} -Module.run = run; -if (Module.preInit) { - if (typeof Module.preInit === "function") Module.preInit = [Module.preInit]; - while (Module.preInit.length > 0) { - Module.preInit.pop()() - } -} -noExitRuntime = true; -run(); - -function Encoder(channels, samplerate, bitrate, frame_size, voice_optimization) { - this.enc = Module._Encoder_new.apply(null, arguments); - this.out = Module._String_new() -} -Encoder.prototype.destroy = function() { - Module._Encoder_delete(this.enc); - Module._String_delete(this.out) -}; -Encoder.prototype.input = function(samples) { - var ptr = Module._malloc(samples.length * samples.BYTES_PER_ELEMENT); - var pdata = new Uint8Array(Module.HEAPU8.buffer, ptr, samples.length * samples.BYTES_PER_ELEMENT); - pdata.set(new Uint8Array(samples.buffer, samples.byteOffset, samples.length * samples.BYTES_PER_ELEMENT)); - Module._Encoder_input(this.enc, ptr, samples.length); - Module._free(ptr) -}; -Encoder.prototype.output = function() { - var ok = Module._Encoder_output(this.enc, this.out); - if (ok) { - return new Uint8Array(Module.HEAPU8.buffer, Module._String_data(this.out), Module._String_size(this.out)) - } else { - throw new Error('not ok'); - } -}; - -function Decoder(channels, samplerate) { - this.dec = Module._Decoder_new.apply(null, arguments); - this.out = Module._Int16Array_new() -} -Decoder.prototype.destroy = function() { - Module._Decoder_delete(this.dec); - Module._Int16Array_delete(this.out) -}; -Decoder.prototype.input = function(packet) { - var ptr = Module._malloc(packet.length * packet.BYTES_PER_ELEMENT); - var pdata = new Uint8Array(Module.HEAPU8.buffer, ptr, packet.length * packet.BYTES_PER_ELEMENT); - pdata.set(new Uint8Array(packet.buffer, packet.byteOffset, packet.length * packet.BYTES_PER_ELEMENT)); - Module._Decoder_input(this.dec, ptr, packet.length); - Module._free(ptr) -}; -Decoder.prototype.output = function() { - var ok = Module._Decoder_output(this.dec, this.out); - if (ok) { - return new Int16Array(Module.HEAPU8.buffer, Module._Int16Array_data(this.out), Module._Int16Array_size(this.out)) - // } else { - // throw new Error('not ok'); - } -}; -Module.Encoder = Encoder; -Module.Decoder = Decoder; -if (Module.ENVIRONMENT != "NODE") libopus = Module; -let accept; -const p = new Promise((a, r) => { - accept = a; -}); -libopus.waitForReady = () => p; -libopus.onRuntimeInitialized = () => { - accept(); -}; -export default libopus; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/package.json deleted file mode 100644 index 5bc889e56..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "libopusjs", - "type": "module" -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/README.md b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/README.md deleted file mode 100644 index 74b5e714d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/README.md +++ /dev/null @@ -1,264 +0,0 @@ -# `mpg123-decoder` - -`mpg123-decoder` is a Web Assembly MPEG Layer (I/II/III) audio decoder. - * 84.6 KiB minified bundle size - * Browser and NodeJS support - * Built in Web Worker support - * Based on [`mpg123`](https://www.mpg123.de/) - -See the [homepage](https://github.com/eshaz/wasm-audio-decoders) of this repository for more Web Assembly audio decoders like this one. - -### [Checkout the demo here](https://eshaz.github.io/wasm-audio-decoders/) - -## Installing -* Install from [NPM](https://www.npmjs.com/package/mpg123-decoder). - - Run `npm i mpg123-decoder` - - ```javascript - import { MPEGDecoder } from 'mpg123-decoder'; - - const decoder = new MPEGDecoder(); - ``` - -* Or download the [build](https://github.com/eshaz/wasm-audio-decoders/tree/master/src/mpg123-decoder/dist) and include it as a script. - ```html - - - ``` - -## Usage - -1. Create a new instance and wait for the WASM to finish compiling. Decoding can be done on the main thread synchronously, or in a webworker asynchronously. - - **Main thread synchronous decoding** - ```javascript - import { MPEGDecoder } from 'mpg123-decoder'; - - const decoder = new MPEGDecoder(); - - // wait for the WASM to be compiled - await decoder.ready; - ``` - - **Web Worker asynchronous decoding** - ```javascript - import { MPEGDecoderWebWorker } from 'mpg123-decoder'; - - const decoder = new MPEGDecoderWebWorker(); - - // wait for the WASM to be compiled - await decoder.ready; - ``` - -1. Begin decoding MPEG data. - - ```javascript - // Decode Uint8Array of MPEG data - const {channelData, samplesDecoded, sampleRate} = decoder.decode(mpegData); - - // Decode an individual MPEG frame - const {channelData, samplesDecoded, sampleRate} = decoder.decodeFrame(mpegFrame); - - // Decode an array of individual MPEG frames - const {channelData, samplesDecoded, sampleRate} = decoder.decodeFrames(mpegFrameArray); - ``` - -1. When done decoding, reset the decoder to decode a new stream, or free up the memory being used by the WASM module if you have no more audio to decode. - - ```javascript - // `reset()` clears the decoder state and allows you do decode a new stream of MPEG data. - await decoder.reset(); - - // `free()` de-allocates the memory used by the decoder. You will need to create a new instance after calling `free()` to start decoding again. - decoder.free(); - ``` - -## API - -Decoded audio is always returned in the below structure. - -```javascript -{ - channelData: [ - leftAudio, // Float32Array of PCM samples for the left channel - rightAudio // Float32Array of PCM samples for the right channel - ], - samplesDecoded: 1234, // number of PCM samples that were decoded per channel - sampleRate: 44100, // sample rate of the decoded PCM - errors: [ // array containing descriptions for any decode errors - { - message: "-1 MPG123_ERR", - frameLength: 1008, // length of the frame or data in bytes that encountered an error - frameNumber: 0, // position of error relative to total frames decoded - inputBytes: 2160, // position of error relative to total input bytes - outputSamples: 1152, // position of error relative to total output samples - } - ] -} -``` - -Each Float32Array within `channelData` can be used directly in the WebAudio API for playback. - -Decoding will proceed through any errors. Any errors encountered may result in gaps in the decoded audio. - -## `MPEGDecoder` - -Class that decodes MPEG data or frames synchronously on the main thread. - -### Options -```javascript -const decoder = new MPEGDecoder({ enableGapless: true }); -``` - -* `enableGapless` *optional, defaults to `true`* - * Set to `false` to disable gapless decoding. - * Gapless decoding reads the XING / Lame header to determine delay (start) and padding (end) samples and trims the output accordingly. - -### Getters -* `decoder.ready` *async* - * Returns a promise that is resolved when the WASM is compiled and ready to use. - -### Methods - -* `decoder.decode(mpegData)` - * `mpegData` Uint8Array of MPEG audio data. -* `decoder.decodeFrame(mpegFrame)` - * `mpegFrame` Uint8Array containing a single MPEG frame. -* `decoder.decodeFrames(mpegFrames)` - * `mpegFrames` Array of Uint8Arrays containing MPEG frames. -* `decoder.reset()` *async* - * Resets the decoder so that a new stream of MPEG data can be decoded. -* `decoder.free()` - * De-allocates the memory used by the decoder. - * After calling `free()`, the current instance is made unusable, and a new instance will need to be created to decode additional MPEG data. - -## `MPEGDecoderWebWorker` - -Class that decodes MPEG data or frames asynchronously within a WebWorker. Decoding is performed in a separate, non-blocking thread. Each new instance spawns a new worker allowing you to run multiple workers for concurrent decoding of multiple streams. - -### Options -```javascript -const decoder = new MPEGDecoderWebWorker({ enableGapless: true }); -``` - -* `enableGapless` *optional, defaults to `true`* - * Set to `false` to disable gapless decoding. - * Gapless decoding reads the XING / Lame header to determine delay (start) and padding (end) samples and trims the output accordingly. - -### Getters -* `decoder.ready` *async* - * Returns a promise that is resolved when the WASM is compiled and ready to use. - -### Methods - -* `decoder.decode(mpegData)` *async* - * `mpegData` Uint8Array of MPEG audio data. -* `decoder.decodeFrame(mpegFrame)` *async* - * `mpegFrame` Uint8Array containing a single MPEG frame. -* `decoder.decodeFrames(mpegFrames)` *async* - * `mpegFrames` Array of Uint8Arrays containing MPEG frames. -* `decoder.reset()` *async* - * Resets the decoder so that a new stream of MPEG data can be decoded. -* `decoder.free()` *async* - * De-allocates the memory used by the decoder and terminates the web worker. - * After calling `free()`, the current instance is made unusable, and a new instance will need to be created to decode additional MPEG data. - -### Properly using the Web Worker interface - -`MPEGDecoderWebWorker` uses async functions to send operations to the web worker without blocking the main thread. To fully take advantage of the concurrency provided by web workers, your code should avoid using `await` on decode operations where it will block the main thread. - -Each method call on a `MPEGDecoderWebWorker` instance will queue up an operation to the web worker. Operations will complete within the web worker thread one at a time and in the same order in which the methods were called. - - * **Good** Main thread is not blocked during each decode operation. The example `playAudio` function is called when each decode operation completes. Also, the next decode operation can begin while `playAudio` is doing work on the main thread. - ```javascript - const playAudio = ({ channelData, samplesDecoded, sampleRate }) => { - // does something to play the audio data. - } - - decoder.decodeFrame(frameData1).then(playAudio); - decoder.decodeFrame(frameData2).then(playAudio); - decoder.decodeFrame(frameData3).then(playAudio); - - // do some other operations while the audio is decoded - ``` - - * **Bad** Main thread is being blocked by `await` during each decode operation. Synchronous code is halted while decoding completes, negating the benefits of using a webworker. - ```javascript - const decoded1 = await decoder.decodeFrame(frameData1); // blocks the main thread - playAudio(decoded1); - - const decoded2 = await decoder.decodeFrame(frameData2); // blocks the main thread - playAudio(decoded2); - - const decoded3 = await decoder.decodeFrame(frameData3); // blocks the main thread - playAudio(decoded3); - ``` - -## Examples - -### Decoding multiple files using a **single** instance of `MPEGDecoderWebWorker` - -This example shows how to decode multiple files using a single `MPEGDecoderWebWorker` instance. This code iterates over an array of input files (Array of Uint8Arrays) and queues up each file to be decoded one at a time. - -First, wait for the decoder to become ready by calling `decoder.ready`. - -For each iteration, `decode()` is called, it's result is pushed to the `decodedFiles` array, and `decoder.reset()` is called to prepare the decoder for a new file. These operations are queued up to the decoder instance and will complete one after another. - -Finally, a call to `decoder.free()` is queued to clean up the memory stored by the decoder. This resolves when it and all of the other operations before it complete. - -It's important to note that there is only one `await` operations in this example. Decoding can happen asynchronously and you only need to `await` when you need to use the results of the decode operation. - -```javascript - const inputFiles = [file1, file2, file3] // Array of Uint8Array file data - - const decoder = new MPEGDecoderWebWorker(); - - const decodedFiles = []; - - const decodePromise = decoder.ready // wait for the decoder to be ready - .then(() => { - for (const file of inputFiles) { - decoder.decode(file) // queue the decode operation - .then((result) => decodedFiles.push(result)); // save the decode result after decode completes - decoder.reset(); // queue the reset operation - } - }) - .then(() => decoder.free()); // queue the free operation that will execute after the above operations - - // do sync operations here - - // await when you need to have the all of the audio data decoded - await decodePromise; -``` -### Decoding multiple files using **multiple** instances of `MPEGDecoderWebWorker` - -This example shows how to decode multiple files using multiple instances of `MPEGDecoderWebWorker`. This code iterates over an array of input files (Array of Uint8Arrays) and spawns a new `MPEGDecoderWebWorker` instance for each file and decodes the file. If you want to take full advantage of multi-core devices, this is the approach you will want to take since it will parallelize the decoding - -For each input file, a new decoder is created, and the file is decoded using the `decode()` after `decoder.ready` is resolved. The result of the `decode()` operation is returned, and a `finally()` function on the promise calls `decoder.free()` to free up the instance after the decode operations are completed. - -Finally, `Promise.all()` wraps this array of promises and resolves when all decode operations are complete. - -It's important to note that there is only one `await` operation in this example. Decoding can happen asynchronously and you only need to `await` when you need to use the results of the decode operation. - -```javascript - const inputFiles = [file1, file2, file3] // Array of Uint8Array file data - - // loops through each Uint8Array in `inputFiles` and decodes the files in separate threads - const decodePromise = Promise.all( - inputFiles.map((file) => { - const decoder = new MPEGDecoderWebWorker(); - - return decoder.ready - .then(() => decoder.decode(file)) // decode the input file - .finally(() => decoder.free()); // free the decoder after resolving the decode result - }) - ); - - // do sync operations here - - // await when you need to have the all of the audio data decoded - const decodedFiles = await decodePromise; -``` diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/index.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/index.js deleted file mode 100644 index 3b05df9d1..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import MPEGDecoder from "./src/MPEGDecoder.js"; -import MPEGDecoderWebWorker from "./src/MPEGDecoderWebWorker.js"; -import { assignNames } from "@wasm-audio-decoders/common"; - -assignNames(MPEGDecoder, "MPEGDecoder"); -assignNames(MPEGDecoderWebWorker, "MPEGDecoderWebWorker"); - -export { MPEGDecoder, MPEGDecoderWebWorker }; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/package.json deleted file mode 100644 index 709f0e577..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "mpg123-decoder", - "version": "1.0.0", - "description": "Web Assembly streaming MPEG Layer I/II/III decoder", - "type": "module", - "main": "./index.js", - "exports": { - "types": "./types.d.ts", - "default": "./index.js" - }, - "sideEffects": false, - "types": "types.d.ts", - "files": [ - "index.js", - "types.d.ts", - "src/EmscriptenWasm.js", - "src/MPEGDecoder.js", - "src/MPEGDecoderWebWorker.js", - "dist/mpg123-decoder.min.js", - "dist/mpg123-decoder.min.js.map" - ], - "keywords": [ - "MPEG", - "mp1", - "mp2", - "mp3", - "audio", - "decoder", - "stream", - "streams", - "mpg123", - "libmpg123", - "Web Assembly", - "Wasm", - "Web Worker" - ], - "author": { - "name": "Ethan Halsall", - "email": "ethanhalsall@pm.me" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/eshaz/wasm-audio-decoders/issues" - }, - "homepage": "https://github.com/eshaz/wasm-audio-decoders/tree/master/src/mpg123-decoder", - "repository": { - "type": "git", - "url": "git+https://github.com/eshaz/wasm-audio-decoders.git", - "directory": "src/mpg123-decoder" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/eshaz" - }, - "dependencies": { - "@wasm-audio-decoders/common": "file:./packages/wasm-audio-decoders-common" - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/index.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/index.js deleted file mode 100644 index e8453deaf..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import WASMAudioDecoderCommon from "./src/WASMAudioDecoderCommon.js"; -import WASMAudioDecoderWorker from "./src/WASMAudioDecoderWorker.js"; -import { assignNames } from "./src/utilities.js"; - -export { WASMAudioDecoderCommon, WASMAudioDecoderWorker, assignNames }; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/package.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/package.json deleted file mode 100644 index ff17d72b8..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@wasm-audio-decoders/common", - "version": "9.0.5", - "description": "Web Assembly Audio Decoders Common", - "module": "index.js", - "main": "index.js", - "types": "types.d.ts", - "sideEffects": false, - "files": [ - "index.js", - "types.d.ts", - "src/*" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/eshaz/wasm-audio-decoders.git" - }, - "type": "module", - "author": { - "name": "Ethan Halsall", - "email": "ethanhalsall@pm.me" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/eshaz/wasm-audio-decoders/issues" - }, - "homepage": "https://github.com/eshaz/wasm-audio-decoders/tree/master/src/common", - "dependencies": { - "@eshaz/web-worker": "1.2.2", - "simple-yenc": "^1.0.4" - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderCommon.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderCommon.js deleted file mode 100644 index be0b3d9bf..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderCommon.js +++ /dev/null @@ -1,231 +0,0 @@ -import { decode } from "simple-yenc"; - -export default function WASMAudioDecoderCommon() { - // setup static methods - const uint8Array = Uint8Array; - const float32Array = Float32Array; - - if (!WASMAudioDecoderCommon.modules) { - Object.defineProperties(WASMAudioDecoderCommon, { - modules: { - value: new WeakMap(), - }, - - setModule: { - value(Ref, module) { - WASMAudioDecoderCommon.modules.set(Ref, Promise.resolve(module)); - }, - }, - - getModule: { - value(Ref, wasmString) { - let module = WASMAudioDecoderCommon.modules.get(Ref); - - if (!module) { - if (!wasmString) { - wasmString = Ref.wasm; - module = WASMAudioDecoderCommon.inflateDynEncodeString( - wasmString, - ).then((data) => WebAssembly.compile(data)); - } else { - module = WebAssembly.compile(decode(wasmString)); - } - - WASMAudioDecoderCommon.modules.set(Ref, module); - } - - return module; - }, - }, - - concatFloat32: { - value(buffers, length) { - let ret = new float32Array(length), - i = 0, - offset = 0; - - while (i < buffers.length) { - ret.set(buffers[i], offset); - offset += buffers[i++].length; - } - - return ret; - }, - }, - - getDecodedAudio: { - value: (errors, channelData, samplesDecoded, sampleRate, bitDepth) => ({ - errors, - channelData, - samplesDecoded, - sampleRate, - bitDepth, - }), - }, - - getDecodedAudioMultiChannel: { - value( - errors, - input, - channelsDecoded, - samplesDecoded, - sampleRate, - bitDepth, - ) { - let channelData = [], - i, - j; - - for (i = 0; i < channelsDecoded; i++) { - const channel = []; - for (j = 0; j < input.length; ) channel.push(input[j++][i] || []); - channelData.push( - WASMAudioDecoderCommon.concatFloat32(channel, samplesDecoded), - ); - } - - return WASMAudioDecoderCommon.getDecodedAudio( - errors, - channelData, - samplesDecoded, - sampleRate, - bitDepth, - ); - }, - }, - - /* - ****************** - * Compression Code - ****************** - */ - - inflateDynEncodeString: { - value(source) { - source = decode(source); - - return new Promise((resolve) => { - // prettier-ignore - const puffString = String.raw`dynEncode0114db91da9bu‡Â*t“““t“““““t““““$#“U¤¤“U¤¤3ÂyÂĠ„‰zzss|yu„svu‡yÚ&ˆ“4<054<,5T44^T44<(6U~J(44< ~A544U~6J0444ˆ†545 444J0444‰J,4U“4ˆU“‡…Ã’“7U45“4U4Z“4U4U^/6545T4T44BUˆ~64CU~O4U54U~5 U5T4B4Z!4U~5U5U5T4U~6U4ZTU5U5T44~4O4U2ZTU5T44Z!4B6T44Uˆ~64B6U~O44Uˆ~4O4U~54U~5 44~C4~54U~5 44~5454Uˆ4B6Ub!444~UO4U~5 “U5“4U4ZTUŠ#44U$4†64<4~B6^“4<444~Uˆ~B4U~54Uˆ544~544~Uˆ5 µ“Uä#UJUè#5TT4U0ZTTUX5U5T4T4Uà#~4OU4U $~Cˆ4~54U~5 T44$6U\!TTT4UaT4<6T4<64<Z!44~4N4<U~5 4U”Z!4U±_TUŠ#44U•Uˆ6UÔ~B$544$6U\!4Uˆ6U¤#~B44Uä#~B$~64<6_TU‰#444U”~B~6~54<Y!44<_!T4Y!4<64~444~AN44<U~6J4U5 44J4U”[!U#44UŠO4U~54U~5 U54 “7U6844J44J 4UJ4UJ04VK(44<J44<J$4U´~54U~5 4U¤~5!TTT4U$5"U“5TTTTTTT4U$"4VK,U54<(6U~64<$6_!4< 64~6A54A544U~6#J(UÂ’54A4U‡[!44J(44#~A4Uˆ6U“‡UŠUÂ…[!44†64~64_!4<64~54<6T4<4]TU5 T4Y!44~44~AN4U~54U~54U5 44J(44J UÄA!U5U”#UôJU"UÔJUœ#UÔ"JU˜#U´"JT4U´ZTU5T4UôZTU5T4UDZTU5T4U$[T44~UO4U~5 UÔUô4U~U´$.U5T4UP[T4U~4~UO4U~5 U˜#<Uœ#<4U~U2$.UÄUN 44 ~UO4U~5 44!~UO4U~5 4U~4~UO4U~5 44J44J(U5 44U¤~J@44Uä~J<44UD~J844U~J44U$54U$5U‘54U$54U1^4U1^†!4U•~54U~5U”54U~6U4U^/65T4T4U$54U~4BUˆ~4O4U54U~5 UU'464U'_/54UˆU”~5T4T4U~4BUˆ~UO4U54U~5 UÂ54Uä~4U¤~4U~U'$!44~5U5T44\T44U<~$6U\!4U#aT4U~4Uˆ~4O4U~5 U5U5U5TTT4U$"4YTUÂ5 4Uˆ4~C5U5 U5U5444$4~64~\TUÂŽ5 4U~4Uˆ~5T4Y!44O4U~54U~54U5 4CYTU‹5 4Uä~4U¤~4U~4$6TUÂ54U\!44Bæ4Bä~[!4U~4UD~4U~4Uˆ~4$6TUÂŒ54U\!44B†4B„~[!44U<~4U4~$5 4U"U˜#$544"†Y!454U^!44<J44<(J454U~84­U”N!#%'+/37?GOWgw‡—·×÷Uä;U”9$%& !"#`; - - WASMAudioDecoderCommon.getModule(WASMAudioDecoderCommon, puffString) - .then((wasm) => WebAssembly.instantiate(wasm, {})) - .then(({ exports }) => { - // required for minifiers that mangle the __heap_base property - const instanceExports = new Map(Object.entries(exports)); - - const puff = instanceExports.get("puff"); - const memory = instanceExports.get("memory")["buffer"]; - const dataArray = new uint8Array(memory); - const heapView = new DataView(memory); - - let heapPos = instanceExports.get("__heap_base"); - - // source length - const sourceLength = source.length; - const sourceLengthPtr = heapPos; - heapPos += 4; - heapView.setInt32(sourceLengthPtr, sourceLength, true); - - // source data - const sourcePtr = heapPos; - heapPos += sourceLength; - dataArray.set(source, sourcePtr); - - // destination length - const destLengthPtr = heapPos; - heapPos += 4; - heapView.setInt32( - destLengthPtr, - dataArray.byteLength - heapPos, - true, - ); - - // destination data fills in the rest of the heap - puff(heapPos, destLengthPtr, sourcePtr, sourceLengthPtr); - - resolve( - dataArray.slice( - heapPos, - heapPos + heapView.getInt32(destLengthPtr, true), - ), - ); - }); - }); - }, - }, - }); - } - - Object.defineProperty(this, "wasm", { - enumerable: true, - get: () => this._wasm, - }); - - this.getOutputChannels = (outputData, channelsDecoded, samplesDecoded) => { - let output = [], - i = 0; - - while (i < channelsDecoded) - output.push( - outputData.slice( - i * samplesDecoded, - i++ * samplesDecoded + samplesDecoded, - ), - ); - - return output; - }; - - this.allocateTypedArray = (len, TypedArray, setPointer = true) => { - const ptr = this._wasm.malloc(TypedArray.BYTES_PER_ELEMENT * len); - if (setPointer) this._pointers.add(ptr); - - return { - ptr: ptr, - len: len, - buf: new TypedArray(this._wasm.HEAP, ptr, len), - }; - }; - - this.free = () => { - this._pointers.forEach((ptr) => { - this._wasm.free(ptr); - }); - this._pointers.clear(); - }; - - this.codeToString = (ptr) => { - const characters = [], - heap = new Uint8Array(this._wasm.HEAP); - for (let character = heap[ptr]; character !== 0; character = heap[++ptr]) - characters.push(character); - - return String.fromCharCode.apply(null, characters); - }; - - this.addError = ( - errors, - message, - frameLength, - frameNumber, - inputBytes, - outputSamples, - ) => { - errors.push({ - message: message, - frameLength: frameLength, - frameNumber: frameNumber, - inputBytes: inputBytes, - outputSamples: outputSamples, - }); - }; - - this.instantiate = (_EmscriptenWASM, _module) => { - if (_module) WASMAudioDecoderCommon.setModule(_EmscriptenWASM, _module); - this._wasm = new _EmscriptenWASM(WASMAudioDecoderCommon).instantiate(); - this._pointers = new Set(); - - return this._wasm.ready.then(() => this); - }; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderWorker.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderWorker.js deleted file mode 100644 index 97ea3f066..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/WASMAudioDecoderWorker.js +++ /dev/null @@ -1,129 +0,0 @@ -import NodeWorker from "@eshaz/web-worker"; -import WASMAudioDecoderCommon from "./WASMAudioDecoderCommon.js"; - -const getWorker = () => globalThis.Worker || NodeWorker; - -export default class WASMAudioDecoderWorker extends getWorker() { - constructor(options, name, Decoder, EmscriptenWASM) { - if (!WASMAudioDecoderCommon.modules) new WASMAudioDecoderCommon(); - - let source = WASMAudioDecoderCommon.modules.get(Decoder); - - if (!source) { - let type = "text/javascript", - isNode, - webworkerSourceCode = - "'use strict';" + - // dependencies need to be manually resolved when stringifying this function - `(${((_Decoder, _WASMAudioDecoderCommon, _EmscriptenWASM) => { - // We're in a Web Worker - - // setup Promise that will be resolved once the WebAssembly Module is received - let decoder, - moduleResolve, - modulePromise = new Promise((resolve) => { - moduleResolve = resolve; - }); - - self.onmessage = ({ data: { id, command, data } }) => { - let messagePromise = modulePromise, - messagePayload = { id }, - transferList; - - if (command === "init") { - Object.defineProperties(_Decoder, { - WASMAudioDecoderCommon: { value: _WASMAudioDecoderCommon }, - EmscriptenWASM: { value: _EmscriptenWASM }, - module: { value: data.module }, - isWebWorker: { value: true }, - }); - - decoder = new _Decoder(data.options); - moduleResolve(); - } else if (command === "free") { - decoder.free(); - } else if (command === "ready") { - messagePromise = messagePromise.then(() => decoder.ready); - } else if (command === "reset") { - messagePromise = messagePromise.then(() => decoder.reset()); - } else { - // "decode": - // "decodeFrame": - // "decodeFrames": - Object.assign( - messagePayload, - decoder[command]( - // detach buffers - Array.isArray(data) - ? data.map((data) => new Uint8Array(data)) - : new Uint8Array(data), - ), - ); - // The "transferList" parameter transfers ownership of channel data to main thread, - // which avoids copying memory. - transferList = messagePayload.channelData - ? messagePayload.channelData.map((channel) => channel.buffer) - : []; - } - - messagePromise.then(() => - self.postMessage(messagePayload, transferList), - ); - }; - }).toString()})(${Decoder}, ${WASMAudioDecoderCommon}, ${EmscriptenWASM})`; - - try { - isNode = typeof process.versions.node !== "undefined"; - } catch {} - - source = isNode - ? `data:${type};base64,${Buffer.from(webworkerSourceCode).toString( - "base64", - )}` - : URL.createObjectURL(new Blob([webworkerSourceCode], { type })); - - WASMAudioDecoderCommon.modules.set(Decoder, source); - } - - super(source, { name }); - - this._id = Number.MIN_SAFE_INTEGER; - this._enqueuedOperations = new Map(); - - this.onmessage = ({ data }) => { - const { id, ...rest } = data; - this._enqueuedOperations.get(id)(rest); - this._enqueuedOperations.delete(id); - }; - - new EmscriptenWASM(WASMAudioDecoderCommon).getModule().then((module) => { - this.postToDecoder("init", { module, options }); - }); - } - - async postToDecoder(command, data) { - return new Promise((resolve) => { - this.postMessage({ - command, - id: this._id, - data, - }); - - this._enqueuedOperations.set(this._id++, resolve); - }); - } - - get ready() { - return this.postToDecoder("ready"); - } - - async free() { - await this.postToDecoder("free").finally(() => { - this.terminate(); - }); - } - - async reset() { - await this.postToDecoder("reset"); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/README b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/README deleted file mode 100644 index 74b184cdb..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/README +++ /dev/null @@ -1,67 +0,0 @@ -This copy of puff has been altered from the original to be inlined into this library. - -See the original code for puff here: https://github.com/madler/zlib/tree/master/contrib/puff - -Puff -- A Simple Inflate -3 Mar 2003 -Mark Adler -madler@alumni.caltech.edu - -What this is -- - -puff.c provides the routine puff() to decompress the deflate data format. It -does so more slowly than zlib, but the code is about one-fifth the size of the -inflate code in zlib, and written to be very easy to read. - -Why I wrote this -- - -puff.c was written to document the deflate format unambiguously, by virtue of -being working C code. It is meant to supplement RFC 1951, which formally -describes the deflate format. I have received many questions on details of the -deflate format, and I hope that reading this code will answer those questions. -puff.c is heavily commented with details of the deflate format, especially -those little nooks and cranies of the format that might not be obvious from a -specification. - -puff.c may also be useful in applications where code size or memory usage is a -very limited resource, and speed is not as important. - -How to use it -- - -Well, most likely you should just be reading puff.c and using zlib for actual -applications, but if you must ... - -Include puff.h in your code, which provides this prototype: - -int puff(unsigned char *dest, /* pointer to destination pointer */ - unsigned long *destlen, /* amount of output space */ - unsigned char *source, /* pointer to source data pointer */ - unsigned long *sourcelen); /* amount of input available */ - -Then you can call puff() to decompress a deflate stream that is in memory in -its entirety at source, to a sufficiently sized block of memory for the -decompressed data at dest. puff() is the only external symbol in puff.c The -only C library functions that puff.c needs are setjmp() and longjmp(), which -are used to simplify error checking in the code to improve readabilty. puff.c -does no memory allocation, and uses less than 2K bytes off of the stack. - -If destlen is not enough space for the uncompressed data, then inflate will -return an error without writing more than destlen bytes. Note that this means -that in order to decompress the deflate data successfully, you need to know -the size of the uncompressed data ahead of time. - -If needed, puff() can determine the size of the uncompressed data with no -output space. This is done by passing dest equal to (unsigned char *)0. Then -the initial value of *destlen is ignored and *destlen is set to the length of -the uncompressed data. So if the size of the uncompressed data is not known, -then two passes of puff() can be used--first to determine the size, and second -to do the actual inflation after allocating the appropriate memory. Not -pretty, but it works. (This is one of the reasons you should be using zlib.) - -The deflate format is self-terminating. If the deflate stream does not end -in *sourcelen bytes, puff() will return an error without reading at or past -endsource. - -On return, *sourcelen is updated to the amount of input data consumed, and -*destlen is updated to the size of the uncompressed data. See the comments -in puff.c for the possible return codes for puff(). diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/build_puff.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/build_puff.js deleted file mode 100644 index 7115d32ef..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/build_puff.js +++ /dev/null @@ -1,31 +0,0 @@ -import fs from "fs"; -import { dynamicEncode } from "simple-yenc"; - -const puffWasmPath = "src/common/src/puff/Puff.wasm"; -const wasmCommonPath = "src/common/src/WASMAudioDecoderCommon.js"; - -const puffWasm = fs.readFileSync(puffWasmPath); - -const puffEncoded = dynamicEncode(puffWasm, "`"); - -const wasmCommon = fs.readFileSync(wasmCommonPath).toString(); - -const puffString = wasmCommon.match(/const puffString = String.raw`.*`;/s)[0]; - -const wasmStartIdx = wasmCommon.indexOf(puffString); -const wasmEndIdx = wasmStartIdx + puffString.length; - -// Concatenate the strings as buffers to preserve extended ascii -const wasmCommonWithPuff = Buffer.concat( - [ - wasmCommon.substring(0, wasmStartIdx), - "const puffString = String.raw`", - puffEncoded, - "`;", - wasmCommon.substring(wasmEndIdx), - ].map((string) => Buffer.from(string, { encoding: "binary" })), -); - -fs.writeFileSync(wasmCommonPath, wasmCommonWithPuff, { encoding: "binary" }); - -console.log(puffWasm.length); diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.c b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.c deleted file mode 100644 index 4e9bc7b99..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.c +++ /dev/null @@ -1,863 +0,0 @@ -/* - * puff.c - * Copyright (C) 2002-2013 Mark Adler - * For conditions of distribution and use, see copyright notice in puff.h - * version 2.3, 21 Jan 2013 - * - * puff.c is a simple inflate written to be an unambiguous way to specify the - * deflate format. It is not written for speed but rather simplicity. As a - * side benefit, this code might actually be useful when small code is more - * important than speed, such as bootstrap applications. For typical deflate - * data, zlib's inflate() is about four times as fast as puff(). zlib's - * inflate compiles to around 20K on my machine, whereas puff.c compiles to - * around 4K on my machine (a PowerPC using GNU cc). If the faster decode() - * function here is used, then puff() is only twice as slow as zlib's - * inflate(). - * - * All dynamically allocated memory comes from the stack. The stack required - * is less than 2K bytes. This code is compatible with 16-bit int's and - * assumes that long's are at least 32 bits. puff.c uses the short data type, - * assumed to be 16 bits, for arrays in order to conserve memory. The code - * works whether integers are stored big endian or little endian. - * - * In the comments below are "Format notes" that describe the inflate process - * and document some of the less obvious aspects of the format. This source - * code is meant to supplement RFC 1951, which formally describes the deflate - * format: - * - * http://www.zlib.org/rfc-deflate.html - */ - -/* - * Change history: - * - * 1.0 10 Feb 2002 - First version - * 1.1 17 Feb 2002 - Clarifications of some comments and notes - * - Update puff() dest and source pointers on negative - * errors to facilitate debugging deflators - * - Remove longest from struct huffman -- not needed - * - Simplify offs[] index in construct() - * - Add input size and checking, using longjmp() to - * maintain easy readability - * - Use short data type for large arrays - * - Use pointers instead of long to specify source and - * destination sizes to avoid arbitrary 4 GB limits - * 1.2 17 Mar 2002 - Add faster version of decode(), doubles speed (!), - * but leave simple version for readabilty - * - Make sure invalid distances detected if pointers - * are 16 bits - * - Fix fixed codes table error - * - Provide a scanning mode for determining size of - * uncompressed data - * 1.3 20 Mar 2002 - Go back to lengths for puff() parameters [Gailly] - * - Add a puff.h file for the interface - * - Add braces in puff() for else do [Gailly] - * - Use indexes instead of pointers for readability - * 1.4 31 Mar 2002 - Simplify construct() code set check - * - Fix some comments - * - Add FIXLCODES #define - * 1.5 6 Apr 2002 - Minor comment fixes - * 1.6 7 Aug 2002 - Minor format changes - * 1.7 3 Mar 2003 - Added test code for distribution - * - Added zlib-like license - * 1.8 9 Jan 2004 - Added some comments on no distance codes case - * 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland] - * - Catch missing end-of-block symbol error - * 2.0 25 Jul 2008 - Add #define to permit distance too far back - * - Add option in TEST code for puff to write the data - * - Add option in TEST code to skip input bytes - * - Allow TEST code to read from piped stdin - * 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers - * - Avoid unsigned comparisons for even happier compilers - * 2.2 25 Apr 2010 - Fix bug in variable initializations [Oberhumer] - * - Add const where appropriate [Oberhumer] - * - Split if's and ?'s for coverage testing - * - Break out test code to separate file - * - Move NIL to puff.h - * - Allow incomplete code only if single code length is 1 - * - Add full code coverage test to Makefile - * 2.3 21 Jan 2013 - Check for invalid code length codes in dynamic blocks - */ - -//#include /* for setjmp(), longjmp(), and jmp_buf */ -#include "puff.h" /* prototype for puff() */ - -#define local static /* for local function definitions */ - -/* - * Maximums for allocations and loops. It is not useful to change these -- - * they are fixed by the deflate format. - */ -#define MAXBITS 15 /* maximum bits in a code */ -#define MAXLCODES 286 /* maximum number of literal/length codes */ -#define MAXDCODES 30 /* maximum number of distance codes */ -#define MAXCODES (MAXLCODES+MAXDCODES) /* maximum codes lengths to read */ -#define FIXLCODES 288 /* number of fixed literal/length codes */ - -/* input and output state */ -struct state { - /* output state */ - unsigned char *out; /* output buffer */ - unsigned long outlen; /* available space at out */ - unsigned long outcnt; /* bytes written to out so far */ - - /* input state */ - const unsigned char *in; /* input buffer */ - unsigned long inlen; /* available input at in */ - unsigned long incnt; /* bytes read so far */ - int bitbuf; /* bit buffer */ - int bitcnt; /* number of bits in bit buffer */ - - /* input limit error return state for bits() and decode() */ -// jmp_buf env; -}; - -/* - * Return need bits from the input stream. This always leaves less than - * eight bits in the buffer. bits() works properly for need == 0. - * - * Format notes: - * - * - Bits are stored in bytes from the least significant bit to the most - * significant bit. Therefore bits are dropped from the bottom of the bit - * buffer, using shift right, and new bytes are appended to the top of the - * bit buffer, using shift left. - */ -local int bits(struct state *s, int need) -{ - long val; /* bit accumulator (can use up to 20 bits) */ - - /* load at least need bits into val */ - val = s->bitbuf; - while (s->bitcnt < need) { -// if (s->incnt == s->inlen) -// longjmp(s->env, 1); /* out of input */ - val |= (long)(s->in[s->incnt++]) << s->bitcnt; /* load eight bits */ - s->bitcnt += 8; - } - - /* drop need bits and update buffer, always zero to seven bits left */ - s->bitbuf = (int)(val >> need); - s->bitcnt -= need; - - /* return need bits, zeroing the bits above that */ - return (int)(val & ((1L << need) - 1)); -} - -/* - * Process a stored block. - * - * Format notes: - * - * - After the two-bit stored block type (00), the stored block length and - * stored bytes are byte-aligned for fast copying. Therefore any leftover - * bits in the byte that has the last bit of the type, as many as seven, are - * discarded. The value of the discarded bits are not defined and should not - * be checked against any expectation. - * - * - The second inverted copy of the stored block length does not have to be - * checked, but it's probably a good idea to do so anyway. - * - * - A stored block can have zero length. This is sometimes used to byte-align - * subsets of the compressed data for random access or partial recovery. - */ -local int stored(struct state *s) -{ - unsigned len; /* length of stored block */ - - /* discard leftover bits from current byte (assumes s->bitcnt < 8) */ - s->bitbuf = 0; - s->bitcnt = 0; - - /* get length and check against its one's complement */ - if (s->incnt + 4 > s->inlen) - return 2; /* not enough input */ - len = s->in[s->incnt++]; - len |= s->in[s->incnt++] << 8; - if (s->in[s->incnt++] != (~len & 0xff) || - s->in[s->incnt++] != ((~len >> 8) & 0xff)) - return -2; /* didn't match complement! */ - - /* copy len bytes from in to out */ - if (s->incnt + len > s->inlen) - return 2; /* not enough input */ - if (s->out != NIL) { - if (s->outcnt + len > s->outlen) - return 1; /* not enough output space */ - while (len--) - s->out[s->outcnt++] = s->in[s->incnt++]; - } - else { /* just scanning */ - s->outcnt += len; - s->incnt += len; - } - - /* done with a valid stored block */ - return 0; -} - -/* - * Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of - * each length, which for a canonical code are stepped through in order. - * symbol[] are the symbol values in canonical order, where the number of - * entries is the sum of the counts in count[]. The decoding process can be - * seen in the function decode() below. - */ -struct huffman { - short *count; /* number of symbols of each length */ - short *symbol; /* canonically ordered symbols */ -}; - -/* - * Decode a code from the stream s using huffman table h. Return the symbol or - * a negative value if there is an error. If all of the lengths are zero, i.e. - * an empty code, or if the code is incomplete and an invalid code is received, - * then -10 is returned after reading MAXBITS bits. - * - * Format notes: - * - * - The codes as stored in the compressed data are bit-reversed relative to - * a simple integer ordering of codes of the same lengths. Hence below the - * bits are pulled from the compressed data one at a time and used to - * build the code value reversed from what is in the stream in order to - * permit simple integer comparisons for decoding. A table-based decoding - * scheme (as used in zlib) does not need to do this reversal. - * - * - The first code for the shortest length is all zeros. Subsequent codes of - * the same length are simply integer increments of the previous code. When - * moving up a length, a zero bit is appended to the code. For a complete - * code, the last code of the longest length will be all ones. - * - * - Incomplete codes are handled by this decoder, since they are permitted - * in the deflate format. See the format notes for fixed() and dynamic(). - */ -#ifdef SLOW -local int decode(struct state *s, const struct huffman *h) -{ - int len; /* current number of bits in code */ - int code; /* len bits being decoded */ - int first; /* first code of length len */ - int count; /* number of codes of length len */ - int index; /* index of first code of length len in symbol table */ - - code = first = index = 0; - for (len = 1; len <= MAXBITS; len++) { - code |= bits(s, 1); /* get next bit */ - count = h->count[len]; - if (code - count < first) /* if length len, return symbol */ - return h->symbol[index + (code - first)]; - index += count; /* else update for next length */ - first += count; - first <<= 1; - code <<= 1; - } - return -10; /* ran out of codes */ -} - -/* - * A faster version of decode() for real applications of this code. It's not - * as readable, but it makes puff() twice as fast. And it only makes the code - * a few percent larger. - */ -#else /* !SLOW */ -local int decode(struct state *s, const struct huffman *h) -{ - int len; /* current number of bits in code */ - int code; /* len bits being decoded */ - int first; /* first code of length len */ - int count; /* number of codes of length len */ - int index; /* index of first code of length len in symbol table */ - int bitbuf; /* bits from stream */ - int left; /* bits left in next or left to process */ - short *next; /* next number of codes */ - - bitbuf = s->bitbuf; - left = s->bitcnt; - code = first = index = 0; - len = 1; - next = h->count + 1; - while (1) { - while (left--) { - code |= bitbuf & 1; - bitbuf >>= 1; - count = *next++; - if (code - count < first) { /* if length len, return symbol */ - s->bitbuf = bitbuf; - s->bitcnt = (s->bitcnt - len) & 7; - return h->symbol[index + (code - first)]; - } - index += count; /* else update for next length */ - first += count; - first <<= 1; - code <<= 1; - len++; - } - left = (MAXBITS+1) - len; - if (left == 0) - break; -// if (s->incnt == s->inlen) -// longjmp(s->env, 1); /* out of input */ - bitbuf = s->in[s->incnt++]; - if (left > 8) - left = 8; - } - return -10; /* ran out of codes */ -} -#endif /* SLOW */ - -/* - * Given the list of code lengths length[0..n-1] representing a canonical - * Huffman code for n symbols, construct the tables required to decode those - * codes. Those tables are the number of codes of each length, and the symbols - * sorted by length, retaining their original order within each length. The - * return value is zero for a complete code set, negative for an over- - * subscribed code set, and positive for an incomplete code set. The tables - * can be used if the return value is zero or positive, but they cannot be used - * if the return value is negative. If the return value is zero, it is not - * possible for decode() using that table to return an error--any stream of - * enough bits will resolve to a symbol. If the return value is positive, then - * it is possible for decode() using that table to return an error for received - * codes past the end of the incomplete lengths. - * - * Not used by decode(), but used for error checking, h->count[0] is the number - * of the n symbols not in the code. So n - h->count[0] is the number of - * codes. This is useful for checking for incomplete codes that have more than - * one symbol, which is an error in a dynamic block. - * - * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS - * This is assured by the construction of the length arrays in dynamic() and - * fixed() and is not verified by construct(). - * - * Format notes: - * - * - Permitted and expected examples of incomplete codes are one of the fixed - * codes and any code with a single symbol which in deflate is coded as one - * bit instead of zero bits. See the format notes for fixed() and dynamic(). - * - * - Within a given code length, the symbols are kept in ascending order for - * the code bits definition. - */ -local int construct(struct huffman *h, const short *length, int n) -{ - int symbol; /* current symbol when stepping through length[] */ - int len; /* current length when stepping through h->count[] */ - int left; /* number of possible codes left of current length */ - short offs[MAXBITS+1]; /* offsets in symbol table for each length */ - - /* count number of codes of each length */ - for (len = 0; len <= MAXBITS; len++) - h->count[len] = 0; - for (symbol = 0; symbol < n; symbol++) - (h->count[length[symbol]])++; /* assumes lengths are within bounds */ - if (h->count[0] == n) /* no codes! */ - return 0; /* complete, but decode() will fail */ - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; /* one possible code of zero length */ - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; /* one more bit, double codes left */ - left -= h->count[len]; /* deduct count from possible codes */ - if (left < 0) - return left; /* over-subscribed--return negative */ - } /* left > 0 means incomplete */ - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) - offs[len + 1] = offs[len] + h->count[len]; - - /* - * put symbols in table sorted by length, by symbol order within each - * length - */ - for (symbol = 0; symbol < n; symbol++) - if (length[symbol] != 0) - h->symbol[offs[length[symbol]]++] = symbol; - - /* return zero for complete set, positive for incomplete set */ - return left; -} - -/* - * Decode literal/length and distance codes until an end-of-block code. - * - * Format notes: - * - * - Compressed data that is after the block type if fixed or after the code - * description if dynamic is a combination of literals and length/distance - * pairs terminated by and end-of-block code. Literals are simply Huffman - * coded bytes. A length/distance pair is a coded length followed by a - * coded distance to represent a string that occurs earlier in the - * uncompressed data that occurs again at the current location. - * - * - Literals, lengths, and the end-of-block code are combined into a single - * code of up to 286 symbols. They are 256 literals (0..255), 29 length - * symbols (257..285), and the end-of-block symbol (256). - * - * - There are 256 possible lengths (3..258), and so 29 symbols are not enough - * to represent all of those. Lengths 3..10 and 258 are in fact represented - * by just a length symbol. Lengths 11..257 are represented as a symbol and - * some number of extra bits that are added as an integer to the base length - * of the length symbol. The number of extra bits is determined by the base - * length symbol. These are in the static arrays below, lens[] for the base - * lengths and lext[] for the corresponding number of extra bits. - * - * - The reason that 258 gets its own symbol is that the longest length is used - * often in highly redundant files. Note that 258 can also be coded as the - * base value 227 plus the maximum extra value of 31. While a good deflate - * should never do this, it is not an error, and should be decoded properly. - * - * - If a length is decoded, including its extra bits if any, then it is - * followed a distance code. There are up to 30 distance symbols. Again - * there are many more possible distances (1..32768), so extra bits are added - * to a base value represented by the symbol. The distances 1..4 get their - * own symbol, but the rest require extra bits. The base distances and - * corresponding number of extra bits are below in the static arrays dist[] - * and dext[]. - * - * - Literal bytes are simply written to the output. A length/distance pair is - * an instruction to copy previously uncompressed bytes to the output. The - * copy is from distance bytes back in the output stream, copying for length - * bytes. - * - * - Distances pointing before the beginning of the output data are not - * permitted. - * - * - Overlapped copies, where the length is greater than the distance, are - * allowed and common. For example, a distance of one and a length of 258 - * simply copies the last byte 258 times. A distance of four and a length of - * twelve copies the last four bytes three times. A simple forward copy - * ignoring whether the length is greater than the distance or not implements - * this correctly. You should not use memcpy() since its behavior is not - * defined for overlapped arrays. You should not use memmove() or bcopy() - * since though their behavior -is- defined for overlapping arrays, it is - * defined to do the wrong thing in this case. - */ -local void build_bits_base(short *bits, short *base, int delta, int first) { - /* build bits table */ - for (int i = 0; i < delta; ++i) bits[i] = 0; - for (int i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta; - - /* build base table */ - for (int sum = first, i = 0; i < 30; ++i) { - base[i] = sum; - sum += 1 << bits[i]; - } -}; - -local int codes(struct state *s, - const struct huffman *lencode, - const struct huffman *distcode) -{ - int symbol; /* decoded symbol */ - int len; /* length for copy */ - unsigned dist; /* distance for copy */ - static short lens[29] = { /* Size base for length codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; - static short lext[29] = { /* Extra bits for length codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; -// static const short dists[30] = { /* Offset base for distance codes 0..29 */ -// 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, -// 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, -// 8193, 12289, 16385, 24577}; -// static const short dext[30] = { /* Extra bits for distance codes 0..29 */ -// 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, -// 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, -// 12, 12, 13, 13}; - -// static short lens[30]; -// static short lext[30]; -// build_bits_base(lext, lens, 4, 3); -// -// lens[29] = 0; -// lext[29] = 258; - - static short dists[30]; - static short dext[30]; - build_bits_base(dext, dists, 2, 1); - - /* decode literals and length/distance pairs */ - do { - symbol = decode(s, lencode); - if (symbol < 0) - return symbol; /* invalid symbol */ - if (symbol < 256) { /* literal: symbol is the byte */ - /* write out the literal */ - if (s->out != NIL) { - if (s->outcnt == s->outlen) - return 1; - s->out[s->outcnt] = symbol; - } - s->outcnt++; - } - else if (symbol > 256) { /* length */ - /* get and compute length */ - symbol -= 257; - if (symbol >= 29) - return -10; /* invalid fixed code */ - len = lens[symbol] + bits(s, lext[symbol]); - - /* get and check distance */ - symbol = decode(s, distcode); - if (symbol < 0) - return symbol; /* invalid symbol */ - dist = dists[symbol] + bits(s, dext[symbol]); -#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - if (dist > s->outcnt) - return -11; /* distance too far back */ -#endif - - /* copy length bytes from distance bytes back */ - if (s->out != NIL) { - if (s->outcnt + len > s->outlen) - return 1; - while (len--) { - s->out[s->outcnt] = -#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - dist > s->outcnt ? - 0 : -#endif - s->out[s->outcnt - dist]; - s->outcnt++; - } - } - else - s->outcnt += len; - } - } while (symbol != 256); /* end of block symbol */ - - /* done with a valid fixed or dynamic block */ - return 0; -} - -/* - * Process a fixed codes block. - * - * Format notes: - * - * - This block type can be useful for compressing small amounts of data for - * which the size of the code descriptions in a dynamic block exceeds the - * benefit of custom codes for that block. For fixed codes, no bits are - * spent on code descriptions. Instead the code lengths for literal/length - * codes and distance codes are fixed. The specific lengths for each symbol - * can be seen in the "for" loops below. - * - * - The literal/length code is complete, but has two symbols that are invalid - * and should result in an error if received. This cannot be implemented - * simply as an incomplete code since those two symbols are in the "middle" - * of the code. They are eight bits long and the longest literal/length\ - * code is nine bits. Therefore the code must be constructed with those - * symbols, and the invalid symbols must be detected after decoding. - * - * - The fixed distance codes also have two invalid symbols that should result - * in an error if received. Since all of the distance codes are the same - * length, this can be implemented as an incomplete code. Then the invalid - * codes are detected while decoding. - */ -local int fixed(struct state *s) -{ - static int virgin = 1; - static short lencnt[MAXBITS+1], lensym[FIXLCODES]; - static short distcnt[MAXBITS+1], distsym[MAXDCODES]; - static struct huffman lencode, distcode; - - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - int symbol; - short lengths[FIXLCODES]; - - /* construct lencode and distcode */ - lencode.count = lencnt; - lencode.symbol = lensym; - distcode.count = distcnt; - distcode.symbol = distsym; - - /* literal/length table */ - for (symbol = 0; symbol < 144; symbol++) - lengths[symbol] = 8; - for (; symbol < 256; symbol++) - lengths[symbol] = 9; - for (; symbol < 280; symbol++) - lengths[symbol] = 7; - for (; symbol < FIXLCODES; symbol++) - lengths[symbol] = 8; - construct(&lencode, lengths, FIXLCODES); - - /* distance table */ - for (symbol = 0; symbol < MAXDCODES; symbol++) - lengths[symbol] = 5; - construct(&distcode, lengths, MAXDCODES); - - /* do this just once */ - virgin = 0; - } - - /* decode data until end-of-block code */ - return codes(s, &lencode, &distcode); -} - -/* - * Process a dynamic codes block. - * - * Format notes: - * - * - A dynamic block starts with a description of the literal/length and - * distance codes for that block. New dynamic blocks allow the compressor to - * rapidly adapt to changing data with new codes optimized for that data. - * - * - The codes used by the deflate format are "canonical", which means that - * the actual bits of the codes are generated in an unambiguous way simply - * from the number of bits in each code. Therefore the code descriptions - * are simply a list of code lengths for each symbol. - * - * - The code lengths are stored in order for the symbols, so lengths are - * provided for each of the literal/length symbols, and for each of the - * distance symbols. - * - * - If a symbol is not used in the block, this is represented by a zero as - * as the code length. This does not mean a zero-length code, but rather - * that no code should be created for this symbol. There is no way in the - * deflate format to represent a zero-length code. - * - * - The maximum number of bits in a code is 15, so the possible lengths for - * any code are 1..15. - * - * - The fact that a length of zero is not permitted for a code has an - * interesting consequence. Normally if only one symbol is used for a given - * code, then in fact that code could be represented with zero bits. However - * in deflate, that code has to be at least one bit. So for example, if - * only a single distance base symbol appears in a block, then it will be - * represented by a single code of length one, in particular one 0 bit. This - * is an incomplete code, since if a 1 bit is received, it has no meaning, - * and should result in an error. So incomplete distance codes of one symbol - * should be permitted, and the receipt of invalid codes should be handled. - * - * - It is also possible to have a single literal/length code, but that code - * must be the end-of-block code, since every dynamic block has one. This - * is not the most efficient way to create an empty block (an empty fixed - * block is fewer bits), but it is allowed by the format. So incomplete - * literal/length codes of one symbol should also be permitted. - * - * - If there are only literal codes and no lengths, then there are no distance - * codes. This is represented by one distance code with zero bits. - * - * - The list of up to 286 length/literal lengths and up to 30 distance lengths - * are themselves compressed using Huffman codes and run-length encoding. In - * the list of code lengths, a 0 symbol means no code, a 1..15 symbol means - * that length, and the symbols 16, 17, and 18 are run-length instructions. - * Each of 16, 17, and 18 are follwed by extra bits to define the length of - * the run. 16 copies the last length 3 to 6 times. 17 represents 3 to 10 - * zero lengths, and 18 represents 11 to 138 zero lengths. Unused symbols - * are common, hence the special coding for zero lengths. - * - * - The symbols for 0..18 are Huffman coded, and so that code must be - * described first. This is simply a sequence of up to 19 three-bit values - * representing no code (0) or the code length for that symbol (1..7). - * - * - A dynamic block starts with three fixed-size counts from which is computed - * the number of literal/length code lengths, the number of distance code - * lengths, and the number of code length code lengths (ok, you come up with - * a better name!) in the code descriptions. For the literal/length and - * distance codes, lengths after those provided are considered zero, i.e. no - * code. The code length code lengths are received in a permuted order (see - * the order[] array below) to make a short code length code length list more - * likely. As it turns out, very short and very long codes are less likely - * to be seen in a dynamic code description, hence what may appear initially - * to be a peculiar ordering. - * - * - Given the number of literal/length code lengths (nlen) and distance code - * lengths (ndist), then they are treated as one long list of nlen + ndist - * code lengths. Therefore run-length coding can and often does cross the - * boundary between the two sets of lengths. - * - * - So to summarize, the code description at the start of a dynamic block is - * three counts for the number of code lengths for the literal/length codes, - * the distance codes, and the code length codes. This is followed by the - * code length code lengths, three bits each. This is used to construct the - * code length code which is used to read the remainder of the lengths. Then - * the literal/length code lengths and distance lengths are read as a single - * set of lengths using the code length codes. Codes are constructed from - * the resulting two sets of lengths, and then finally you can start - * decoding actual compressed data in the block. - * - * - For reference, a "typical" size for the code description in a dynamic - * block is around 80 bytes. - */ -local int dynamic(struct state *s) -{ - int nlen, ndist, ncode; /* number of lengths in descriptor */ - int index; /* index of lengths[] */ - int err; /* construct() return value */ - short lengths[MAXCODES]; /* descriptor code lengths */ - short lencnt[MAXBITS+1], lensym[MAXLCODES]; /* lencode memory */ - short distcnt[MAXBITS+1], distsym[MAXDCODES]; /* distcode memory */ - struct huffman lencode, distcode; /* length and distance codes */ - static const short order[19] = /* permutation of code length codes */ - {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - - /* construct lencode and distcode */ - lencode.count = lencnt; - lencode.symbol = lensym; - distcode.count = distcnt; - distcode.symbol = distsym; - - /* get number of lengths in each table, check lengths */ - nlen = bits(s, 5) + 257; - ndist = bits(s, 5) + 1; - ncode = bits(s, 4) + 4; - if (nlen > MAXLCODES || ndist > MAXDCODES) - return -3; /* bad counts */ - - /* read code length code lengths (really), missing lengths are zero */ - for (index = 0; index < ncode; index++) - lengths[order[index]] = bits(s, 3); - for (; index < 19; index++) - lengths[order[index]] = 0; - - /* build huffman table for code lengths codes (use lencode temporarily) */ - err = construct(&lencode, lengths, 19); - if (err != 0) /* require complete code set here */ - return -4; - - /* read length/literal and distance code length tables */ - index = 0; - while (index < nlen + ndist) { - int symbol; /* decoded value */ - int len; /* last length to repeat */ - - symbol = decode(s, &lencode); - if (symbol < 0) - return symbol; /* invalid symbol */ - if (symbol < 16) /* length in 0..15 */ - lengths[index++] = symbol; - else { /* repeat instruction */ - len = 0; /* assume repeating zeros */ - if (symbol == 16) { /* repeat last length 3..6 times */ - if (index == 0) - return -5; /* no last length! */ - len = lengths[index - 1]; /* last length */ - symbol = 3 + bits(s, 2); - } - else if (symbol == 17) /* repeat zero 3..10 times */ - symbol = 3 + bits(s, 3); - else /* == 18, repeat zero 11..138 times */ - symbol = 11 + bits(s, 7); - if (index + symbol > nlen + ndist) - return -6; /* too many lengths! */ - while (symbol--) /* repeat last or zero symbol times */ - lengths[index++] = len; - } - } - - /* check for end-of-block code -- there better be one! */ - if (lengths[256] == 0) - return -9; - - /* build huffman table for literal/length codes */ - err = construct(&lencode, lengths, nlen); - if (err && (err < 0 || nlen != lencode.count[0] + lencode.count[1])) - return -7; /* incomplete code ok only for single length 1 code */ - - /* build huffman table for distance codes */ - err = construct(&distcode, lengths + nlen, ndist); - if (err && (err < 0 || ndist != distcode.count[0] + distcode.count[1])) - return -8; /* incomplete code ok only for single length 1 code */ - - /* decode data until end-of-block code */ - return codes(s, &lencode, &distcode); -} - -/* - * Inflate source to dest. On return, destlen and sourcelen are updated to the - * size of the uncompressed data and the size of the deflate data respectively. - * On success, the return value of puff() is zero. If there is an error in the - * source data, i.e. it is not in the deflate format, then a negative value is - * returned. If there is not enough input available or there is not enough - * output space, then a positive error is returned. In that case, destlen and - * sourcelen are not updated to facilitate retrying from the beginning with the - * provision of more input data or more output space. In the case of invalid - * inflate data (a negative error), the dest and source pointers are updated to - * facilitate the debugging of deflators. - * - * puff() also has a mode to determine the size of the uncompressed output with - * no output written. For this dest must be (unsigned char *)0. In this case, - * the input value of *destlen is ignored, and on return *destlen is set to the - * size of the uncompressed output. - * - * The return codes are: - * - * 2: available inflate data did not terminate - * 1: output space exhausted before completing inflate - * 0: successful inflate - * -1: invalid block type (type == 3) - * -2: stored block length did not match one's complement - * -3: dynamic block code description: too many length or distance codes - * -4: dynamic block code description: code lengths codes incomplete - * -5: dynamic block code description: repeat lengths with no first length - * -6: dynamic block code description: repeat more than specified lengths - * -7: dynamic block code description: invalid literal/length code lengths - * -8: dynamic block code description: invalid distance code lengths - * -9: dynamic block code description: missing end-of-block code - * -10: invalid literal/length or distance code in fixed or dynamic block - * -11: distance is too far back in fixed or dynamic block - * - * Format notes: - * - * - Three bits are read for each block to determine the kind of block and - * whether or not it is the last block. Then the block is decoded and the - * process repeated if it was not the last block. - * - * - The leftover bits in the last byte of the deflate data after the last - * block (if it was a fixed or dynamic block) are undefined and have no - * expected values to check. - */ -int puff(unsigned char *dest, /* pointer to destination pointer */ - unsigned long *destlen, /* amount of output space */ - const unsigned char *source, /* pointer to source data pointer */ - unsigned long *sourcelen) /* amount of input available */ -{ - struct state s; /* input/output state */ - int last, type; /* block information */ - int err; /* return value */ - - /* initialize output state */ - s.out = dest; - s.outlen = *destlen; /* ignored if dest is NIL */ - s.outcnt = 0; - - /* initialize input state */ - s.in = source; - s.inlen = *sourcelen; - s.incnt = 0; - s.bitbuf = 0; - s.bitcnt = 0; - - /* return if bits() or decode() tries to read past available input */ -// if (setjmp(s.env) != 0) /* if came back here via longjmp() */ -// err = 2; /* then skip do-loop, return error */ -// else { - /* process blocks until last block or error */ - do { - last = bits(&s, 1); /* one if last block */ - type = bits(&s, 2); /* block type 0..3 */ - err = type == 0 ? - stored(&s) : - (type == 1 ? - fixed(&s) : - (type == 2 ? - dynamic(&s) : - -1)); /* type == 3, invalid */ - if (err != 0) - break; /* return with error */ - } while (!last); -// } - - /* update the lengths and return */ - if (err <= 0) { - *destlen = s.outcnt; - *sourcelen = s.incnt; - } - return err; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.h b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.h deleted file mode 100644 index e23a24543..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/puff/puff.h +++ /dev/null @@ -1,35 +0,0 @@ -/* puff.h - Copyright (C) 2002-2013 Mark Adler, all rights reserved - version 2.3, 21 Jan 2013 - - This software is provided 'as-is', without any express or implied - warranty. In no event will the author be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Mark Adler madler@alumni.caltech.edu - */ - - -/* - * See puff.c for purpose and usage. - */ -#ifndef NIL -# define NIL ((unsigned char *)0) /* for no output option */ -#endif - -int puff(unsigned char *dest, /* pointer to destination pointer */ - unsigned long *destlen, /* amount of output space */ - const unsigned char *source, /* pointer to source data pointer */ - unsigned long *sourcelen); /* amount of input available */ diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/utilities.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/utilities.js deleted file mode 100644 index 183314fcb..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/src/utilities.js +++ /dev/null @@ -1,3 +0,0 @@ -export const assignNames = (Class, name) => { - Object.defineProperty(Class, "name", { value: name }); -}; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/types.d.ts b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/types.d.ts deleted file mode 100644 index dbc827214..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common/types.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface DecodeError { - message: string; - frameLength: number; - frameNumber: number; - inputBytes: number; - outputSamples: number; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/rollup.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/rollup.json deleted file mode 100644 index 164d7d456..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/rollup.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "external": ["@eshaz/web-worker"], - "output": { - "format": "umd", - "name": "mpg123-decoder", - "globals": { - "@eshaz/web-worker": "Worker" - } - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/EmscriptenWasm.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/EmscriptenWasm.js deleted file mode 100644 index 1ba066ec56c753dfc97ed54027359bd52213ce31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82580 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 diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fetch.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fetch.js deleted file mode 100644 index b81143333..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fetch.js +++ /dev/null @@ -1,221 +0,0 @@ -import WASMAudioDecoderCommon from "@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js"; - -import EmscriptenWASM from "./EmscriptenWasm.js"; - -import wasmAudioDecoderCommonUrl from './wasm-audio-decoder-common.wasm'; -import emscriptenWasmUrl from './emscripten-wasm.wasm'; - -export default function MPEGDecoder(options = {}) { - // injects dependencies when running as a web worker - // async - this._init = () => { - return Promise.resolve(null) - .then(async () => { - const common = new this._WASMAudioDecoderCommon(); - const [ - wasmAudioDecoderCommon, - emscriptenWasm, - ] = await Promise.all([ - (async () => { - const res = await fetch(wasmAudioDecoderCommonUrl); - return await WebAssembly.compileStreaming(res); - })(), - (async () => { - const res = await fetch(emscriptenWasmUrl); - return await WebAssembly.compileStreaming(res); - })(), - ]); - this._WASMAudioDecoderCommon.setModule(this._WASMAudioDecoderCommon, wasmAudioDecoderCommon); - this._WASMAudioDecoderCommon.setModule(this._EmscriptenWASM, emscriptenWasm); - return await common.instantiate(this._EmscriptenWASM, this._module); - }) - .then((common) => { - this._common = common; - - this._sampleRate = 0; - this._inputBytes = 0; - this._outputSamples = 0; - this._frameNumber = 0; - - this._input = this._common.allocateTypedArray( - this._inputSize, - Uint8Array, - ); - - this._output = this._common.allocateTypedArray( - this._outputSize, - Float32Array, - ); - - const decoderPtr = this._common.allocateTypedArray(1, Uint32Array); - this._samplesDecodedPtr = this._common.allocateTypedArray( - 1, - Uint32Array, - ); - this._sampleRatePtr = this._common.allocateTypedArray(1, Uint32Array); - this._errorStringPtr = this._common.allocateTypedArray(1, Uint32Array); - - const error = this._common.wasm.mpeg_frame_decoder_create( - decoderPtr.ptr, - options.enableGapless === false ? 0 : 1, // default to enabled - ); - - if (error) { - throw Error(this._getErrorMessage(error)); - } - - this._decoder = decoderPtr.buf[0]; - }); - }; - - Object.defineProperty(this, "ready", { - enumerable: true, - get: () => this._ready, - }); - - this._getErrorMessage = (error) => - error + " " + this._common.codeToString(this._errorStringPtr.buf[0]); - - // async - this.reset = () => { - this.free(); - return this._init(); - }; - - this.free = () => { - this._common.wasm.mpeg_frame_decoder_destroy(this._decoder); - this._common.wasm.free(this._decoder); - - this._common.free(); - }; - - this.decode = (data) => { - let output = [], - errors = [], - samples = 0; - - if (!(data instanceof Uint8Array)) - throw Error( - "Data to decode must be Uint8Array. Instead got " + typeof data, - ); - - feed: for ( - let dataOffset = 0, dataChunkLength = 0; - dataOffset < data.length; - dataOffset += dataChunkLength - ) { - const dataChunk = data.subarray(dataOffset, this._input.len + dataOffset); - dataChunkLength = dataChunk.length; - this._inputBytes += dataChunkLength; - - this._input.buf.set(dataChunk); - - // feed data in chunks as large as the input buffer - let error = this._common.wasm.mpeg_decoder_feed( - this._decoder, - this._input.ptr, - dataChunkLength, - ); - - if (error === -10) { - continue feed; // MPG123_NEED_MORE - } - - // decode data in chunks as large as the input buffer - read: while (true) { - this._samplesDecodedPtr.buf[0] = 0; - - error = this._common.wasm.mpeg_decoder_read( - this._decoder, - this._output.ptr, - this._output.len, - this._samplesDecodedPtr.ptr, - this._sampleRatePtr.ptr, - this._errorStringPtr.ptr, - ); - - const samplesDecoded = this._samplesDecodedPtr.buf[0]; - this._outputSamples += samplesDecoded; - - if (samplesDecoded) { - samples += samplesDecoded; - output.push([ - this._output.buf.slice(0, samplesDecoded), - this._output.buf.slice(samplesDecoded, samplesDecoded * 2), - ]); - } - - if (error == -11) { - continue read; // MPG123_NEW_FORMAT, usually the start of a new stream - } else if (error === -10) { - continue feed; // MPG123_NEED_MORE - } else if (error) { - const message = this._getErrorMessage(error); - console.error("mpg123-decoder: " + message); - - this._common.addError( - errors, - message, - 0, - this._frameNumber, - this._inputBytes, - this._outputSamples, - ); - } - } - } - - return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel( - errors, - output, - 2, - samples, - this._sampleRatePtr.buf[0], - ); - }; - - this.decodeFrame = (mpegFrame) => { - const decoded = this.decode(mpegFrame); - this._frameNumber++; - return decoded; - }; - - this.decodeFrames = (mpegFrames) => { - let output = [], - errors = [], - samples = 0, - i = 0; - - while (i < mpegFrames.length) { - const decoded = this.decodeFrame(mpegFrames[i++]); - - output.push(decoded.channelData); - errors = errors.concat(decoded.errors); - samples += decoded.samplesDecoded; - } - - return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel( - errors, - output, - 2, - samples, - this._sampleRatePtr.buf[0], - ); - }; - - // constructor - - // injects dependencies when running as a web worker - this._isWebWorker = MPEGDecoder.isWebWorker; - this._WASMAudioDecoderCommon = - MPEGDecoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon; - this._EmscriptenWASM = MPEGDecoder.EmscriptenWASM || EmscriptenWASM; - this._module = MPEGDecoder.module; - - this._inputSize = 2 ** 16; - this._outputSize = 2889 * 16 * 2; - - this._ready = this._init(); - - return this; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fs.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fs.js deleted file mode 100644 index 9fa1b85ad..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.fs.js +++ /dev/null @@ -1,216 +0,0 @@ -import WASMAudioDecoderCommon from "@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js"; - -import EmscriptenWASM from "./EmscriptenWasm.js"; - -import path from 'path'; -import fs from 'fs'; - -const loadWasm = p => { - const b = fs.readFileSync(p); - const m = new WebAssembly.Module(b); - return m; -}; - -let dirname = path.dirname(new URL(import.meta.url).pathname); -const wasmAudioDecoderCommon = loadWasm(path.join(dirname, '/wasm-audio-decoder-common.wasm')); -const emscriptenWasm = loadWasm(path.join(dirname, '/emscripten-wasm.wasm')); - -export default function MPEGDecoder(options = {}) { - // injects dependencies when running as a web worker - // async - this._init = () => { - const common = new this._WASMAudioDecoderCommon(); - this._WASMAudioDecoderCommon.setModule(this._WASMAudioDecoderCommon, wasmAudioDecoderCommon); - this._WASMAudioDecoderCommon.setModule(this._EmscriptenWASM, emscriptenWasm); - return common - .instantiate(this._EmscriptenWASM, this._module) - .then((common) => { - this._common = common; - - this._sampleRate = 0; - this._inputBytes = 0; - this._outputSamples = 0; - this._frameNumber = 0; - - this._input = this._common.allocateTypedArray( - this._inputSize, - Uint8Array, - ); - - this._output = this._common.allocateTypedArray( - this._outputSize, - Float32Array, - ); - - const decoderPtr = this._common.allocateTypedArray(1, Uint32Array); - this._samplesDecodedPtr = this._common.allocateTypedArray( - 1, - Uint32Array, - ); - this._sampleRatePtr = this._common.allocateTypedArray(1, Uint32Array); - this._errorStringPtr = this._common.allocateTypedArray(1, Uint32Array); - - const error = this._common.wasm.mpeg_frame_decoder_create( - decoderPtr.ptr, - options.enableGapless === false ? 0 : 1, // default to enabled - ); - - if (error) { - throw Error(this._getErrorMessage(error)); - } - - this._decoder = decoderPtr.buf[0]; - }); - }; - - Object.defineProperty(this, "ready", { - enumerable: true, - get: () => this._ready, - }); - - this._getErrorMessage = (error) => - error + " " + this._common.codeToString(this._errorStringPtr.buf[0]); - - // async - this.reset = () => { - this.free(); - return this._init(); - }; - - this.free = () => { - this._common.wasm.mpeg_frame_decoder_destroy(this._decoder); - this._common.wasm.free(this._decoder); - - this._common.free(); - }; - - this.decode = (data) => { - let output = [], - errors = [], - samples = 0; - - if (!(data instanceof Uint8Array)) - throw Error( - "Data to decode must be Uint8Array. Instead got " + typeof data, - ); - - feed: for ( - let dataOffset = 0, dataChunkLength = 0; - dataOffset < data.length; - dataOffset += dataChunkLength - ) { - const dataChunk = data.subarray(dataOffset, this._input.len + dataOffset); - dataChunkLength = dataChunk.length; - this._inputBytes += dataChunkLength; - - this._input.buf.set(dataChunk); - - // feed data in chunks as large as the input buffer - let error = this._common.wasm.mpeg_decoder_feed( - this._decoder, - this._input.ptr, - dataChunkLength, - ); - - if (error === -10) { - continue feed; // MPG123_NEED_MORE - } - - // decode data in chunks as large as the input buffer - read: while (true) { - this._samplesDecodedPtr.buf[0] = 0; - - error = this._common.wasm.mpeg_decoder_read( - this._decoder, - this._output.ptr, - this._output.len, - this._samplesDecodedPtr.ptr, - this._sampleRatePtr.ptr, - this._errorStringPtr.ptr, - ); - - const samplesDecoded = this._samplesDecodedPtr.buf[0]; - this._outputSamples += samplesDecoded; - - if (samplesDecoded) { - samples += samplesDecoded; - output.push([ - this._output.buf.slice(0, samplesDecoded), - this._output.buf.slice(samplesDecoded, samplesDecoded * 2), - ]); - } - - if (error == -11) { - continue read; // MPG123_NEW_FORMAT, usually the start of a new stream - } else if (error === -10) { - continue feed; // MPG123_NEED_MORE - } else if (error) { - const message = this._getErrorMessage(error); - console.error("mpg123-decoder: " + message); - - this._common.addError( - errors, - message, - 0, - this._frameNumber, - this._inputBytes, - this._outputSamples, - ); - } - } - } - - return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel( - errors, - output, - 2, - samples, - this._sampleRatePtr.buf[0], - ); - }; - - this.decodeFrame = (mpegFrame) => { - const decoded = this.decode(mpegFrame); - this._frameNumber++; - return decoded; - }; - - this.decodeFrames = (mpegFrames) => { - let output = [], - errors = [], - samples = 0, - i = 0; - - while (i < mpegFrames.length) { - const decoded = this.decodeFrame(mpegFrames[i++]); - - output.push(decoded.channelData); - errors = errors.concat(decoded.errors); - samples += decoded.samplesDecoded; - } - - return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel( - errors, - output, - 2, - samples, - this._sampleRatePtr.buf[0], - ); - }; - - // constructor - - // injects dependencies when running as a web worker - this._isWebWorker = MPEGDecoder.isWebWorker; - this._WASMAudioDecoderCommon = - MPEGDecoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon; - this._EmscriptenWASM = MPEGDecoder.EmscriptenWASM || EmscriptenWASM; - this._module = MPEGDecoder.module; - - this._inputSize = 2 ** 16; - this._outputSize = 2889 * 16 * 2; - - this._ready = this._init(); - - return this; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.js deleted file mode 100644 index e8ffbbdb7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoder.js +++ /dev/null @@ -1,206 +0,0 @@ -import WASMAudioDecoderCommon from "@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js"; - -import EmscriptenWASM from "./EmscriptenWasm.js"; - -import wasmAudioDecoderCommon from './wasm-audio-decoder-common.wasm'; -import emscriptenWasm from './emscripten-wasm.wasm'; - -export default function MPEGDecoder(options = {}) { - // injects dependencies when running as a web worker - // async - this._init = () => { - const common = new this._WASMAudioDecoderCommon(); - this._WASMAudioDecoderCommon.setModule(this._WASMAudioDecoderCommon, wasmAudioDecoderCommon); - this._WASMAudioDecoderCommon.setModule(this._EmscriptenWASM, emscriptenWasm); - return common - .instantiate(this._EmscriptenWASM, this._module) - .then((common) => { - this._common = common; - - this._sampleRate = 0; - this._inputBytes = 0; - this._outputSamples = 0; - this._frameNumber = 0; - - this._input = this._common.allocateTypedArray( - this._inputSize, - Uint8Array, - ); - - this._output = this._common.allocateTypedArray( - this._outputSize, - Float32Array, - ); - - const decoderPtr = this._common.allocateTypedArray(1, Uint32Array); - this._samplesDecodedPtr = this._common.allocateTypedArray( - 1, - Uint32Array, - ); - this._sampleRatePtr = this._common.allocateTypedArray(1, Uint32Array); - this._errorStringPtr = this._common.allocateTypedArray(1, Uint32Array); - - const error = this._common.wasm.mpeg_frame_decoder_create( - decoderPtr.ptr, - options.enableGapless === false ? 0 : 1, // default to enabled - ); - - if (error) { - throw Error(this._getErrorMessage(error)); - } - - this._decoder = decoderPtr.buf[0]; - }); - }; - - Object.defineProperty(this, "ready", { - enumerable: true, - get: () => this._ready, - }); - - this._getErrorMessage = (error) => - error + " " + this._common.codeToString(this._errorStringPtr.buf[0]); - - // async - this.reset = () => { - this.free(); - return this._init(); - }; - - this.free = () => { - this._common.wasm.mpeg_frame_decoder_destroy(this._decoder); - this._common.wasm.free(this._decoder); - - this._common.free(); - }; - - this.decode = (data) => { - let output = [], - errors = [], - samples = 0; - - if (!(data instanceof Uint8Array)) - throw Error( - "Data to decode must be Uint8Array. Instead got " + typeof data, - ); - - feed: for ( - let dataOffset = 0, dataChunkLength = 0; - dataOffset < data.length; - dataOffset += dataChunkLength - ) { - const dataChunk = data.subarray(dataOffset, this._input.len + dataOffset); - dataChunkLength = dataChunk.length; - this._inputBytes += dataChunkLength; - - this._input.buf.set(dataChunk); - - // feed data in chunks as large as the input buffer - let error = this._common.wasm.mpeg_decoder_feed( - this._decoder, - this._input.ptr, - dataChunkLength, - ); - - if (error === -10) { - continue feed; // MPG123_NEED_MORE - } - - // decode data in chunks as large as the input buffer - read: while (true) { - this._samplesDecodedPtr.buf[0] = 0; - - error = this._common.wasm.mpeg_decoder_read( - this._decoder, - this._output.ptr, - this._output.len, - this._samplesDecodedPtr.ptr, - this._sampleRatePtr.ptr, - this._errorStringPtr.ptr, - ); - - const samplesDecoded = this._samplesDecodedPtr.buf[0]; - this._outputSamples += samplesDecoded; - - if (samplesDecoded) { - samples += samplesDecoded; - output.push([ - this._output.buf.slice(0, samplesDecoded), - this._output.buf.slice(samplesDecoded, samplesDecoded * 2), - ]); - } - - if (error == -11) { - continue read; // MPG123_NEW_FORMAT, usually the start of a new stream - } else if (error === -10) { - continue feed; // MPG123_NEED_MORE - } else if (error) { - const message = this._getErrorMessage(error); - console.error("mpg123-decoder: " + message); - - this._common.addError( - errors, - message, - 0, - this._frameNumber, - this._inputBytes, - this._outputSamples, - ); - } - } - } - - return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel( - errors, - output, - 2, - samples, - this._sampleRatePtr.buf[0], - ); - }; - - this.decodeFrame = (mpegFrame) => { - const decoded = this.decode(mpegFrame); - this._frameNumber++; - return decoded; - }; - - this.decodeFrames = (mpegFrames) => { - let output = [], - errors = [], - samples = 0, - i = 0; - - while (i < mpegFrames.length) { - const decoded = this.decodeFrame(mpegFrames[i++]); - - output.push(decoded.channelData); - errors = errors.concat(decoded.errors); - samples += decoded.samplesDecoded; - } - - return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel( - errors, - output, - 2, - samples, - this._sampleRatePtr.buf[0], - ); - }; - - // constructor - - // injects dependencies when running as a web worker - this._isWebWorker = MPEGDecoder.isWebWorker; - this._WASMAudioDecoderCommon = - MPEGDecoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon; - this._EmscriptenWASM = MPEGDecoder.EmscriptenWASM || EmscriptenWASM; - this._module = MPEGDecoder.module; - - this._inputSize = 2 ** 16; - this._outputSize = 2889 * 16 * 2; - - this._ready = this._init(); - - return this; -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoderWebWorker.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoderWebWorker.js deleted file mode 100644 index ebacd33b6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/MPEGDecoderWebWorker.js +++ /dev/null @@ -1,21 +0,0 @@ -import { WASMAudioDecoderWorker } from "@wasm-audio-decoders/common"; -import EmscriptenWASM from "./EmscriptenWasm.js"; -import MPEGDecoder from "./MPEGDecoder.js"; - -export default class MPEGDecoderWebWorker extends WASMAudioDecoderWorker { - constructor(options) { - super(options, "mpg123-decoder", MPEGDecoder, EmscriptenWASM); - } - - async decode(data) { - return this.postToDecoder("decode", data); - } - - async decodeFrame(data) { - return this.postToDecoder("decodeFrame", data); - } - - async decodeFrames(data) { - return this.postToDecoder("decodeFrames", data); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-post.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-post.js deleted file mode 100644 index dca1e2a83..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-post.js +++ /dev/null @@ -1,11 +0,0 @@ -this.ready = new Promise((resolve) => { - ready = resolve; -}).then(() => { - this.HEAP = wasmMemory.buffer; - this.malloc = _malloc; - this.free = _free; - this.mpeg_decoder_feed = _mpeg_decoder_feed; - this.mpeg_decoder_read = _mpeg_decoder_read; - this.mpeg_frame_decoder_create = _mpeg_frame_decoder_create; - this.mpeg_frame_decoder_destroy = _mpeg_frame_decoder_destroy; -}); diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-pre.js b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-pre.js deleted file mode 100644 index 8999b37d2..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-pre.js +++ /dev/null @@ -1 +0,0 @@ -Module = {}; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-wasm.wasm b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/emscripten-wasm.wasm deleted file mode 100644 index 90cd9943726848c00cce626c543726cba8d6e9c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111742 zcmb@v3z%I;b?3Vu=Y9HdT54G>wQSek7C~xBwg5*Kj)S^7!j_-NARLpMJ28(0r`r&> zEPG7S>OMx25xFKPk_--El14C}JQ?d=eF?$N1)?S)#N;}2MZ&`aPNED+aK2#@al-^N z0qg$$tM)m4+Lj%YM0TIEcRg0ETD5A`TB}yoiQatIJK`vc;0V91!gtvol&zlgNixp?-rcyGM-wu;JG$r8B~E!(@Q@Dk5ZB$=6u zXY@Ej>6xN5E$=PLs>vC{W5!yFZY!xBrBIXlv__G=O4w@%?^VmON~A@>Ii(oRLT?Tv z)hh}CGK!K7)%eZvo1>V|w?uk=YgFO$ZI<%W_WU#U{Pt)?`l0xtIIbsYwc1}Fs8{1? zFuI`GYONfp46W*q2bWb>$D@7Cc%a%yk~m%yEsN?G#uuegd~rQaTs_U2jW~|;zPOqU zC24#~x!xbg)wNNQM#*5xM=7c`qFNlKNm_~e23|Hi-25SdisK~eOXH}qJgP)-t;}dO zD3nB{QkmpZDUC|y_|ACq=5i&D+etgA)S#n3`M!Fy`to{wdlJPz8~yuuGTIwYMUD85 zIEvp9&BpJH=Hj1=+HrhmbYEP5eH{6?dD+kZ!pwW(H~qvo3M{dE49mkNC|G#J?OLj*rAYb2NT1{y_Xe$nq=khvJ|8)%e5le~5oAJ`mp@ zzdPO+?~fb*BpyE zTN=M4@~x>nUK{zjEK$AI&Ha&!TbD{r zGy5tjGn$yYBE1s`$(H1HzDh233GH2x-s|TEo31nw&t%{PI$5f(S{5hc0pIdYS}D8I z-n>k$bn1~e@t(T!@yRR(vWq()truhkxa6d-D~-F<$5Sr3GK!imY5qYYDbEee(!Vp& zR9*(((!@FYw{2fW0arRO(eC`4+m|(5(#_BNC)~koC>aN_(!}P2$Njl;@pN9**Ob4n zJ$pTcyUF#C{O!wAeon1&Y7wyaYigp%w+vR%SZXRU>C>_vn`?E$L6ijz^Q4Ih( z1p(8(GT5#`gSYxE!q9+oUzy4b1l00z+e zvqU9a@?3D|0aajQEvqr0b`U9E`#OZb6(r04bTkS2{r1$1W6|b@3*0Q_T1n;CQb}XMUf3jQF?yyD>gPLU>g!!tC|qCmn+>RP)_0Az^KDecdP zX7dYNpX(S|rV=G7vz%>1c2{BO%}eN?+zyP;i+WR^1Zmbfu3{NE1p6ujWkNKa=-? zjBph8eGag~nrF)JTyo2JriP#ls`?E0EZ=2xqn(5MXZVNo3iDzi+J_v2H7Y)4p!yi) zbYj~<#tK<-KO?^F;C>`ZqL=*j7$wSPZI z@vu%GBjBa)C`dBV=jginK;A&qN6M=DXv#GDjj3_sI{$ zE}qJf>v~F%{v~qOB~N`I&XY}1Lf80;H58koC@WJdR{j^suS`PH>hu=9ke;}zPw$@G zqPk#O^0hs**xIvux2x=7pw3mN{RoZSQ}$7_c{(v1KtJ-OsXSemM0p9?r4TOiwJE)q z{p@tkjK4;mbV&R}>m4J)0+Uy^BsFGwc}v2=<6t7APiZm-y9l&dKPG|9i%SK7)N!9EKPLYV;XCN>x4mw(nWw(A2f&98lp!93CjB9v zts?LVPxF4Bz>ZcMzwV<3#k_P z=1Q7nB)yZOpiH!bSFUb0cgC?)jMOhg)0UC?@yQeSXNj?|X!}}(FO%>@USdj8jFtKX zlT<>hbbqmy2WCrPw&uIy@+?!fkf*HuoyW>-R%PH)N!-dT>3qYRv#!e1OkOX_%@oX5 znpLZ_Gm`3j)>X)r^(mH)s1=$}TA;*qAVfPc6@gAs{|1mR`SwCdt2ys*oNp)Bf<2gd z6ajkPX8w$}maldRq)Fiz*teau`YcNo&c)aFLuh5VwAIJDLcWOlhxMd1TN3rp!ljKK zy#(B%eOWmf2aR}VUU!|f%rf#yM;uaYZ|Aw)p4;UrJ57&BrR|kFIVzP`J8zV`h3*#u zmA9Km`x&UZ>xBxWP6=v1PdS1AvsBABQmD6?T}$4cr;?O{0?-TE^oXJ!TT3EZIDS#+S545mZpbvne>pR>`@31Gi7|$d&eGhCn9^P)aA!WPs|X zbih?^(Z|iBdEY3yK#7`tqj}Bv<=iXxQ_nKytnt`M!5kj8I(WFSKHxIC>KvLFZ zlm~r`6eLabQWFBnan{wm?n~FBQce7*Fij8c&l4$+EbXMF2fJ+Snx;*-ct19n;ZeF8 zJW6mD8q>ZU4FVpMLSXZw{#t~DWLO%6bxC5hf#8xLdj(S|tadl}Xa`U)&9X91Gl-GD=6b$TU(?_9d6l_PEL?d#nIoBH zbdu$k@7j%{tbsv6`!`rznNwkLO->xl8>T0Te_i9}^ZLQ8!Hi+lk5A@_)?QXr)>~G1 zCQ8ZH;k+W1L6b9TU7nZwD=rSI2Vb?krd63GE2s~qh^XRGE!ri(C>_D7MO)SM#L6um zV~F7~@l4Me4lXC&yHBG*=7FZ6%Q{m~3PFMfQGeI*py}7K&R{sx_$o_~7o!^EmUi_= z{_D~}yWJ@<`RRYc*!T1biO5K)oO(rJ90DldVJ%M)0e-Wqj!w2-qvTlYzjWr(ogEG zv3fLv5HXbKxMWDX6sIW6zFm_4hL#Z^v5QP%B$E;oO1z6PVj6(*4(H7s^+*Deh z^kvI!ZAn_;X?ROA9G*tDBqQNz&6Z?Mcye137oOH`N!Es^bz72k;c4TRWMg>Ryd~Kj zo-W^#TppgbZb`O=r>nLkSJAWasZ8TI&Vacxb^|h+F1)T^9AH=>Rzv|Y1?9xPuB4ue zXmHZCJ!I26Bg`8ALX1amKKrGrgM8!tQ_m|2E()T~D?`t-!* z2ah+uA>U;@(=|(yy)OC`L#K6~6)yH){q>LiuN0&F$D*jcjdtO&Cm7FowTnL48d29` z|ApiKV_!*zd+h(}gI_bY+CH*r`>ub=>f@b<1xOO@7^T*HYvciGr_m?T3Y192Qc>)? z+vZ!V$n3tl(nm`3pqU}Gs^Y6|~9Qp2Rj%|PWMT1YjXW^Dp^T%Ag zed5aUU%ugu|8bj&-1qPLzJKoAUz|F&J+gmix6RMbf1-JPoD>iNb_`~VfvCF2ul|t- z-t)(w1LU4>{Lz2=ZZsy4WN-h?e|qP8TSND4JGTAbKl1eTS~hCWUoc zUK_Fe#-GlEaVS=hN44VuZP)g8G{L_=7s-2=Ok8!p#&V)`u&bC|H6to?>pXKV`Uy&= zp=7#P(lj-SBIFX3ztw1miJp(Y-4smB$m4G>z_fOa;){HRbTxC}ptCL&hYvgx;YJFs z8x~Dgjl$feT?t3~H@6RKT&@Jk%f!%``*F?(*_wS1Px7@ z5nvx@)uyX9AC4p1U;@{qC`Sb^otZlZm$C{EN<8shMatRy=q=#Czmhg$zHS=z&km}H zP09Q2y$*ysux?8OtjF$@T#NnZt4Kl>TvEWFz1?7)z5Rw!e|V50BBENJJTY#4APCQhGq9!C+GZth8H{_Qs-=!CfpRyP@=4 zHx2_WH_pKf4`WzfgBz!C-{8nGhYq$RW9&)?1Ixj#1{_9iws`XHYCh^yzI^TO=9{73 z^HmGxKZ*oagp1#fSikr#S&`>aC*q(^NcC8vKwykWMYc(!<)if~gwBh(v^FfdwC;`5 znU3r_1({4*@gemlIhL1>p^PWn|9JF+r+()x`;bmIefyi=JMq8YzD;6l`+s@W1Bd?M z!e1fz*`K)o!q4ye&q%*x=w8Y8-M{`TTfe{TGvxgG=SMET@r_?n1;kk%eUwJx(N8oR zqRr+h-?+AU00|eA+{i}1wM(-gE5o16DD)QgDQ zEr^sdlO?f5w0t~IY_Tn>Ccg1b)a8GS?_gFIHBou5hc8kpmaJ0T{CtA$#cGQ-SV8Tp z$Z3c+Goq*UNlp5rJw+lnMh&V=GM9iUdVOsY6jQH7CAtouh)-H;jCpZsLJ(B&8}Od^ zilvs-J^FuwXR5NKGup_ zVO@~I-28r$#4|=rbm$Um79IW+L!c>->XLL-7uc5hZd!|!mQ`73YEf-L6Ojb{x^x$* zG0;~^N!-;!q_R+pWxktsiZqhCs!DyKC|$SuH;uY@9+jZeR#$mR{9j0UQ8U(Tx2-}& z84qx+sgBlCG~aEjSKm?npjCC-qO)i)HvZ9(fPhvSQ)S>psWP#~*~VI0dPkLs4PP}~ z^v%WHE|3HXkYF8!W>du6YPUzGeRPeU&ZN`&xJJGLMqu`OJt(_9a?Nz}KljC#p<23V zEE&)H^>tOg>~LP*s!`MHR$Q-qU7j}%=e4b<-j=#KA5iMXym>gUZbeDA)OBp(k-9eT zJDgXxqRv~Y%Ueoaldn0P4{b&9x73k*SgFJLg@^NtwldLp*`BQknJsqqc<;+s9?nO$ z!fRHgmS3#YQoibNzIrR>CNEL8oXmc=;xHR=^}{*;_is(MleWq&Kb$YyiWecm$2*n(T*h7YTM16wgsA}U-b&Ti4S?KQ6+%|Y=(H{?bR`)5Mh1xNF-!=#jt`0s_3 zl}Gaphx3i@B7Zg{^c~GFLWZqA?Dre|+#Ss~kx)D04~B&7XnyJ8!}(>0^HINGm7quS zumkvJZF@ReUU8T~8gTtb91XmJ(yxT%fL;kL2M;@7uHvbF!~x8aogF@!=ZEuGxpXYK zXY!wAz=&&0( zax@=00#o(jV5%H;t9c(ilIL!{5I(~H`7+A(!w0TOUgZcZ+$YXB>;`#n@K-&Yvu81u z+zCdqMeXHnysQC>+*Oa{Rb{U+RMrTUDjAlx&eGN?P5#OY-PjSflgkXu(Y$;lA90tu zi;lojHOPK6uN}!(GjZHHcY)iig8fkUXx@J$Z#oBCtpTq=66%MKz+Xo-pYW25C40a{ zrm?-;#>!aon|1F0NhTIRqY89pm z;46n2K>9TUM49*Yaw{*|ydQFm5zFLQ(lSsjfs%jF(k{2O%aw+{1f`*A*}aTj)EP-S zWu@9Nz~nBlw_Utwbu9`5xzC{V2?|~#GDzEMXl2l5TPsMCv(O9rJRD0m(N zrW5l$e=_(3F#1HyCrQG;GyPk#B30< zdf-s8ooktB>yk4MVs^`M&hux#qz$Dwta0m-kAEy-t zv9fV>t-!LkDrR}COO9$^o#2-#(`{T)KNKnS2>R0x#zV0jDFR5n@bFh(k`}6@Ltl>lJz?)vuv<9i{XM}fR#1p5nfV1t z)~C;WInE6|%zEGcN<4{i;$k)(rF|C2$80zs`e5w$49c1=dKU{&=(hG%Lc`DL9A0n( zauN!#8N=>4PX*L&58oiGZ(Xwg$v6iuhP3p^eb|2esT!-u_fBqP-xCJyadnsgjt8kQ zdPRC#uOa729+h-PNowb0=-nGjvlJlh^5m}`#0Dvi1_$obUpDJ7lx3K5>_2GEAkJza z!(jSvLzPVt>=U7>cfd|W@>b9U&4&%3E>3deGHHs|@?uLc5|C_SfDk(#JZ8tyf?07ttCYSUY7#-Fg88>|U!%X<<^71foqi0ks^3FwU!p zU-)u7spP1)Y9L*=a#bvtk?#(T}6Li%7^D_%XeD)RL1oDw+3dMgansQwu#@L)G zc36TSC?<{-rT&|Y8+*l?$2n7KZD{sIO*WV2ntw8w^kcFLbeNmsWdE`)$^2Jii|VAU zb;-g9a0U|w!?#|){a~EQ9nlCzW{j!C6!$_`3}W&FTMm<9UGk|18Dl>hR4UHX3b*YT!3)x^); z*Z!|QlXtp`@wrK>XIGPdB6CU&3Inp$-7Yxw8*QlcC{k8n#lCYk{r#x zn&lKYX^o~ytMwd!y;(~E_T<1E9<$qMY+f#mVcRc9_O4;Ei~N4r6FS-kB>NM^9I+?X zf5cOfFQXPY0WHsdDaK(Zj@6zd^~IK3lw1^d>`^kB{@Y*DD%JXNtzz`nc3PHT6Z!9{ zh-EV(R-B?TjbU#yjUh-X_QP^m96($U?B&_&DR?EwMmY)7qBpsgR`^v8J0E8f3~N&M{MxETVOU21g6Pq^-vf*!0e}UkElaHJM^Goxg|MSBphXZe5l)7I^dJ5N7a!n z$;XAfFNr@Er)%K}4ZDX|Bp-ed$FqNb&bZJRZ@!EJ%9q0~3clQ@FA%US2?Ir$lRI+L zcTin+IJS0aqh$evNo$!fJ-I_Wz}8(@i!z${cTQujJE6lYSE+eRXX)kJKk_&sE@&C6 z3MJy<@ZKIO-al64Gt&VnGJH6soark{Jf!y`?`X)IHP` z2u=dePQtQxAe{lv{wjb#r2wxjhjIWeDFNs40tKeFQIXD@33jkoCeDDgu zO}m7>sZcBnphE#v*vVq`rs2(9Z~k?X>&kHP0si(kaD^tWiVT5)9i(>+d*-a^hz+!Fgg}`DqvpRvrF@eR( zC$Jc$qzEjA&qC}|S@A(}H?UY3SYWZtJcT_#Xu}NMLQl^LEG~z@Vn~yyJJt!!I-;YC z#d)#`%|cv^MuI_YHn(?&tc-5R@G?*kve**CcRY8Xg+~ed3YMUN{P7GdfVJsVY@4=Q zNjfuJ>=zGqeD5ndzW0iJ?|)Y~x$|`UzQ;fRj?F*ySM1b8_HXNt&3B%Df1V}Km|ZD5 z|0(_B%LHlGXj8 zPns8?p`!pq%t=I79NW%J{+eIFlR=dKo=H{PQR-~FMNydq)Qb5}njZ6LQ=QgIz;<<& zFV>ezhz=Qqm$D(EB1edA6~;7y-&#my)pVScazXhhtZMjx)!+sIhV~&p0bZ8E2A;;( zmK;9Rg50KtU}AK4)vG~43crR81EA?IQ*`bHezU%Cw)<5(aK7_3mErR(_SFj@G@2zs z$yG9$4bcr45whmO~4g69dedlY~cU;OlX%Fu_3b(>9{JZlrLOy>HKGW2! ziF!J@QcxgOcj<^oS~h~JZK8B9WIgWSu(0jehl^I+0u25lZJ4J4lAvRk$Xd{~B%pKf3h09ALv-4X~**tw{uT7Ko-&Abni z^((9kEg$!3fz_F9KO^HM>r+Np3~*^bkFfa&aw_ZBtgmLnWNQs4916tTL3cSO>8UxWwSKSTj1dwBe z5>4@1R?TKsr>xDBI-IX6k|IoKc#bOKWxAgroH$lPR52`2w0o!j8OE?v=Lclby!>bf z%u8a?Ft>!si%ZS2dc^cBdIDB5R-@)3ZR@QI#oa;hKrxZZl>_s`rlBSVx^@52W18QZ z9gw!$@z)#!0!+fVN}6=Xp_s)D2BA8|Rv`N&2tAk&8AmgcF#hc6I7k`B0ZnwUBqh7jnnwQZ zRS2 zKa@(PxrEd2_^skk5m|6`S8|Pq?Ri@lrz9i}-Yab^K{I7K%Lr@!SVWLvreJiHBFG5~ z1+6J36Y0qr;P$;bC#4jXxc5doBNe&$FfKMrdZtPxz(gdv_$bvQtYsB`rh4sNqZCV9 z*liB%k6J_4-`WE(a;bFyp%56ZdssY3BV zBTaz8nL0@>3q?q;mn9&Ku0Pr-CUl z3&!@xI`a@!2KC`sRz|e23`5#6K3m)8@*%A0@DG-o>9hmRCPrD1=isLdEGgqIoVbZ*a02o5bGf zkYaGy;?+(RC_t5sQrNY>&)2ZNl(-rDs)d$5sutt>i!o@oW{MGLw{|r@S4m29sba_5 zTA-wS>pxTC@w2xsqBDs4&T$=%Q8nzfdvx9oKUUH#k{N|Flux{y`)htSP0Mn-ZNII zK_%uC{}w*EP}IJigB&8tGdiO!aJMxxHkCEI!+CfRI8U`(^Ln=$tB4)`;!t1Fvu*o2 z?Qj4Ii~oGdw#r?ng^f5{LPYk84!3Z`islG8lvT@dD_6JUb!D8oOMAU8^xDyDq)c5W zusJPtaKCgd4yY7wO*{`J-qfW+G3iKr=_Jo-mXl!U)^&mCwyxbRX0lG2Eus3>(EjE? z^=`*+wUt_!WYRNbPjwK`!52=1)4yU2Bt~q7ZnFWP(F&tpmP3z@cZo*EGmKw#w*~bs z4#w|q3kkOJMI~6&6yy;uV}0;9v%oOhPk zz%5rYhfiE=L6_u@!E2y>gzj+}jA)MDn4iE_TrkmiCjl|~U!1hCqZdl-6L!H-MxjX# zmMubH)eEi$TIL}f#4g--|BSyR4gQi84d=Z666NDB(K;UvV#hRK2eC^_{UyTSIsOu< zA=Y#C<~jb7QgINQ9?xCV{CYXA%P^D{gSc8IQUrH%3uBizhCbH$I6B2aINUyV5DvM{ zLAa`nF6_X2uV0F@8g^*{QoQ4rO7Kf1Z_g`%&ay`WohjP!OC|WF zln#isU*;u<*{Irm*STSC+xI`OLuh6(0XfMOBs`Om-{jn853d$ z@&pJl-J)ks;~Pk*Rpwvox=R9yuo%zJipqyX(EXob#UIdhSFoawp^lH~P=ZKVjk#lo zg`U&ju(^kWQri?&Ijc>HVFFfNgAtK;5h-jabltLbKz7M5}h4x zmfG--1-Ik(Qz-l`i0eW=cLL*=uGi(B?4^g^Z_%lJNr!T82z|0ItY>tOc3tuYJ9Db1 z10if4B}W*!L?QD@5sKf*Hubpq=wMQw8JNs+>3LVcz~{VOgLA{daJCRVL@NkbgVrXgfOPve$0fnr;v zNmmB}%!>i*z*^7=;_VcuoOo+dt)&TE^l1bix^Ki1a zC%H{A5+6#WY4LE#uEJp=p(7ME&*C!RJ=8v^+6M59JPCv{#YN4tc5lv-ns_)CYd#%! zYA%GDPj+gaetyl9y)_^2)|B@`oub{xI<-$)?TL7A-a+^frF8XDZy!**$PQKKW8yW{ zX`-XhDY;FEmxmFp z4Z9V5a-)&@sq2mMWwVaEnO2Z1={LBKxLh?%C~%WX`#Y)4S+`;a_a(lLPSWz(Tn9=U z+_W^JP~?ec1Ax}-Or`+K)-1u%4Y!;j@ zNVhSnV z{{3@Uo*hwXrU(eKI#+ZdgqcD8gfCZQhUy5S>@rB8UXKUUcSqjPMCYOls9=^C&s&wS zPHbsxz8AugusP>WuDzf{l+<3Con}!3ZXylRLZBxI{{x`-N0v4cXJ3w`NQB}p+KrXS zFz4|uo`-H8%~=S7e#5brQ>OQk5G;$PO?pR>pZ_S`hb20D6QcKw?Vh7TS}>@bA?);r zEQ_J@93ubh2S`zjk_EJ>%p+e_8HEWdOAn`Q8y`5t=uw!54_hrBp0und2~|@;p>T-j zVzb^a^rS!D^L)Ce%)=j`F374baiE=NB|Y@P0s+EI4HF9(#MZEeTPx-<+xvF{wK=(CvROU&L)QQN3;oGHM0UexJupA#pNDy=IrG+Q>AGk6NM ze=TSk9^E@B!WbMDz}klyoDW z(&lIocFO7~tc{csfqgiC(#B13uRVFlH#> z6MDi5&;=nBk3p73@DC6%!j2{CRTIlys!OOp)%;L#(C;+0OVV0p*gXMEZ7ARyi2ORy zmXLemdl-<%<7AwEslel`#-&2armgF6JWIJ=m*~b9wXf$03HVd&ghk1?{!`LsX`-mf z3?k>G#PN6+H3>M@gu4;f0a$S5frK3iEsGUX%!$q5CG8rLc*?KC%~>|6z*8kfpA;-b z8`>Y**lmjV5VEX6L8NqquyoUAu_oGVpi|~~`Jc;@;c!ItH2#Px)Zw0?Ey)cOSio(x z0-Co|wt&&{u9#%KullW%Su6BZg9N238Y*@yE6%nb&sFcbjx7S-CbRy6Bz<{h6C>F$ zKbvUO2n-`KRnUhuSpH=i=StQ9T!V4to!myymcz!G(i2@{hle_&>SW#j` z|C;Q~vhjwG#2cZ9AOuMA9{eqVDD-QHzX9_`$@ea<4ksEof=UMVFrf$q1$pDLDY2u!?${H*fvG4if!;Nf7cs2hFNMmh9gp#17a5AAXDHIn zQ0Nwq#h%um*Hhb81W7|c-GdnFZbS#w3QM;7!xd4u^f?)*qHH)7eW}qG!<=d{1#al{ zK}8IG&tCa5#<7wu_iJFkIA5jVulRq8ru@~{_BY(BK+lR>?ytOK(*OFOT9_>*2)3%} z-jSj)aZU)z^01L|)6KjEL)|!AaZpzc7u)i^Zn_njXzG4uk$9ACJ+gTUk9}CNBBUjvOzhxT2eH zn5IE)o@MLj>QNq->+Xjqqp5+cG+g`}7#^$)3=9lc^q!Q{;oAY_j;zP`ElU z+#IG1#Hjc`jjrym_bsQJXl&VP;e-QS{a9>XPY{%qWuO*uWW2PxTtNsjCgZN3f$Uq= z`@-4hki%sWQQykW+mFOi-vyl)j*$1Q=)4HRaOcG;EpOsnL_lN?M*|1NtK~2HuG`FN3t_BUK;a5*oZ(-n9bHN$#D_!^jE*s_;J%~lI zwToSiTP$?NYPTEOXQ)m@ZuQ=LH5`VNGu{we!7we{*OqjQp2F;=!)BS_wis@jvWpEqg)Fl}*wZ>m7BgzFdsKl|zorWNyyo;U~pYa9f z{huV2+Xw+jNQ(`NJ-v?D>DKFz^?g&+s*Ex&+{dgN=`@jT#gKVY(;R9bX?b+W%cy^# zj}Yye`b-0M(X`l&CDRcs5D}9yXvEQC%@7&pufYqf8Aosrl671X%y={%r)zTe<$YQ< zst6X>*Sb*=JUbwQ9Y>u){Xu>syR^mBM>qjaK^FL?|50$QsAOMgoNOBB+!6!_BN02I zNI;X3?=(bjvEkJiE=FsPH3g6k((>N7*jk;o>ArPM&^7(pNRx3Y)TaiPMYVdPR+l(!)EhjND_luatdN|PuoW`0!;RogFv0V)UKz`pJ8#yj zUN~!W^n$fsu{5i@^;hd4L*N1tFN4jfdEQnz-||8T{qWMP=YzJ@HELcZT|x7Ycy5J) z%aq|JFTUGzT$^x;_!mqt_7_({7298Aq_`3c%cI$x!?CZkVY;P>i@dnNM^|2)8sd2s$%tA_X3^wwC6f|+U>L3 z_MggFOrz#wv4S7acdqFK_`tQg@C~3r1C>^wxSgb9X@!UhbU+B-^QGd$F&E)K-WMl1Jx4nyRRF#ntpj?Wvo#UaAxt z<%Jft!NFi1q@(j`|Z{$CG28W#_*u{lEu z4B2e{eoA6J4{jR1>bI%ixhA;9vrBoRX1u?n_#%b|Hc}5_Fur z6Zl~*1pGx&?CG1KQooU!oB554iU0Hc2fp%$zxUri8nYdxCJNXu6~l0!kZ~LbGw%#L zT*eLf3Yj@2U1e6*t-0x_T`yF4)^KCY$p*JN-6PUPot`obZrMab$E()e4B6+BqMUZ? z_9+MjFP|b<6h#rj9q_<4PbF|Tju#o%xE`P%_H^5>;V&%)lN3HEAQ4JY(jC2cJ9S5| zTpon{TnnS?L2+tQQgrc)MzA7Qhjs9(TAR8x?Agt zQ32X!7}VUApdEU{C1acKr$sR7o^0Sr!ki{-sYC{pnK_yQ+_}%>Xfdq1eV?bE+xMA4 zY%rNQiT_sf$y_Yd;?e?`fAQjdx(o4M=uJUOjT0Q9tiKbk+z;Q1ITAXV^3+v+gR z%OKo}rml4CDxOn&W?=PF3NN}wmIAOt_^w@z+9Mjo%})$)4{*8{zG$rzyi8TJH-FetI%NR ziaM~^AMPnpS8D%kR}!#a5NDO83{5>9XHZbSL^&EwJB{|VrBIN(LIZaB1>wPp zM1CHvKoMRD)w(qbYO}Q|&9;Lh5zh*+ejW&j3b};@!OQ<9h#0N9*c@S7;-w*i-$&Pg z8!y!gPT;p+%KnKCCzPN;;Do9%Sa(!9bb^n@ShF}+J{6L*WmM+QU*42eW8^3R|AoM) zRwtv+GQ^l{tE(g-;<%KPmR z-7?sV9qxgeYMn1ySKxUCG7|epPdnXH*qewhYX-KU7$O5nY4b0oI4U>24-M)D99{21 z%5csK2?2~kx~WL$a?h?;SK&H!t;`lE}F`kjVC7yei) zYb`_9=-BJ!_PVz7s!PDa^*xrW>uolI2wc91hzwAtORcy^#$^0hGOqXAtnNZJXc=ab@cQv%5Nm)}gCf7w|JPg_YGFZ{ZN1QkY+< zNaE&R%<0I*c7bx~)ABqPS%*|Q!jdW8qo{jLY5U%r`;*l!?Eslm$s3haG3~Qc)37+L{?mt`2!vM!Hq!bKN^alOLJyNpaKhY#`ILc^-L-8hb`E4OtWax$riuO^?{&}obU98?UTT!0O!-M|zRGL)G z;+L_>26%U8H35hm*8G|Fhg5D%dT3f4R~TW>4t3Oa5z|ePcEQ-+0U0e-`f{WW(r3N~ za8vQsFKTXz`ts`T-MjHh$gNoN1ACZ*E4W??eTvWW?ohQEj91^7Mh%YqKL&Snar~jX zbu6qOv(080Ocy;hb?hFO6Z^^Zz+4ucllP9+PIU1f9;!uoZDQMdTy5X+U`>dHxbX@{ zN$18Z!g7lnugKxXt1S_v=InOV*b>3aF1;)o_>ssAZm7fX_EJZ>vmt7{X_{}M?QY== zdSW<`rk)P1+dcP8Ve5{MQLcT=DB=m>fUJ=eXevMX+%6n`GDUAd5qBRnB}!j}e?mn22zaG8(} zP^JF;rQ!}OuGdJ#Y8-D1Mi?)CVYR%Zj~@GkuF^#2I(^yUrRo%uprq3`7hgT91)ufc zLv*#oeH(roC#7W9Ad^KK42e>3#GbFcj?s6X_HfiLX)k$xdjuu-v{$HD&1ZFif_k5f zi-y;6>T^qdd}}0BgTdun{7|ILsh@^#us)AQV455OzAL;#&Vs zcQW`{*?jWnfFM^YB#axNs7p=p9qExwIlBmeSGxwl2z|Zm#Fpj|6{JSQ`n#SVX$fKc zx-o@E>dF}gKg*I7rG%4xm1x_zu4P}DqJ&^ryPb(A;Awl>T5$9~NZqaREHkncpaGe5y=(L0(T!PZl73}gpXwumJ zcHoQ%hAJrlBSc%_3h{log2k2GFwM40u@v=j3{OBgW{vrgD3&7`FLG%k@%u-^5@xlS zPCB<2D%c$E(^ZKJ-~9!Ht)>I75OuPj3thw6J;Hx5Nzj9YRNNzk?bx2BGJD}4-TTOB zsCg)5Nf!LHDdM6u&vv$DaUq)LhD4;Ect7$_{wWL@`Nx)X@XZ!^rX(jl44hWe)MyyV zp&z;iS26eHT}|0FiWGdsy@))t;SSw%Mf>o9?$CVGH|9H5Cf%l&-__r z$uOFPY1?jRdxsqsE=`%h@T{pt1MC9zG{9)QSOW{8f%ae5&f7p~3igI%p$$+EZ7i_N z)C-jJ1TL}$eccZ!5tiaOY#xvLA@A5(<>&iEd9LeJE*!`l(}YNN7s(QU%|v ziszL56$>AP^2qzHM?Y@8U1T8AmD73>ecX>|JxM39I%D43wKt6(7s__}wARtUD3m;+ z4NUN`=uZwmo5|WKxpt^*UiqX@pZpVOQ`Y(;6A)^zP6xu*gwnxr^OSmh2tc8_Ioa(j?9Kmc;dmTSXE`Xu7eZrn9@OuzuA5`g*;1`(Th zIMshn>s5T*bYTL0bw4Zp@`?kc8$5N0olYroSSgANCC_L*agV4&mDDzGM18g=_z0dl zL<5Co)bLZ=;*RDg?u$$7=W4V3$h+LGXK=e#840|Q#H-S>kcTVtmlc7c%!nP?g$XVD z_LE`QH4QElE_VL6#r>vV)|g*t+Jwb&vck4D2$JMX&-J+Km@Z@^hv^2fv|^c2z_bgZ zIcnX)!tmvAUmmki8p=0!&_~7a(U4*C9XhosLTuUA9=jKWzUE^E!>`xHlx~a=`#1H= zxC}R$l3QFlx|l0f#-D-tvWy3!U?;O5;^8s0+U(_!|79+pD?PAC2^pFZ$W`%Sz~ zVJ&_b-moJQfFp~^Yg<=}EXcpUiV2+;1o~1iJT~k{4MRo|e#Rih&5U0$U~Hs)2#cg` zme#?qGHyboT_Va!9!gXB*17Uc_$8y8Y)`l7uUr{Ds;GAVMa)Tpt(AlYdu8;A z;?%T0g!LGyGuBV4V5wBf9Ylt`uDV%PYLixW!`PSDmN! zid?dFm2rOTgOHS43AscY=~7hgBISQ`gBD#Qun)hmdKD zm3oP1VW?+g2y~7gS>WCgNh;STxNCZPt62>mL7VPKLZ3Ru{fCo>L8xF2xoD2t49AzD z$i-r2@r~-+K=rNJzogcYheFJxaY1h+6T7jb7Q;@$ z9s*1%_n(cRClm;Ym*KN2t1r-bf8xXxHMX^_()R0`$2lNHem;WfMiiu ziqZ-zFf=Z@BeMk&$vxvF+Z;AYVAf0@VN~ZMh$=t9*zLcVNQ_VYs<9qPX7LnY%`0fb zRB@Uw*@gg#oArr=`4XLwy~A5b7Bp-}*_k{FzE)D>1TC)^yh=5F0JYLGHWUYT3f1JA zKm$$X8e`3_bt2vpDDW}^fk!MK%m}j|l2PT!gy3dfTvoM71iR)FH`OtP2+Wfhfx{Fu zpP-{adZd}Aw=~6ENwC$Ec2RT1e?Gc~0V6Tyrq<#y@qg2KO#R>MQF^_V`CHzwNZI4J z;`W&OZ&<1sahy0(Q?)`YE$RdQ*ZTd-G&6-h1k{4VJt1~U_fv@}1LEzc5K5PVU!hoq z(Lr`Tg`q)DV>(e3%Al-ql$H}GzeKXcJVll}3bKujOv z6WJI|!IRiL`9^e7le=SX13wc$l8tm2yfL@YZP=S{xVgJs@}_aO@pnGzHXs0g=UD#A z5Ag#RuUvGyl#VGE|ZdgtNL?QX=0L zv;qIfAUb@rr{D`wazUUEw*b8m1U5)8cWf4zacYb2Q)o#3ueboXEG{bO$s~!5^>|m{ zTOv_Pso;Yrg%w2Ok9niYvKPd(oIW$jWv!S>WZ~l=FA3IV)uNFeeto{G43`!RaZ=s* zPwK`=bwely_#LSEMcmY?;sxA`SUPQf1HhP1i##c{DG`1;Bd;};U$QoGmr&pkVs|xWDH6WL{JMQ12w>V?XtV9q$-mcKHZzl52AdV`G0s~_AC|y{XUFWWW*y05 zvKT7hOkQNAUOHNNUqB2jf`jnIdthQW+0am)bJf3W32`$DNTCqUQV!Hzo0M)p|ag36qWwxP6!3$Ws z{znA;d2TrlVqHTLHDe;1q!opllIxIB=0?L^AfxusH6!tE0ZvahZ}92BJqj01Khv^YNU13CyDa%Xf`UY;!-wPvpkv)`mb>;C?ai83q1or=)cY? z5A7ZQ`S=F*xwLaW#P29w)_T1jpEFI2#fxboVriOa1SC%X71M;uE`B5*YYAcT8JjbF zEp4c1LxwEs<_qwwM}jPl+Ts&kwG&m9dOfM@UtCX0aU9pn_Lf?Dsa~%j8U{7Y@FExa zV6<@B(0@z6GgBklHN)YPZGdO${9)~6V*CbaoA}$v^B{lAc)pbH<$Q1E?-g)A+&+w# zb)5c<`s8|qEnhmu_&_*~oULI1+QswAA3y*EaRyV=40um?vnRF^pqsANVJjo*3kkWf z(=4%|$;+gw`-eC##i0;@vZ*L3UzXYJxx7^3xoQkJW}J6&Q5B%&mV6BAi}GizXH zJva~lEn##{B*RcpM$479NEzIhxRjW7!gemS-OMBejabJugD<#Ph_p5IoP{W5pK!@2 zDs)y6K1^JjhiC~AA(BdC!3wgkcqDbunlnGeMx2=0#+QmNJh~ZlBzMZqi4c#xaBf?+ zA*{774hJ0t9)~u+KMU&WP>x?1=79tLl4G3Z>!;~qlf1!x1PADhWp+Hf?!OXEIXvF} z)dUs9P-ASOD*Y9CMobOIyEN~|Cf3|aT4I6GtzjOxkzzCUZq&i(`?@ACQQ$T|=1Z8J zZlmDC<@UTT-=J)z5ba0Aw%g<`=+0MhsCw4X78+8}h>AKdT6YGt?iE@a-IyC3ok;G-KACWP z^D!T}HB%?pSF$5OpT!j-`lGD!i%1%4)JyegKGx^MY}XWbo16*}{g{fO0O~3Q9(sO( z^=Uf}2plwHXpR4GF?!mV_>5oy3>yeUiv&x+7mG}F?$jJiqNIWJ6h{4}= zqx@#&2DkFW8>AI|%L1h7CruhjxKt?3HVSq-)fywR!V$@2VY!{%2GNMfYh5U=Fpqj5 z*FC(00aXZwQw;I?z z)Ml@N&xaDLc{Yr9+tLmOh(E0SvvCf>x_C-vFe?5FK|FZ8^+pvvQ*g%9 z;*7s-+Qbz|$=y=FpuCzs<(N=- z@yS%1mcu$mLM8$#+aPCGXIXsiG?Rd@nVwN&?K$*0RF%@&$fgh%F|M4-)+Sgr@H5x= zgyp6DFI!&DFQ>G^gwS?dW%Rn-nzE%O@cc_&T0pT_TEb1#Se%@UHO+nT_x|V(|B-wt z+OjP!b&d`)SgDd(OynlAUkcceN#HKm8ee-Yo9SrN5_j-$!+&p3Te-{JhU01gooE?* z;fE?Pwu}&rx+d9Wi}WZCb;+59i$IYOblI^0%70zII@1&-gA>?}MXFe#LRVPGh`(xI zZI@T__0;=W6LcH>k|h99yJQK_>=iZf{K;tP?W&ej+|{^pxE8>?JT*B~%97fDfbI@= zAhkDk4tJ1Bu4+>=;SD)6Pa#Ey4uWF%sdI$GA9Q=^~@U zM37V`iKxO5Y?!FO5k$aIm*}qa7u_Hk=2qS_%B!7a8bpkjv}DH!3Oijz?aczQRUb|t z>zGP>jRepwVS@&F&j~liLHeF~S+a#MK-3aVo!j(r`*W8Ci^L;?3kq4OpO?En-4U7^ zS5uu8Vd)|ShcLB6TUuiPgjnU1HD-wnDA}?{M%%IvJ~vzUHyg?BRAXW_E)ftz_VA## zdoe7Sxpg>@VbXQKTwUuP9@95$EBr|E}u@QgZI&vnI2 z2YZPq8&n&B`OudIL-uj|JZYbg#bFd4mRphT%-ez-aXi7uF^)JL>YcT=pRvy~_W86f)u#TF1s-XWveO79{aBriC~y%ZKB|U6@1)2 zS-(hm%qr=o#DYQzBg&W+1BrydA7nCx(bT4&3_=EqG5NV%{%788rQwVDS?8Wa^7vu< z31uwSNs-Qd^N9<&Cva@yJ`rbEIO{z&VWetHdHv?mkItY_ zA;ggMx`ifTriA1EoD$-{<@iycz;bR{(YnP2GCEFPzlK<4E<+*2x1n5{a?AXM`cyWpsmijZ*yDqi+ ztfDumv{4Ic!!4VXeaEbU3Z}Lg+quR)*$Do-#vXPJvsEIPtC?%E9tgm6tZDpmC*rTC zylzu*CeM3kW?eJ0#>}ku%uJq}%;NRaZbVB0Ef*}3<5!{Ybyjey+0Vz>7+lQHz-WfT zwb}+=?v~SPxJz4XCTblj_m~NPN%deRl>Ess28WDr59#;pH((Gzu*b@ot=1>Y7&44) zFMw|$UOE8g0YD{HX&aD(<<^f<;Vc)p6zTKj+{WPHGS=!uM!DE!vlbrS{Wo4AQakw*Lt5@|(hOVBH1vbOCCC!~)c5>&lZw zR~|0~Pz$91YVc9E)zqJWU|6gVQMmjc1}_81WHQn`i7P-x71Eq_^*m*5raoQ}ZUMrH z>=-yU`jAGHH8UHKCk^CdvX?iD6J$Gw5ue9SW_Z{7gvBXb!!j)`r-b0pr7ZR@+Q%i8 zfRHtHh;K8FVX`jn!CwPd<;n=}D9Mi@a>m)2$Bwrp{a^~q;(iZ&D^s4AO&ZD2+pOW% zGFr5`tJ+#PtJS^ZRFP0> zW-k6xIopRTw4y&;Ik}V0p4hf#Vkj9)Umd)7f1&*X z*h3yXB{d5Y+U?t8WUQAX^@TiDUCSbLmW6(4^^R47ueHaKM6s}2B$w)}tNkY1mF>Bs zpTaoOxL0+=4sQ%UGQrz-s+#TbiHTMBcSd(%+l=U2?n%=f68piHYWz+iSJq9?DOPk{ zT}NGB-VV?&*j=}n`C29Tsud6yq67ZD=O{E~_vkhmMYG*?rO^f!47rBxoj$>Z!uu5? zARlC~=WAi)SUEvRYfsblYnW?%Vf*6(z@4dWPTl3q*W&)#-q-h+wdKZ7Q0?~rV9vRI z%qKkh_a(YYvtOIPj_iNH1k|;Ry!!BUslK+vV+xT{9qkFl(C*LKN~$fb&hN>Q&3eKQ zm9uLS!kxOZ#m+RW#gwB?k1$ccH9PMi?j7ifsf|8A{Z9^l~lRs_g)C2o9U_WaJ>D=XH zP^L>S)trxQbJn~UOZR19Cfk>(zqntZcRNK;!hg^f*Bfkhje-QViNIp`l2PhzT-Z+8 zORx5sA~?ErEwMsj<|;zJcjgvCO`J!te?e#vg<*)v1=9kC?cVfkq4zqG&DXq0Zrcy# z;xg+e0rFgy6D%lrpxEbS=5mYI6Y;fnQI7dp{@KkNb}9slA6S$QrSKWJ#dED2)&h6# zFvDvnvW-8;NNe*0=g^I4|2P+Ap?nCWgxIQG`sFt9n=ALH@=2))xhYTJx0yR|D<~A) z2op=;x3H&0a^>Z4-H?p3+8taO;{T9fr)#s)4>0Hj<-snw)|IT+^pIYIlz!nSIbrHO zn)z(LNwV`C_iqckTOi3sw@LOC65_?#mB|s@SlyA%0nTOeT9oOvUGR-u-ARvCmfr}! z!yoBOMXxIye3&9EU!;2}509b2*-6a+99f&j>gUB5ij zWBS7TS4g5!o%JI01&Qe_)CX{5y((JQGr6#^Z7=$i)=I|k)Izj(7t&*FV%5Rp7`q#G zhH8UiIttWwg|fAq?U$&^+^EEgkHgjNr&SL20%*5E6o3Mx zn&&M5w)Uk*5ZXb;v;6XDaJ@)T0RG0#MiU6b9Z+3q`l-0G|K(?O88>6gmg9zQuea^% z^pW3k*a$lJJsVANg?=nt{e7qrWnHl!Lq*&b>OJg%%At>zK1S4)6V%$)%J ze!nwlC3fy6uHt6~HU%6(vp`hiq<^)aV01UxNgll}L^BxCVAKKDZjZAC9WYmcHv5sW z1P%B8t7sU$PH7F;u5R7l;p<@1;kmR!{`U7!`3z9em-aLKV2m0tWY3+VH;kx^d(t$b ziT~yAyo3=={C(f)9noi?cxOZ>Ku3egh>1EIpEIaSh_#1AeALX1Pqceo&bphXU3lSQL zhl@=oeuv@;qTR*l5`{WSw73cqSkR5hVV+sgL3z_+@DHm?KWbxU(!!Omj7AZ3{eBJi zNAdNrTx0%Wer1hNB;66M^%{B6?|)k8l+hSW?(}bpM)Sr(#`Q(4n~tA|yos-x{#*mj z$iAJ$Q+sYIBsCcWj)ozl7C$eW+I<)2|fr}ywn;;kv>;Oe_wYjU@*O7XyokCj$o zK`CI@<+Y;fBDgN3y3?=M`C0L9QEc&+%BD7KW@RC9L#VVwg3F|}SHM*)^669RR@KCGSukqCY zYOL5-u@S6lvt}P+Th)@kQDt%nZDr|X|jD7(1JAf6P6rZA7=fcCs;UWHu#CDSo+L`K_-gWl#&d4P zsOsadkGVUVTZ3B`BRHqTe(lf8+SHyF--e2S?dx}Av%AUv_C%NH`v)8 zfzufbBA|&VtaAxq7DM9~sOPE*$0DYM1OIo@*q?HDzV_gVv94;*_BPVKp|mqfqj?EJ z1@+aq?$>0V|JVg`&LhY;?ac{?7i&wA*gJvPUIs)q9b1<)-9?@)i=@EXCUVT|WBP_o zcT^Enb)+Nb9?sxCk&3avWk`{$czL`zF8GV_us zRF;~TFfVycOiN8;s5H%t^M8MywfC7b2x^z#_uu#R`oe3^*?aA^*Lv2op4)oXv(}R2 z*aeikZfJoW3-)^Ofd}r?pO5J4c}*b&Yq#bqmc_G>=m*QRYm^LX>3y|ywhbLcqnpPc z+Ze7%-LX4B4~V{_hPAX4!%w{T_NhmeKA!Xkl|EkW6~&R2>g5sGMmK~nBGSQOWJ|X| zu?8nP(#5!d5tWX55yog@al;>28iA;FQ$Q)27Tnyj8Yx~&l;G65WQ_WTNr4+KfY++|Juf{pH zIWXLAIS+#nByO@Ig1%XCCt}M|-x4i@&6d_Dq9e~Uwi6J!bpA|*R;8Ehi)IhAaOaSam2);bFS7O$%}xwAFtMy18Y=(eJ) zxF(%yG0v`2ony6#8o=4fhh~Uh+wCwYK-)Ch%~DL3#P{tck*sQ$TEJ4%*UzwqEKm%9 z)8-gFDUlxY+doUBU(6yt8C=$vWRU)V=(FQ24LXg}D8dkI%WM0iDu~XkjqXV{2w`EZ zkZQ~1lJh#P9@hL($mWZ2(fzg2ulkBn&)A2a#u$SlER&_oK*fW?+$eoekP8!wvXn^&R%kw#|@1yya9(3Zga^QMN}m)90eK zbQL|ejJT5RQm!>TPqGdRIde~7dp$u6+RY;7ECO*o(|LhL2PC|(UduWq;8=MYb$h8P zMP+HW5>zj3Rdn>?V~LW3zN6K*KrC=h|Fxv7R%c&zN{7)^{muK}x>s>4O+!ZAlkLPY z6BjIy%K0Z2uDIyjd!0RHTM@5^WVWLnX{a*Pz%8<^(9yawKC~i6y{HxF9D7-sEi_&$;os}(!u z!}RWH*rBEjHlr$(wUm56-Ojc|v?Q$EA)V#ZL=@jUlyf;S#grVkW7n3eZ3$V{R*=Ps zqu6k=887smoUC;Ub)?w4l6gfYk_SY0vHuOnS)8^%Bf~;{dvwN$2TPq~vy;kN65Qm& zEc;021~M36%BWaq562e9L--Rv$*cHyK>RXy}%5M5{Qa}~?6)Wpba zTeF;}Ts5UdJsW@gg#S2XP#vb(O%i3wV&X)BVno?N;Ia;`I|f~$IVXM!y&q_>>8Dpwu`cP95`%Ox_y@~gtK z&{sWX<)!02PHSQ$*dC{u_V}qAA|ixM7JNERQr8fMqa99@Pn4-<|7OWA z-YD;#wmd(6?|dI6PwGE}+;yi5^=v*Gt+2aXU_Epdy|UU8gp1qayELdv(P3e*oPjxX z7DQ|PtLO>))!w8eu89-xO%mCrbYO9t(oC{VX&CgdQK^E8dg6^r2iiuZS&N}yqtbyw zU$@_=)X=KObMx#}N-b2?lQd@0a!KZ57Pc$RWql^dO%Pua=UlHHOXK^j%kEOVWs}mr z?+Il+b5)T{*RLvmTugKBIQBC1TbKe1JsCg)<F_O*{u(Th*wEZv z$x6HJ!XQ^;wqjUgs;AbRvzec#gBlk9De$;f?j#)1e+9`0nsb{2% z@D~ZQuT*6FUm{fX)X=2afa<8RgYVe3Z{)n$(TZO>BI?3&8?~{KutsfcW;!n?eTV;n zz-5GN2isRQhfVe_y<_^8Cdrh0+g;3A8SIX97oHqh{LT1dlv zSUaI*a>O;Kz_rsULWB?DGN?q7_)_o`O6kTGfh(O4l=&Tg8ttcs)=fueoP92PG>#0@ zt=(swd-0OhaPe*o7SpX~p1q`}yQll~^lq$!8-=6*g)4hjIH#1 zhj9a>413I5VI796j}Xb&$;WX{M&?ZXV@-OdDrssBO~vp~1B-28Meu)9TWa1L9D-3eH!X>D!E)0xK+Tu-5z&ur|c7R+Zp21zszl?usae6&KaU%oSgZdtuzKp>46OeI^=}?l z;{!r?P`HTn{|cdpOnxu9^*<{p(EF@h*$v^0z@W3MX3H?raNGNA)0xLdriLs^X^%$~ z-GEWf6qAn})4WDb^K{%yVN(O*sU&F7=I!tV`&*jYugGGjXdx=Y0ZuxOdMsFnjjP+6 z2d1zo^!3DCwbsUPY~%zE;NX~fJgu@Vd8HE-IB!?3SJq8fE^ewZ5*n3*!*czD-g4ed zJeSfK)`WFk((_@qy}6c|mS6#AFSB!vX=$^k2$)m_4XQxfl+^OWS!`j3*-Gt6VYQa| zA6Y839SF|ur?JqgqQ&~jG-*(-(_hy6)Ytn`hojw}z#tn6CugIyA0Kc}te!1-@b;W0 zTf-rmywQo4@{I({>Yyb#CYnRqINvB*{41w%czkM5<}kq zfd85A)TFH>K^6gmwUCJ#!;1DU?Qc(a(B0l44-}OefhzoyEFY*%&;voL3DouowdjseGdFsGr}XGE0w5Ok(7A&0a} z=8Fp(yX0BGZP3hIb(B_k;vjvAw(8jt-SQIl{#ax4x0=yJf8-q&@bd=5LR)@pwyz0Kz?iASJ z?ERW+Rf4_&poO`*4A{i9|UbIf;*=TSsFv12xx0_7f-voAa` zl-yPC2i65Ajf-wz7-2b|ab)$qwO*U8rqo>%QoCxpI1QyS8&nBpHbSJifze_n$=Ir8 zVAQRfVX#sIhJ{h?K=8r@ari$&4z_hnB~?~L{h6hHV`d?tAG6dO-oz~RABb7%``8zNa)v&hGIJ! z-m@KeXhi&BIJkWwy&0YV{ghZRH}d?DGoix4T@V(W!TC~stig(@Mf1JT0Q#)vj!VI{ zA{$iL8s?t+3VT;M;#tWMi5g=u&s({M**OlVhL44(!ElIS3BO&v`3mbxa8>yMaP=SS zb9mq5s&bRKs@x>5Dq~zBr1~LAW$A444~!%ft0BpYIw>=BCo6q0$NUgha-M(*v(nP> z+>uy5xkXe&xU02a4P|LahhIT|tP%rGwA?+5Oi~52Jn+K6C%ZQBl7t>pPI!k*n z|C>6iW@GXtp&$8by{p$*HSbBju!iZZnm#tHd4D#fN$;<-K+ea#Vv;17U87%f&O$g`ejj5Z2e$?%ivy_ZhFCbtyW04hw^UzHSoS~Z( zI77X_NvLJ87tj*(!#}9FNxm)0<>>E7W6d=WCO{|Wr)+9U5W#xHO(Ehx){jL*RBsXy z)qRN28H(OQg#%1WS!1AcVL*!pH!X1czB8@V4+Gdb{e^CojL&xq-9$Sx#7V~5ek6po zjbYW#$*IoAt&%uFB?&S%+Glhzh|nw}tAUEqN=hvr(rO8Eu?8Ao!Q%2(U_+OK@@;y46AlwY8t=y6S8)^hvzt{?$lI-K&D0Ja&B+B9BM*v8~ksO6i6 zEGeeQrUM6<6FjWR+*=*gpNfYuz)FyXVRvO5n1^>)i8^*rk$Bwdj6O|3ajPQ?H50|H z&igBm*5AUZdzyM-4p;UDZc9!x%ni`bD9-H5m0ysn)B|Tbgw;!PS=~t-4vo7+Ts$OWRdxnuf0o2V6j9WG=H8 zI!m&fBmYqNq-8B_jM8eN7d@l{c&U}gulwq%mjNPrp(?Ccx-3_D0Z=l+Sr%rO=7@e} z1~f}@?FG?mK6`dqt}cddtQ9^*g%3=iYqYfSO4ErEjM-HB0E($n=_(VjLd!K#xde@+ zjj}YIJK2pjz#yqkppefw--slUch8I=#LZ@POvkL?-NUOE9 zQA*QbgOoACJi`|K>`E>CjIn;WfKxTCTe5Tjpj*d5uSOq827Yq|qUeMt7YmR##afJ)%S%0!p81AXE#seHT=O^&qL@f*eR^ zY)B`7usZ9TO6!|ts@$kxEVZ#ul_!Zt9^`&wK<%+z$A^Y(LsrOZ?Mh$|qj*ry&>?;J z6+}8h()uhxuo4FEtry}lkY8d#O z=n>3`6QEViHrzMRW^ix!Q)mf*lQ$Igkgp!x4_ulXL_5a#5=Vx57|8=}7M0?0pP~nV zN0UC51m;OfPG6N{Cc%4USZC;kIJ00Byu-HD;Jt#IWw{z^gd4C{IFgf^#!{j^2=8pC zB;@Ed?wYVh`Sme*h4+xx_8`2E;(;nI@UNk3;PFQl$C)5&k{WK3iQ7!tyeMV6s*{=9`=ueME36rou z33nj7*LGVd0Mq2D=w-VP(K%uIs;hFr@@T!K^pF%RUmm>`zh7RQ-()s5b!V>pTAfyh z2WssGXGg!3x9)WIDXW&>lF8)lbh?mW6m4j^<&fJ7q@^kzL_6+N0hUgn8w`<~Ywh7HGam=fZJIeNK+akT>UF7!0hy zN3Lf1m*@&Xk!A`{6P2OnFH@pi(=Kw6;Jb3t-tel~>8LIooeX`tHQ)dO21(s?h0n@ zMwwDyc_FhSQHWm)9eg(rC@P}yp4P^R+;kHXYl}FzU##%hE;WHUU?o}i@JV$PvLS3`SlyhaEzBkehXx%+MXq$Z zgfL{HmUA^5O_xaD+r*BUL9#>)*S1}U>-+W0;!+gF=SLX2uwnL%%-k@#H9`Qo-yGL74t_0xpm zxze_!vBiaEnO00PsckVlya{Z2g-I)p!HcI?M38ao`i!UklPeTcvk=oLMcZPZe&Dy# zfp*@%x?*LaPG?Lit1Ut0=Bq26b;VRN+CxtZf7l+vX0==etg+k(4IikBL4xM)`gJjM z3>$8yi$Q~C7B}kRxIcj_j>r@KKQNvB$AJ)%5>i7j7&N#Dq$7Ba_YE#fDv zf~oQn@+d3X))tEaRrz3t{=^?oykj{-{3=ZZQqhmeiZyXcz4gGtew0B_+h%%zVv0=G zpEA-~R*pYt8Yk*@cwUP=-9>o?9*{9!ny?I$M7BQ2}X7R8$};*ojkNEs3Z| zNWCa70uLgZzYKu^ABL60a52(DDw4^%H`C zz?^__TUdspQ@XMwuExHnJoHRXb3bpQ&dml~hUXTSqrjgs;&WBW+Num9jkuRTePIcrZ~0 zQoh~fEf4D@{YUTHfI(6^5D#+R#lMtUgo4$f>-ho?!gG>xt zn-mcqz;z;(EUXC6t8!q9fe`iDvB)3j8}-e56&d5bv`8VaAEg?;`ciyP>5CX|v|Stw z-Ny8qt4w$%SJs>+od$XOF2_C-PGCyfnK5D&l2Rs4=~oFRJBu>Ly*eWuQ>ZP-Dy2}C zR1mjKC`wGBMY>{s7Ae^$W_-VST*vr)pAJhW9p<~Mw3~1V6SWBViuIGd?YpT?buvBc z>493nkgPbN264qxmW88Cz)L6$`GuAz8Cuk$XL7%jOB*zzo5LAdPgjUubAP*}1 zx{hCrNHs1hQ=Gz*8e*tMSwVMWKLd_QLVAH4nbrd^%esFIy|EBCTKy5t%960B=KL$7 zH9KoP0Ka2IWEIhtEJ7f?^;||}s{?kR(!*sutWC2G6%Q(v6Kf%a)B(hpq>;%H+M%5V z$4sQMVp2kwu2{2;JnwM0=2UZOn`yzpK^04?2>R5s)Ze`qip5ADYh-aeAiDz*t%07-9c6LL<)fn=zgX zXUAr7*bS;WVv478zz0VLNa|mRKx>zHGD5^JZh{b@+?7n?5M?aR@LjR)ao~XhjuFSC=R9p?Y&z2i_Rz zGz#XEbQMML!#0{mnxdSIks@lrVAO&DB9*wjErt+eGf@*NC0$JA*2P!=DPJ8vn$WgE zP_*7A`kIlttYv~VWEomt*N~G~4cVE4%+4$Z;imi9nS)B~OqRWvor##Cw=qmr8bZNy zAnmG7cow*-Y(E!UcvsqSF(@(F6+6xVQGg*-E?JdyU2SoY)1T}-Anb(+AaTcGW7~Qw zwXaC!WxnMxtk!bjs7&o9bZ9|8Dj!rr<(ZOp<8ZciV^8!^xed9iw7ZRA0G{j@_Z*M) zE$QJVm19h+IbXCeCK8tWbL{%68KQwPlj{c~w|O`XEaxFt zPYKGNMLW&DNmh2h$8IrD@pWzlZg%(Nv`slK~q6W>Gjy(Uy%o;}f7G$<=2@vmKR^4Ne%`zm836 zbFHc_ARjQhd4L%&*gEnOBBJVy2;dMRj*S0U6kO7rl-F%q6~y;`ELUU9$d}eocFTgj z1~czLdJ3z>c#|16f#G|zA4z(C6;};c23WF&VYY~DFicgN0^Uj!{*(Mt!l=k0YscUi zVhls|lQ-KHRUoqg27%P%H7a3{n%Qgw6EjGi7^I#MRC6F1BgF4$g(Z4aSYpNm3^7?n zVopc~OoBio8UHI#26}of%JbN@lF-RPEL1ATbYay8v++jHLlSy+HV&gl2T0Z|snJ+! zK<2(}Qrj;|Yb>>%r9PFUQI^CyzK6Y;bm6JH|AYiw7R*Co@WY-a^R)d8nKalkGnnxa zihvZ3z=hB%ThCxnv4qi74-POJTCvx`#kyb23+;QL`?I(o&so>HPd?~QLva)&uMnHf zq!CO}1B+8|5-_5V0E5W92dhY^VJzCZqBdIIKl&#Z}Df z9&*}IA}+Yu?0~pQa`vlfhH?2m)9q-p%F;D*GP=Ce5%Y`(4-tqJ|5Fn^pbeEM(9E-O z4&Y(_J)9{NGVs>w<~73zT29uR$-}N@>@*uUy|3ZG7f~p(brFZCq%jeQ$(A9-XUl*E zLFNm<1C0S26->he4<~*@oK^ca`8D(^xLQ5|$wS1s^_BS%i!HE7A~t!ID^^07#@rUz z2AG8BSJ60T996;$wKDb(5m$oXsc32*N#r;(ys3E$Dl$J73Q0bYYn~>=u~rs}E)0wM za46e46Z?1%FB;PHDG=eT4C`6Xo)!}29t6o$u7!3;uuP;Nx*W}pY7qd~fdm_9DT9k> zlQbp|2h&oSj~?|V4Ro(@+$KEX47ov%My0as6JuI&H;LDqZzbrH7=OUW4Gx=Db#-br zWYG;?ODU-?DD2}9F+O4zTtL16gV7ZQ+3IHKDR$MTXlx3lAzJaE`IpqwoCXV0V1R`j z+l2F;B*sQerup?#=?LLaw1}&tjHbKN*xvEf8AY(&d9Iok306_FTHMd=&nQ$9RFi&< z+|sFj^p*e-qmO~MhDKPg8qAmrUVb4Q9U2Iu0-1Ed^f7{`Rw^t`w0I@2vf2~fF_}?UqyZ0-hbwZ$f7RcS_@e_RliWe)Riz8*A&kjm7>en#CkFt zN%pU)uB00^lI-g(2DK%1`F<6ZK>H}6Pz_~04KxEVVwt%9nA!)Fbk`tjDLwVBmV)7u z`un#P7j#!tw~$dtIc+Txyr&sP?H?D3b-_Fb#KaRa==KH-yBivXqi`yW<{5_U4KW%o zAe}f41%NA%G-c-E>K;X?jMg?(*h+3O_XGmP%EE?-NtJM5Qn`SctLBLKRD`LCM z9D)8zlj1lzi{!yLNerP0tGFY?5ZHYE=~E&=x??E-n@FjF~^)-nm)3t=jsgH&z=mZw%3LD6Qyk*t2 zT1+UBg5hY=B;i*Io%C|lp|Or;#?p)@`ve1np(0}l13+%;$V)_mNV(XaBJ)g0wcyW1!bV7$xsW6NR|LU(-!9H;?EhhZgK% zGHz>rFJ~lyVG`X-C8PMw&TbwpV`uN?Z77}r{I;;+@Nf(1&f(Hlge8u)-P+6oL%{FP z8+z;keBy8;gK%ytyo;G$H172l658QrmXypxu~gJ3q}I)O3mR{56tk6U{`$Dw6y>r`4m(Yz z!x+K_@nz@-2SAwKzlp{00ub_&f)79iYC@>++j8P=&k-T#ns$Gi{KF zSiN#>W65IS@H*ZmLgoxl4Y?6`!kg*+57g`xeWXFYM#ky= z6h;?r9d6ejzGejVdx8{>L$IX4OsYRTA`8eQ-47le5#k|xH$0KU6~s=vI^_Vsd~A5V z)^ySXB$!3I&;ZtiEq6fV4kWc_OKZU8m`}z6LlnM%>dLYcxv=zaP-SKMOS6s@=fi zt#ged-vjk2<4tK0g6;eag#j%^+(#0K-PiC9dOFpt4+yjEsUS$Uz={bnCnN{p%|J-R zgcl0`6bLkVOGyb(Rg_67cCnYOuEmmIl#wQPnUq**+X3kyyL}_Um4bx05L^so zj3$w37M-CWQx|6VV{$5<>Xzc-^NeO}h(7g`pJxJ`o)R`L zNU&A$QB^onJzN1;|l}kW?vaF#bZ2|x& zKW^;%S09CxpN_%#r`a}mJVlbtyNqMo*FLcJb)z54S zwAgz}=W=TTno={q)Ir=Rib`z2Tb(q);clug2%VIFpBFWtm!zdEc|{zM&@{Wb$*LQ! z&xdwhCO0t}OSD@K_Zt!H0@GP+7mgYqaZoUu$t$2YaKT$o)L)|)Pm`LXCthp7C9Q)%CS ze)A5YkfJKmEhZ-!=ujL98VyM00Zzm0SjDT)B`q1?!9-zN$zFUA%WRs|MWOasuEu4< zd@imgf6SzhJkwE$=9CxQEFbW2v!{eKuUuyky4}gKRAYDKQtxUq0CU8H-$zVPIWNn6 z*VA$Bqa4kleo~W-66m338jQ4~k@RlZo~yRrb>%6CwTC46(M~Y$NhW$*rQ7Tv3 z5-R+gv>o>v=chB{Y?j53!_`YHIGRmgxI85>j1D?)ozggN%He-+u5MXAg>?RnX}S8A z?63>PP2`!~EV$JTcs6e-v*WfT{j|s``t?hHecK-1;^C$%fAV*Gc!!6_uDa(>Ur@I0 zTg#$<+_L0tdsxiFGqL z)8x?HP+4S&?6}s&7#ev<0}z0`^(~$0 z;&E7X_XJi0FBUTzBVqNsP*7}aTs-jzH`DyS2FCdQKn>KMfCM)e8`$mZ?_<+ajBi}? zDBm#O%N0U*j8;0kLo`qU(tWe-EyHg$+wVkJTI*W38NBxETx)NIHppS&xc0!Qh*qRJ zqBTFm+a(>%OiTr7>3xyeR4grm{~aW2xRa~G^zszRM2}!~VS3L1pHIY(9NOi31}T2z z3d#|yuuzoeTO6iEUs4VjQ)I-x$ARo=@GtV95GNF^*9|-nGfkn8o)^{1yH!bn@@r{A zLV_oa#N%B`@2J6G5GaD7*2rCCIa|>5tJf-w0g8iQYlUZpQQNy3zd?|hE3C2i7`hD% zt$ilJkk<@iYn^(SKv)(-Xjpp}gy6+IV;;gv4N1^^SlxO}e9vSNs6Ygma;JyrURkKti`2vV=qPA*X(Ja!djNcUxKXm-8O|hdsQ^8)K}O zN!1PB=;-x0yH*rLH~WWE?4C@NWB0H7`*)OyYP~sHHOi^(P1^^#`jv314pG9doQj^h z@|w5P;*gZed?2mR!1_Dz7>@FKGZj62?H|vyC5!cU5FDS1UikXc-Fl9#kH6)Un^klY z8_a}*dzhut=c!E5LP>5`_vI<6;;|RbJ*Tva=bm15mR0eq=3N$@^5meFDe+Co=NnZq zJb`C;NuH7_gm`vCWs{z;{sP}Ld3dU3XD2i>tEtU|VflH2TT|(W3F&Ov0fbm0}RP+S>IpKJZ;t5?5q|FUPUxQl0L6VBv(>yF#*T)c{B zX%r8y#4Zc@>z5@g0k>Xx3pPG-9i_3CW5f_)_Ou6y5Z7LGFoA$c? zJKxD?Cwk=(Lv3RzKiW&-4q!3%Z}1ALp0&EE3tJTb4_VWQY0p8*zMzXpzY* z<5{kWhzT&f!kk2b0*%%_tux5*dI<({p@y_b8!DTSI`?tikg}2^a8jBxT)B_^rdRN* z7xyx0ooYQDDVyCbb@_#QAXagWWhYTFKpg8qUabsQ0m9yECHLoZXn^M=$S*m&fjpO! zp5(u#9yF!g>fOvmvK+@ zmfU-l7}FR_HU!vv4~MTtR*N@ayom{$7b64Vca6FTlDRVS_SYE zLUi=9M+>b(AeG#&F1f$AW@%vW^7g@HFMaAEPPw4bA8 z7gF50jU3(Kd$rr&vZNn8ruv@-L5voi1&Tqy5_Z@w#!y{Mu!9}*#X$c8lRUFmP-O$QJE@BgQc+!DWu+_~xia&PD3T z**P>MfG8R|LI7~?x1QNGfzm@-mHl*+`PB6de1YqdN8SUq9&JlEs`5{4PM*1EaH?)m zTBm{lzMTr9ytL5jgbp26Of8(8tE0Vj*1bBFn8{tL@A(yyMF+eLOtqw1(hQZxq?SA` z%y6Uq3L1Thk54i!cuKv{C~$lW=D*Q}+KZ153LMPnH^Gt42c zkDWtC@LtgCP!j;aNM6nPZu*PohIBq+_zf8fg2#gFk&KxQiVETdatd;*Ik7$D0odh^ z2LJxQCi~k5RJwo;C`*?iPiSuD;5tQYR506_!#M4dg}Ts&?6^&-$9$4WPJF53TnhB? z!8o}(HT717OxM_ab+#T7HWg-2nv0%PsOH;8J*<3X;0lPs8S0EdGY{KgGyztPMZhTgoAfWkKt#? zZs`#GoUt{S)&YCeyIuM=pdZY^-ZAX@x%lyb<7?HpBG@`3uLv>G0(}5i+<2HOrAGv? z?RpQ);tG%pAJ{r9o-iepF9O>v9)#E!B~k?$6o>%3s(%NxM&`Ml1L1&AY@YX#6XhbSy#1Hmv?S%+fR?F$# z>$ZS8>dr`?N;z9?sp`jq%|*g`S5_V}9BqR>S44MVhC zB++7swm{lOx@Ju39gBriYFSC@`Nh0dXgqRSflE}^NPn*;tPVO<1kl^+Z*JEc@IbyA zk6Y+-a+0Zb@3s;yR|#XFL7dFd`Jg!FY8{n^WmJ*5F#t;m&JAA7&cKF3wqX{B{-(@& z3lZom_Tf<*`fHrU^UCB|<1alkW+OxP5IsElG>aO90MM@i0*4e)Fc{`ZYXoI`=2+D~ z);rF{qHqawGpX$EVOi`rPOGvp6v*1(nJ9IJ5*OJtt!;6qfO< zcHP$;56s4yIf|5NSYrUwM`Kkq11Z(kpdTfUhd3CH`vsz`e%30Is{M1-%=-{K35zmW zM%XWlFl^rsatlYb5z*pJ#O&$=XClb~LZ#wPPyo^!<%B3{gyw`$O|^q28m>Cg#xj~H z7^Xvsal)KcOq7hsS)=XHNz0IT5@4pXQ#0RbOb=WXoMHz33b?yy(T`2FaNt?4(fBP2 z*a+tOn^EFnaA_{Mv)PVFVCb4fTiMI+>ZOF>_iqlO8*V1}8Dk}vZQ_gUR95X!TB9ET zV}}*onI-oh1#65mCe@j_AW|&=~l(2ghcB%ML*&B&D(fx zq8-7pO;OsisSthNz1q#^d+0z32%2ii9g)7aWwFEJb!y?*+1Z1H>z?A-cFr9OG#n48 zZk77ge)m+`NpSS@Y&2(Lzxb?}0Of4XL{JSV#_4Po(E(eq1DifhP6}HQEhh@6m`#C8 zwVa0>^`z)8gxEoJd!4O*uOw0=`D%T1T=CwynP58%t{0kJM$!hQDeVk>h3VU_GG|QN zgAYc_OWT872KjuUBQA&l3M-+aI-5MvkCL!(w=np(IEYX&a#O0=6Vg=a8=Hr>y5`2T zdQjeatmujlQ}yt(PsxpF?OyikGwJSTPJakTsEc1)c6IG(r%dL3Vw4;V1YzT~7@m}d zH6fa3EaWuMsFc;Bs5Z-t;$_S#>h?VlqKs(e*sy{of?bY6kWvNBd{Gk(pB+`tkx?}e zyXp6CZ^ffV)e#``8QH37O*O5d3bWoQ-L__k4Cb(UVRHk!nXrYyqWN~523u|U4gePd zg+i(q8fT`%q4UB9<~}J)7|&J8vI?uLL_f<<&#FIY2PS^80Yto80~7~aIaOMm#@9FH zDnnZ`OmP%QeC&d7AaN%WJ?JzVDWw)e4$}Bqc?dgcPBWB7cnG@csD}PYx9|}-0OY8q zgMzCu3Bgj0$}+r6Yij5BCAT*ybJOOr?v6_9;sT@Ub|KS9u`I%`L)H7R$PG)IxH9Uf zK7m6m1ve)!gzZqe>aUMJ*MU9C>q@8!5L7qmGI2?)GGhQChet&I(8@VEkf*L-yQ#gY zePHy?R_(c=dt=5jOhT^J^N!;MWd6i1#g@IAC2_5*bf5}^svt2Agb3TmIcGzmATuR! z`lrm9_`|jN_-1`_^H!cJhwj}Jr}GF%4DE6ad$V7D*ud=ZFzO!yFoRX}IKU5wU8+@w zmr^cH8x0TOv0*)7Fr9Z;ermmSc-n)=gbru`dCIB%sUY)=2-_39rK==iL`aIiEnEQi zcq{#1>10J}T6aQ4`^%gHh6)m@4&?kTD))R$mBv-HQFLJbK+Z3*B?XW=quj8jDOa-( z6!V4s=0Sy`9gg*0q(zPdZ7hmTMK%p|S;VeS45Ep<4 zt0=%S&IFe-?%7;EndPkXjsBr|#%P27QgEg-SKmbVG`ICI1u+UNPzFDOAUDLr0BQ#K z>B;%~vCCx|7`ViylJSFhoyG^3tC)|I=0@Usw&7r+DDeE?M{d!0jr#`iK9VN}u0%1n z=LUx5N>`p}T(pBq-KWXt94N8dSE~kQter*>Ws8sms6(&k7>lrAs-K=5kG|6)s_yPG z6ku%FB<+#@1C>>sl4DVICn%O&VpSrep=uwSE5V-0ZeyLx=*~Mj^x=ViNUMQKg>M)8 zi<2(m6+Uo}h;0xgdpK+^Gwqcq4;Fh8icqOYvMJ=q4cc(V9r!b{oGC4GRZpOytd6P} z1~6e27-y9tw69`WV6=o@tdX>*B7Xho+Ul!3n2sZ9KeZT*n-;Js=|gI>F{eQ$5MZBb ztFIr1z>il6f~ihjY^QA*zQknx%RP!ksvRn z=lE*LLfW9Ar))u-DiOO65T|D3Fc6{}2;Mcaud%Km2Z(}6ltW*Lgp5+Wsl;GO35lsR z7)}_`1$jr+^AG{FF&$;->Zlgw+FTJ!((x_L!_ur~DLyVoX8N8|Ki8Nrm3LB-G#qwS z58_m`Vv=;&Rg$e{XjM`Xs9=qWXi_$w`P(W>I4e}hqDOl@KSWC-JdB&PAw&J_ehh`7 z?iotbD(+U_jk$6eSIP0QYa@=24TJAUmS}3@^BFpS1)~!H534#=CgXuyy8 zEC-ljvl>bGPGY={Lbm#HEXXTYS;~S)W;JdOHx)Lo^*e$M$`U!mcCd+o5E&ho$1fOf zv_~$c6R6CRH*Yt~YF<&MkwbOnFm`9w*x_*MOGVu&q8_sc15UbKBdn$z133Pd!AXoe z5RWNbWz-FDwhHlZ?inI!A+utMY)&$BQKbrH{3oBcpOizFFb$}Fk_w|pmdWoUS;;XG z%$eP$iM}3;6H!teoNZYcBc-D2c#*MQ(f~xg%g76X$js0HBCr(YEnTJYi5^_`<0?iE zaGPFP2G)59J{DAvGo96pB zxC_{@K7POpz&Qo+1EUaaaqhG2s)t?U2Zn*1TCnT_W~SXli>fY{|C{DS+8xv@DOfX5 zgZ;qs|5;O)`hR_(F!a@M8Ayce`ch;^RqbHseBhd-n`HvfufzlLGE2IEyIS4xZelSd z8>j4AOlgQy#url>Sq6{r}zp7lU}thvXyx*`YUgwVp1ALxacjW^>V3Jp0i_f zY5W$Xrdzv%PpXZr-FO7EW0e{pfGC~WJyvsd^Mohxaag}AVF zE4wdJ1PHMbnj{P$&fU^fNm1RvAvX-gQq-?;exXg|8R4B~aSFIHev!k zQSzR*CNo)E6nk(yfLTt)l?Y8m6{J&E6f~>G6#y@#r8nI;jWva9qM3$7Yo1aYG>JPAYrq{!=8&BCyH!u=PE?&Qp&fFc?4x5G!HJ@(t z_=ww?#WhE56etsjwc9k`j~rEl(Zy<#nuBzUS63<0XaJr_v4)y*w6SlHJ;r-wNmS>d zRrG@zQE}OlO7ObIeWG|31Ip?tc88rLkEb{RC6k$7#C^)4|;4K4IDyu9%Dsgf*AEQ*SK2t}(> zvopigp-q{em!(suq>*l(R?CI2R14*aTf`7$o^Je9ZE%Fyh1OG+>y0>9%KDxuP&Q4e z^d+#Gp7{uKok4R;*eZzqQK_vNY6q8AAL2!q>W>+%zXVO8CpOI@8y_cwOa zrN%CFj*8W=S|-v9?qF_`bu6D~xjIZO&!vi=?4J@FJ@tdntxji)rka%dbn@zUorxWqH)gQTX#F8d$cQ3{Ec%nw3q4T>tKna zfWYLu-AV^}xA*jeTf-|WJyi<2xdOfae2pS20N=VNS9JtK;_~g%1WkNG-G&@cpgxf; z{b+*YR$@MA7+A&YLj`46)f${igxN(L4J~fq!?@2sq1V~j8h{$l4~uoCbV<1<|FX

      +{qJIbd@MA^FEq#i-39ut=r=hKf@ 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 diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.c b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.c deleted file mode 100644 index 67f7e9277..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.c +++ /dev/null @@ -1,94 +0,0 @@ -//#include -#include "mpeg_frame_decoder.h" - -#define MIN(a, b) a < b ? a : b - -int mpeg_frame_decoder_create(MPEGFrameDecoder **ptr, int enable_gapless) { - MPEGFrameDecoder *decoder = malloc(sizeof(MPEGFrameDecoder)); - *ptr = decoder; - - int error_code = 0; - - decoder->mh = mpg123_new(NULL, &error_code); - if (error_code) return error_code; - - error_code = mpg123_param(decoder->mh, MPG123_FLAGS, - MPG123_SKIP_ID3V2 | - MPG123_PLAIN_ID3TEXT | - MPG123_NO_PEEK_END | - MPG123_NO_READAHEAD | - MPG123_FORCE_STEREO | - MPG123_QUIET, 0); - if (error_code) return error_code; - - if (enable_gapless) { - error_code = mpg123_param(decoder->mh, MPG123_ADD_FLAGS, MPG123_GAPLESS, 0); - if (error_code) return error_code; - } - - error_code = mpg123_open_feed(decoder->mh); - if (error_code) return error_code; - - return error_code; -} - -int mpeg_decoder_feed( - MPEGFrameDecoder *decoder, - const unsigned char *in, - size_t in_size -) { - return mpg123_feed( - decoder->mh, - in, - in_size - ); -} - -int mpeg_decoder_read( - MPEGFrameDecoder *decoder, - float *out, - size_t out_size, - size_t *samples_decoded, - unsigned int *sample_rate, - char **error_string_ptr -) { - size_t bytes_decoded = 0; - int error = mpg123_read( - decoder->mh, - (unsigned char *) decoder->pcm, - MPEG_PCM_OUT_SIZE, - &bytes_decoded - ); - - *samples_decoded = bytes_decoded / sizeof(float) / 2; - - // deinterleave - int output_channels = 2; // TODO: remove force stereo - for (int in_idx=(*samples_decoded * output_channels) -1; in_idx >= 0; in_idx--) { - int sample = in_idx / output_channels; - int channel = (in_idx % output_channels) * *samples_decoded; - out[sample+channel] = decoder->pcm[in_idx]; - } - - if (error != MPG123_OK && error >= MPG123_ERR) { - *error_string_ptr = error_messages[error + 1]; - } else if (error < -1) { - // -12 MPG123_DONE - // -11 MPG123_NEW_FORMAT - // -10 MPG123_NEED_MORE - // needed by MPEGDecoder.js - } else { - error = 0; - } - - // MPG123_NEW_FORMAT, usually the start of a new stream, so read the sample rate - mpg123_info(decoder->mh, &decoder->fr); - *sample_rate = (int) decoder->fr.rate; - - return error; -} - -void mpeg_frame_decoder_destroy(MPEGFrameDecoder *decoder) { - mpg123_delete(decoder->mh); - free(decoder); -}; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.h b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.h deleted file mode 100644 index 9bdee64f7..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/mpeg_frame_decoder.h +++ /dev/null @@ -1,82 +0,0 @@ -#include -#include - -// https://lists.mars.org/hyperkitty/list/mad-dev@lists.mars.org/message/23ACZCLN3DMTR62GDAQNBGNUUMXORWYR/ -#define MPEG_PCM_OUT_SIZE 2889*16*2 // max_mpeg_frame_size * bit_reservoir * channels - -typedef struct { - float pcm[MPEG_PCM_OUT_SIZE]; - mpg123_handle *mh; - struct mpg123_frameinfo fr; -} MPEGFrameDecoder; - -int mpeg_frame_decoder_create( - MPEGFrameDecoder **ptr, // pointer to store new handle - int enable_gapless // enable gapless decoding -); - -int mpeg_decoder_feed( - MPEGFrameDecoder *decoder, - const unsigned char *in, - size_t in_size -); - -int mpeg_decoder_read( - MPEGFrameDecoder *decoder, - float *out, - size_t out_size, - size_t *samples_decoded, - unsigned int *sample_rate, - char **error_string_ptr -); - -static char* error_messages[] = { - "MPG123_ERR", - "", //"MPG123_OK", - "MPG123_BAD_OUTFORMAT", - "MPG123_BAD_CHANNEL", - "MPG123_BAD_RATE", - "MPG123_ERR_16TO8TABLE", - "MPG123_BAD_PARAM", - "MPG123_BAD_BUFFER", - "MPG123_OUT_OF_MEM", - "MPG123_NOT_INITIALIZED", - "MPG123_BAD_DECODER", - "MPG123_BAD_HANDLE", - "MPG123_NO_BUFFERS", - "MPG123_BAD_RVA", - "MPG123_NO_GAPLESS", - "MPG123_NO_SPACE", - "MPG123_BAD_TYPES", - "MPG123_BAD_BAND", - "MPG123_ERR_NULL", - "MPG123_ERR_READER", - "MPG123_NO_SEEK_FROM_END", - "MPG123_BAD_WHENCE", - "MPG123_NO_TIMEOUT", - "MPG123_BAD_FILE", - "MPG123_NO_SEEK", - "MPG123_NO_READER", - "MPG123_BAD_PARS", - "MPG123_BAD_INDEX_PAR", - "MPG123_OUT_OF_SYNC", - "MPG123_RESYNC_FAIL", - "MPG123_NO_8BIT", - "MPG123_BAD_ALIGN", - "MPG123_NULL_BUFFER", - "MPG123_NO_RELSEEK", - "MPG123_NULL_POINTER", - "MPG123_BAD_KEY", - "MPG123_NO_INDEX", - "MPG123_INDEX_FAIL", - "MPG123_BAD_DECODER_SETUP", - "MPG123_MISSING_FEATURE", - "MPG123_BAD_VALUE", - "MPG123_LSEEK_FAILED", - "MPG123_BAD_CUSTOM_IO", - "MPG123_LFS_OVERFLOW", - "MPG123_INT_OVERFLOW", - "MPG123_BAD_FLOAT" -}; - -void mpeg_frame_decoder_destroy(MPEGFrameDecoder *st); diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/wasm-audio-decoder-common.wasm b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/src/wasm-audio-decoder-common.wasm deleted file mode 100644 index 7ce6c205c1975b3e8bef6b4021cf89e6764cfb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2628 zcmZWr&5jjC6h8ISf46VnZegNC2CQl@PNEDXCf5X9%u$)andrs`05lL&H$=EIp!j!( z$byB7*}5|@ywx+sJ3F?XQG6AznEb}I8=p<@YO*(PU%yVazI^%9 zYgcbx{`l(VHKPW<9m%$oojF?4i(bp?m^Ws{DW})%iX+)s=q;--)(g(c=P;Zh@)=~B z%h21gUUbG~PH#=Uan|dhs%w!tH4zy>s&0?Fa6u8&)C31J*1>1umdWQDVdJzjs|~`B zB5dQR&&3=zdL!;uunSFZW!DwKWy$2pBud-mYJ<#Rt|!D%z@7vFyK!qChDzJc!axmF z5RI1Dg11AeNuaU;QM(Lb#t0x#HAFQ$W3zGwY2>i&Dj1&hIn##?0meKjGo{#ISv2c< zqOuuc*T7DvWbU+L4DoeHecA)_C5<8k2{fCm16^#uiL(=Df}{Zna!b(~Y@m9X%Y(-e z1SK2E*H1>AJ!+Z8n)uJwTfG9z3@-vHy~6K#Xh#?gFf#mm8zK~}@bP^onQs9AWN5^h z8G@}Vz(jSr&zLSXD49H{;}i9PlpB%vVhfA1kEFA!O$i=ZROvhcHjxOxInaRKwq9*C z-aqOM)K#DW*nCeN$8i9_t zqb0CjV3Ig5f@E=JH<}!2*^3B71YoKO5E)lYq+<{^Jj~~uz z*vmqYF(?81an<3(?jU&Zi1(}DMRBJLzLDZcYQil);+dyZu!CPnbVnmY$|3`?Z;pYS zh+KvTu?;=?VM%v=wSh8XHS9}AXl9utg~LnvfdtJa^erY0f9nCr8Pcu*CpOobBIUB+ zO4kaSZouUh+GMuLXq5-W0y(5zwY*SLsTHMKVOpeVC?y-}njcmOsWD7m^LERRD`}K}M!Xjn4_e+E z$udFySKm zgo_I@p$U+ooFJFnDsRN)qYTTXxIBl|>A2b_EFBJJ;GIlVd1w5Mm#{6?1<*LLjy68A zK5Y~}?qR-^($=UrZ&x^2ME0@ZCihB~0E+0CXd#6z^Blt0u#WgewkMhKR!%Z@f*3AN9;V+?=$Jv1Jqwkb_9C$90A_120kDY_`W6MD8 ztlF={{pT=a#ms+DaAl`@Ajx-u5sG!Gv1oR?tp30pSyni`)Q_4$K0*Xn1)Sw@m%*XMoHB5$ IX#`{KzX7^q3jhEB diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/terser.json b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/terser.json deleted file mode 100644 index f4f1e9933..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/terser.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "sourceMap": { - "url": "mpg123-decoder.min.js.map" - }, - "output": { - "preamble": "/* Copyright 2021-2024 Ethan Halsall. This file is part of wasm-audio-decoders. https://github.com/eshaz/wasm-audio-decoders */" - }, - "compress": { - "ecma": 2021, - "passes": 5, - "toplevel": true, - "unsafe": true, - "unsafe_methods": true, - "unsafe_arrows": true - }, - "mangle": { - "module": true, - "properties": { - "keep_quoted": true, - "debug": false, - "reserved": [ - "MPEGDecoder", - "MPEGDecoderWebWorker", - "instance", - "decode", - "decodeFrame", - "decodeFrames", - "free", - "ready", - "reset", - "channelData", - "samplesDecoded", - "bitDepth", - "message", - "frameLength", - "frameNumber", - "inputBytes", - "outputSamples", - "enableGapless" - ] - } - }, - "ecma": 2021, - "safari10": true, - "module": true -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/types.d.ts b/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/types.d.ts deleted file mode 100644 index 5b101c974..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/types.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { DecodeError } from "@wasm-audio-decoders/common"; - -export interface MPEGDecodedAudio { - channelData: Float32Array[]; - samplesDecoded: number; - sampleRate: number; - errors: DecodeError[]; -} - -export class MPEGDecoder { - constructor(options?: { enableGapless?: boolean }); - ready: Promise; - reset: () => Promise; - free: () => void; - decode: (mpegData: Uint8Array) => MPEGDecodedAudio; - decodeFrame: (mpegFrame: Uint8Array) => MPEGDecodedAudio; - decodeFrames: (mpegFrames: Uint8Array[]) => MPEGDecodedAudio; -} - -export class MPEGDecoderWebWorker { - constructor(options?: { enableGapless?: boolean }); - ready: Promise; - reset: () => Promise; - free: () => Promise; - decode: (mpegData: Uint8Array) => Promise; - decodeFrame: (mpegFrame: Uint8Array) => Promise; - decodeFrames: (mpegFrames: Uint8Array[]) => Promise; -} - -export { DecodeError }; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/resample.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/resample.mjs deleted file mode 100644 index a849d7b5e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/resample.mjs +++ /dev/null @@ -1,23 +0,0 @@ -export const resample = (sampleArray, srcSampleRate, targetSampleRate) => { - if (srcSampleRate === targetSampleRate) { - return sampleArray.slice(); - } - - const conversionFactor = srcSampleRate / targetSampleRate; - const outputLength = Math.ceil(sampleArray.length / conversionFactor); - const outputArray = new Float32Array(outputLength); - - for (let i = 0; i < outputLength; ++i) { - const position = i * conversionFactor; - const index = Math.floor(position); - const fraction = position - index; - - if (index + 1 < sampleArray.length) { - outputArray[i] = sampleArray[index] * (1 - fraction) + sampleArray[index + 1] * fraction; - } else { - outputArray[i] = sampleArray[index]; - } - } - - return outputArray; -}; diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs deleted file mode 100644 index 74869a1c6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-codec.mjs +++ /dev/null @@ -1,83 +0,0 @@ -import * as u8 from 'u8-encoder'; - -export class WebPEncoder { - constructor() { - this.worker = new Worker(new URL('./webp-worker.mjs', import.meta.url), { - type: 'module', - }); - - this.worker.onmessage = e => { - const promise = this.promises.shift(); - if (promise) { - const b = e.data; - const o = u8.decode(b); - const { - error, - result, - } = o; - if (!error) { - promise.resolve(result); - } else { - promise.reject(result); - } - } else { - console.warn('WebPEncoder unexpected message', e.data); - } - }; - this.worker.onerror = err => { - console.warn('WebPEncoder error', err); - }; - - this.promises = []; - } - async encode(imageData, { - quality = 75, - lossless = false, - } = {}) { - const b = u8.encode({ - method: 'encode', - args: { - imageData, - opts: { - quality, - lossless: +lossless, // int is expected in the backend - }, - }, - }); - this.worker.postMessage(b, [b.buffer]); - - const { - promise, - resolve, - reject, - } = Promise.withResolvers(); - this.promises.push({ - resolve, - }); - - return await promise; - } - async decode(encodedData) { - const b = u8.encode({ - method: 'decode', - args: { - encodedData, - }, - }); - this.worker.postMessage(b, [b.buffer]); - - const { - promise, - resolve, - reject, - } = Promise.withResolvers(); - this.promises.push({ - resolve, - }); - - return await promise; - } - close() { - this.worker.terminate(); - } -} diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs deleted file mode 100644 index fd8573a4b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/webp-worker.mjs +++ /dev/null @@ -1,60 +0,0 @@ -import webp from 'webp-wasm'; -import * as u8 from 'u8-encoder'; -import { QueueManager } from 'queue-manager'; - -const encodeWebp = async (imageData, opts) => { - const outputBuffer = await webp.encode(imageData, opts); - const uint8Array = new Uint8Array(outputBuffer.buffer, outputBuffer.byteOffset, outputBuffer.byteLength); - return uint8Array; -}; -const decodeWebp = async (encodedData) => { - const arrayBuffer = encodedData.buffer.slice(encodedData.byteOffset, encodedData.byteOffset + encodedData.byteLength); - const imageData = await webp.decode(arrayBuffer); - return imageData; -}; - -const queueManager = new QueueManager(); -globalThis.onmessage = async (e) => { - await queueManager.waitForTurn(async () => { - let error, result; - try { - const b = e.data; - const o = u8.decode(b); - const { - method, - args, - } = o; - switch (method) { - case 'encode': { - const { - imageData, - opts, - } = args; - result = await encodeWebp(imageData, opts); - break; - } - case 'decode': { - const { - encodedData, - } = args; - result = await decodeWebp(encodedData); - break; - } - default: { - throw new Error('unknown method: ' + method); - } - } - } catch(err) { - console.error(err); - error = err; - } - - let b; - if (!error) { - b = u8.encode({ error: null, result }); - } else { - b = u8.encode({ error, result: null }); - } - postMessage(b, [b.buffer]); - }); -}; \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-edge.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-edge.mjs deleted file mode 100644 index 368a8013b..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-edge.mjs +++ /dev/null @@ -1,9 +0,0 @@ -import libopus from './packages/libopusjs/libopus.wasm.js'; -import { makeOpusCodec } from './ws-opus-codec.mjs'; -export const WsOpusCodec = makeOpusCodec(libopus); - -export { WsMp3Encoder } from './ws-mp3-encoder.mjs'; - -import MPEGDecoder from './packages/mpg123-decoder/src/MPEGDecoder.js'; -import { makeMp3Decoder } from './ws-mp3-decoder.mjs'; -export const WsMp3Decoder = makeMp3Decoder(MPEGDecoder); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-fs.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-fs.mjs deleted file mode 100644 index bd0cd26d3..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-fs.mjs +++ /dev/null @@ -1,9 +0,0 @@ -import libopus from './packages/libopusjs/libopus.wasm.fs.js'; -import { makeOpusCodec } from './ws-opus-codec.mjs'; -export const WsOpusCodec = makeOpusCodec(libopus); - -export { WsMp3Encoder } from './ws-mp3-encoder.mjs'; - -import MPEGDecoder from './packages/mpg123-decoder/src/MPEGDecoder.fs.js'; -import { makeMp3Decoder } from './ws-mp3-decoder.mjs'; -export const WsMp3Decoder = makeMp3Decoder(MPEGDecoder); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-worker.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-worker.mjs deleted file mode 100644 index 929465afb..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-runtime-worker.mjs +++ /dev/null @@ -1,58 +0,0 @@ -export class WsOpusCodec { - constructor() { - this.worker = new Worker(new URL(`./ws-opus-codec-worker.js`, import.meta.url), { - type: 'module', - }); - } - postMessage(data) { - this.worker.postMessage(data); - } - addEventListener(event, listener) { - this.worker.addEventListener(event, listener); - } - removeEventListener(event, listener) { - this.worker.removeEventListener(event, listener); - } - terminate() { - this.worker.terminate(); - } -} -export class WsMp3Encoder { - constructor() { - this.worker = new Worker(new URL(`./ws-mp3-encoder-worker.mjs`, import.meta.url), { - type: 'module', - }); - } - postMessage(data) { - this.worker.postMessage(data); - } - addEventListener(event, listener) { - this.worker.addEventListener(event, listener); - } - removeEventListener(event, listener) { - this.worker.removeEventListener(event, listener); - } - terminate() { - this.worker.terminate(); - } -} - -export class WsMp3Decoder { - constructor() { - this.worker = new Worker(new URL(`./ws-mp3-decoder-worker.mjs`, import.meta.url), { - type: 'module', - }); - } - postMessage(data) { - this.worker.postMessage(data); - } - addEventListener(event, listener) { - this.worker.addEventListener(event, listener); - } - removeEventListener(event, listener) { - this.worker.removeEventListener(event, listener); - } - terminate() { - this.worker.terminate(); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-util.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-util.mjs deleted file mode 100644 index 33a2988af..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec-util.mjs +++ /dev/null @@ -1,111 +0,0 @@ -import { resample } from './resample.mjs'; - -export class FakeAudioData { - constructor() { - this.data = null; - this.buffer = { - getChannelData: n => { - return this.data; - }, - }; - } - - set(data) { - this.data = data; - } -} -export class FakeIteratorResult { - constructor(value) { - this.value = value; - this.done = false; - } - - setDone(done) { - this.done = done; - } -} -export class WsMediaStreamAudioReader { - constructor(mediaStream, { - audioContext, - // if passed, resample audio to this rate - // otherwise, use the rate of the audio context - sampleRate = undefined, - }) { - if (!audioContext) { - console.warn('need audio context'); - debugger; - } - - this.buffers = []; - this.cbs = []; - this.fakeAudioData = new FakeAudioData(); - this.fakeIteratorResult = new FakeIteratorResult(this.fakeAudioData); - - const mediaStreamSourceNode = audioContext.createMediaStreamSource(mediaStream); - - const audioWorkletNode = new AudioWorkletNode(audioContext, 'ws-input-worklet'); - audioWorkletNode.onprocessorerror = err => { - console.warn('audio worklet error', err); - }; - audioWorkletNode.port.onmessage = e => { - let f32 = e.data; - // console.warn('push audio data', f32, audioContext.sampleRate, sampleRate); - if (sampleRate !== undefined) { - f32 = resample(f32, audioContext.sampleRate, sampleRate); - } - this.pushAudioData(f32); - }; - - mediaStreamSourceNode.connect(audioWorkletNode); - - const close = e => { - this.cancel(); - }; - mediaStream.addEventListener('close', close); - this.cleanup = () => { - mediaStream.removeEventListener('close', close); - }; - } - - read() { - if (this.buffers.length > 0) { - const b = this.buffers.shift(); - if (b) { - this.fakeAudioData.set(b); - } else { - this.fakeIteratorResult.setDone(true); - } - return Promise.resolve(this.fakeIteratorResult); - } else { - let accept; - const p = new Promise((a, r) => { - accept = a; - }); - this.cbs.push(b => { - if (b) { - this.fakeAudioData.set(b); - } else { - this.fakeIteratorResult.setDone(true); - } - accept(this.fakeIteratorResult); - }); - return p; - } - } - - cancel() { - this.pushAudioData(null); - this.cleanup(); - } - - pushAudioData(b) { - if (this.cbs.length > 0) { - this.cbs.shift()(b); - } else { - this.buffers.push(b); - } - } -} -export function WsEncodedAudioChunk(o) { - return o; -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec.mjs deleted file mode 100644 index 41826a443..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-codec.mjs +++ /dev/null @@ -1,148 +0,0 @@ -import { - FakeAudioData, -} from './ws-codec-util.mjs'; - -export class OpusAudioEncoder { - constructor({sampleRate, codecs, output, error}) { - if (!codecs.WsOpusCodec) { - console.warn('no WsOpusCodec', codecs); - throw new Error('no WsOpusCodec'); - } - this.worker = new codecs.WsOpusCodec(); - this.worker.addEventListener('message', e => { - output(e.data); - }); - this.worker.addEventListener('error', error); - this.worker.postMessage({ - mode: 'encode', - sampleRate, - }); - } - - encode(audioData) { - this.worker.postMessage(audioData.data, audioData.data !== null ? [audioData.data.buffer] : []); - } - - close() { - this.worker.terminate(); - } -} - -export class OpusAudioDecoder { - constructor({sampleRate, format, codecs, output, error}) { - if (!codecs.WsOpusCodec) { - console.warn('no WsOpusCodec', codecs); - throw new Error('no WsOpusCodec'); - } - this.worker = new codecs.WsOpusCodec(); - const fakeAudioData = new FakeAudioData(); - this.worker.addEventListener('message', e => { - if (e.data) { - fakeAudioData.set(e.data); - output(fakeAudioData); - } else { - output(null); - } - }); - this.worker.addEventListener('error', error); - this.worker.postMessage({ - mode: 'decode', - sampleRate, - format, - }); - } - - decode(data) { - this.worker.postMessage(data, data !== null ? [data.buffer] : []); - } -} - -export class Mp3AudioEncoder { - constructor({ - sampleRate, - bitrate = 128, - transferBuffers = true, - codecs, - output, - error, - }) { - if (!sampleRate) { - debugger; - } - - this.transferBuffers = transferBuffers; - - if (!codecs.WsMp3Encoder) { - console.warn('no WsMp3Encoder', codecs); - throw new Error('no WsMp3Encoder'); - } - this.worker = new codecs.WsMp3Encoder(); - - this.worker.addEventListener('message', e => { - output(e.data); - }); - this.worker.addEventListener('error', error); - this.worker.postMessage({ - sampleRate, - bitrate, - }); - } - - encode(audioData) { - this.worker.postMessage(audioData.data, this.transferBuffers && audioData.data !== null ? [audioData.data.buffer] : []); - } - - close() { - this.worker.terminate(); - } -} - -export class Mp3AudioDecoder { - constructor({ - sampleRate, - format, - transferBuffers = true, - codecs, - output, - error, - }) { - if (!sampleRate) { - throw new Error('no sample rate'); - } - if (!codecs) { - throw new Error('no codecs'); - } - - this.transferBuffers = transferBuffers; - - if (!codecs.WsMp3Decoder) { - console.warn('no WsMp3Decoder', codecs); - throw new Error('no WsMp3Decoder'); - } - this.worker = new codecs.WsMp3Decoder(); - - const fakeAudioData = new FakeAudioData(); - this.worker.addEventListener('message', e => { - // console.log('worker got data', e.data); - if (e.data.data) { - fakeAudioData.set(e.data.data); - output(fakeAudioData); - } else { - output(null); - } - }); - this.worker.addEventListener('error', error); - this.worker.postMessage({ - sampleRate, - format, - }); - } - - decode(data) { - this.worker.postMessage(data, this.transferBuffers && data !== null ? [data.buffer] : []); - } - - close() { - this.worker.terminate(); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants-server.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants-server.mjs deleted file mode 100644 index daf85a034..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants-server.mjs +++ /dev/null @@ -1,9 +0,0 @@ -export const MESSAGE = (() => { - let i = 1; - return { - INIT: i++, - AUDIO: i++, - STATE_UPDATE: i++, - STATE_REFRESH: i++, - }; -})(); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants.mjs deleted file mode 100644 index ff50bb9c1..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-constants.mjs +++ /dev/null @@ -1,28 +0,0 @@ -export const channelCount = 1; -// export const sampleRate = 48000; -export const bitrate = 60000; -export const kbps = 128; -export const frameSize = 20; -export const voiceOptimization = true; -// export const metadataPrefix = 'metadata'; -// export const roomEntitiesPrefix = 'entities'; -export const MESSAGE = (() => { - let i = 1; - return { - INIT: i++, - AUDIO: i++, - STATE_UPDATE: i++, - STATE_REFRESH: i++, - }; -})(); -export const TYPE = (() => { - let i = 1; - return { - INT: i++, - FLOAT: i++, - STRING: i++, - UINT32ARRAY: i++, - FLOAT32ARRAY: i++, - UINT8ARRAY: i++, - }; -})(); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder-worker.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder-worker.mjs deleted file mode 100644 index 18492f649..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder-worker.mjs +++ /dev/null @@ -1,18 +0,0 @@ -import MPEGDecoder from './packages/mpg123-decoder/src/MPEGDecoder.fetch.js'; -import { makeMp3Decoder } from './ws-mp3-decoder.mjs'; -const WsMp3Decoder = makeMp3Decoder(MPEGDecoder); - -const codec = new WsMp3Decoder(); -onmessage = e => { - codec.postMessage(e.data); -}; -codec.addEventListener('message', e => { - const { - data, - transferList, - } = e; - postMessage(data, transferList); -}); -codec.addEventListener('close', () => { - globalThis.close(); -}); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder.mjs deleted file mode 100644 index 0e5c99c8c..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-decoder.mjs +++ /dev/null @@ -1,84 +0,0 @@ -import { resample } from './resample.mjs'; -import { formatSamples } from './format.mjs'; -import { QueueManager } from 'queue-manager'; - -export const makeMp3Decoder = (MPEGDecoder) => -class WsMp3Decoder extends EventTarget { - constructor() { - super(); - - const mp3decoder = new MPEGDecoder(); - const queueManager = new QueueManager(); - - this.handlemessage = e => { - const { - sampleRate: globalSampleRate, - format, - } = e.data; - this.handlemessage = async e => { - await queueManager.waitForTurn(async () => { - // console.log('wait for decoder ready 1'); - await mp3decoder.ready; - // console.log('wait for decoder ready 2'); - - if (e.data) { - const mp3Data = e.data; - // console.log('decode data 1', mp3Data); - const result = mp3decoder.decode(mp3Data); - // console.log('decode data 2', result); - const {channelData, samplesDecoded, sampleRate: localSampleRate} = result; - if (samplesDecoded > 0) { - const firstChannelData = channelData[0]; - // console.log('resampling 1'); - const resampled = localSampleRate === globalSampleRate ? - firstChannelData - : - resample(firstChannelData, localSampleRate, globalSampleRate); - // console.log('resampling 2', format); - const formatted = formatSamples(resampled, format, 'f32'); - // console.log('formatted', formatted); - this.dispatchMessage({ - data: formatted, - timestamp: 0, // fake - duration: 1, // fake - }, [formatted.buffer]); - } - } else { - // const data = mp3decoder.flush(); - // this.dispatchMessage({ - // data, - // timestamp: 0, // fake - // duration: 1, // fake - // }, [data.buffer]); - - this.dispatchMessage({ - data: null, - timestamp: 0, // fake - duration: 1, // fake - }); - - this.close(); - } - }); - }; - }; - } - postMessage(data, transferList) { - // console.log('mp3 decoder postMessage', data); - this.handlemessage({ - data, - transferList, - }); - } - dispatchMessage(data, transferList) { - this.dispatchEvent(new MessageEvent('message', { - data, - transferList, - })); - } - close() { - this.dispatchEvent(new MessageEvent('close', { - data: null, - })); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder-worker.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder-worker.mjs deleted file mode 100644 index 5993f7321..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder-worker.mjs +++ /dev/null @@ -1,18 +0,0 @@ -import { - WsMp3Encoder, -} from './ws-mp3-encoder.mjs'; - -const codec = new WsMp3Encoder(); -onmessage = e => { - codec.postMessage(e.data); -}; -codec.addEventListener('message', e => { - const { - data, - transferList, - } = e; - postMessage(data, transferList); -}); -codec.addEventListener('close', () => { - globalThis.close(); -}); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder.mjs deleted file mode 100644 index 70808866d..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-mp3-encoder.mjs +++ /dev/null @@ -1,65 +0,0 @@ -import lamejs from './packages/lamejs/lame.all.js'; -import {channelCount, /*frameSize, voiceOptimization*/} from './ws-constants.mjs'; -import { floatTo16Bit, int16ToFloat32 } from './convert.mjs'; - -export class WsMp3Encoder extends EventTarget { - constructor() { - super(); - - this.handlemessage = e => { - const { - sampleRate, - bitrate, - } = e.data; - const mp3encoder = new lamejs.Mp3Encoder(channelCount, sampleRate, bitrate); - - this.handlemessage = e => { - if (e.data) { - const samples = floatTo16Bit(e.data); - const i8Array = mp3encoder.encodeBuffer(samples); - const uint8Array = new Uint8Array(i8Array.buffer, i8Array.byteOffset, i8Array.byteLength); - const data = uint8Array; - this.dispatchMessage({ - data, - timestamp: 0, // fake - duration: 1, // fake - }, [data.buffer]); - } else { - const i8Array = mp3encoder.flush(); - const uint8Array = new Uint8Array(i8Array.buffer, i8Array.byteOffset, i8Array.byteLength); - const data = uint8Array; - this.dispatchMessage({ - data, - timestamp: 0, // fake - duration: 1, // fake - }, [data.buffer]); - - this.dispatchMessage({ - data: null, - timestamp: 0, // fake - duration: 1, // fake - }); - - this.close(); - } - }; - } - } - postMessage(data, transferList) { - this.handlemessage({ - data, - transferList, - }); - } - dispatchMessage(data, transferList) { - this.dispatchEvent(new MessageEvent('message', { - data, - transferList, - })); - } - close() { - this.dispatchEvent(new MessageEvent('close', { - data: null, - })); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec-worker.js b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec-worker.js deleted file mode 100644 index 5ca8af2f9..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec-worker.js +++ /dev/null @@ -1,21 +0,0 @@ -import libopus from './packages/libopusjs/libopus.wasm.fetch.js'; -import { - makeOpusCodec, -} from './ws-opus-codec.mjs'; - -const WsOpusCodec = makeOpusCodec(libopus); - -const codec = new WsOpusCodec(); -onmessage = e => { - codec.postMessage(e.data); -}; -codec.addEventListener('message', e => { - const { - data, - transferList, - } = e; - postMessage(data, transferList); -}); -codec.addEventListener('close', () => { - globalThis.close(); -}); \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec.mjs deleted file mode 100644 index d14fbae5e..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-opus-codec.mjs +++ /dev/null @@ -1,107 +0,0 @@ -import {channelCount, bitrate, frameSize, voiceOptimization} from './ws-constants.mjs'; -import { QueueManager } from 'queue-manager'; -import { floatTo16Bit } from './convert.mjs'; -import { formatSamples } from './format.mjs'; - -export const makeOpusCodec = (libopus) => -class WsOpusCodec extends EventTarget { - constructor() { - super(); - - const readyPromise = libopus.waitForReady(); - - this.handlemessage = e => { - const { - mode, - sampleRate, - format, - } = e.data; - switch (mode) { - case 'encode': { - const encoderPromise = (async () => { - await readyPromise; - const enc = new libopus.Encoder(channelCount, sampleRate, bitrate, frameSize, voiceOptimization); - return enc; - })(); - const queueManager = new QueueManager(); - - this.handlemessage = async e => { - await queueManager.waitForTurn(async () => { - const enc = await encoderPromise; - - if (e.data) { - const samples = floatTo16Bit(e.data); - enc.input(samples); - - let output; - while (output = enc.output()) { - output = output.slice(); - this.dispatchMessage({ - data: output, - timestamp: 0, // fake - duration: 1, // fake - }, [output.buffer]); - } - } else { - this.dispatchMessage({ - data: null, - timestamp: 0, // fake - duration: 1, // fake - }); - - this.close(); - } - }); - } - break; - } - case 'decode': { - const decoderPromise = (async () => { - await readyPromise; - const dec = new libopus.Decoder(channelCount, sampleRate); - return dec; - })(); - const queueManager = new QueueManager(); - - this.handlemessage = async e => { - await queueManager.waitForTurn(async () => { - const dec = await decoderPromise; - - if (e.data) { - dec.input(e.data); - - let output; - while (output = dec.output()) { - const formatted = formatSamples(output, format, 'i16'); - this.dispatchMessage(formatted, [formatted.buffer]); - } - } else { - this.dispatchMessage(null); - - this.close(); - } - }); - }; - break; - } - } - }; - } - postMessage(data, transferList) { - this.handlemessage({ - data, - transferList, - }); - } - dispatchMessage(data, transferList) { - this.dispatchEvent(new MessageEvent('message', { - data, - transferList, - })); - } - close() { - this.dispatchEvent(new MessageEvent('close', { - data: null, - })); - } -} \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-util-server.mjs b/packages/usdk/packages/upstreet-agent/packages/codecs/ws-util-server.mjs deleted file mode 100644 index b8e471255..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/codecs/ws-util-server.mjs +++ /dev/null @@ -1,35 +0,0 @@ -const textEncoder = new TextEncoder(); -const encodedMessageUint8Array = new Uint8Array(32 * 1024); -const encodedMessageDataView = new DataView(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset); -export const encodeMessage = parts => { - let index = 0; - for (const part of parts) { - if (typeof part === 'number') { - encodedMessageDataView.setUint32(index, part, true); - index += Uint32Array.BYTES_PER_ELEMENT; - } else if (typeof part === 'string') { - const {written} = textEncoder.encodeInto(part, new Uint8Array(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset + index + Uint32Array.BYTES_PER_ELEMENT)); - encodedMessageDataView.setUint32(index, written, true); - index += Uint32Array.BYTES_PER_ELEMENT; - index += written; - } else if (part.byteLength >= 0) { - if (!part.staticSize) { - encodedMessageDataView.setUint32(index, part.byteLength, true); - index += Uint32Array.BYTES_PER_ELEMENT; - } - encodedMessageUint8Array.set(new Uint8Array(part.buffer, part.byteOffset, part.byteLength), index); - index += part.byteLength; - } else { - throw new Error('unknown part: ' + JSON.stringify(part)); - } - } - return new Uint8Array(encodedMessageUint8Array.buffer, encodedMessageUint8Array.byteOffset, index); -}; -/* // hack to fix toJSON() -module.exports.loadState = state => { - const objects = state.getArray('objects'); - for (let i = 0; i < objects.length; i++) { - const objectId = objects.get(i); - const object = state.getMap('objects.' + objectId); - } -}; */ \ No newline at end of file From ae7e07386e02ff3520cb67707300c9f0d36d2e73 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:37:12 -0800 Subject: [PATCH 12/31] Update deps again --- apps/chat/package.json | 2 +- packages/usdk/package.json | 6 +----- packages/usdk/packages/upstreet-agent/package.json | 2 +- .../packages/react-agents-browser/package.json | 2 +- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 77e2e918b..12aece912 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -61,7 +61,7 @@ "class-variance-authority": "0.7.0", "classnames": "2.5.1", "clsx": "2.1.0", - "codecs": "file:../../packages/usdk/packages/upstreet-agent/packages/codecs", + "agent-codecs": "^0.0.2", "cookie": "^0.6.0", "d3-scale": "4.0.2", "date-fns": "3.3.1", diff --git a/packages/usdk/package.json b/packages/usdk/package.json index e025134a6..811bc09e8 100644 --- a/packages/usdk/package.json +++ b/packages/usdk/package.json @@ -60,7 +60,6 @@ "@supabase/supabase-js": "^2.47.1", "@tsndr/cloudflare-worker-jwt": "2.5.3", "@types/estree": "^1.0.5", - "@wasm-audio-decoders/common": "file:./packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common", "alea": "^1.0.1", "ansi-escape-sequences": "^6.2.2", "ansi-escapes": "^7.0.0", @@ -68,7 +67,7 @@ "chalk": "^5.3.0", "character-card-utils": "file:./packages/upstreet-agent/packages/character-card-utils", "cli-table3": "^0.6.4", - "codecs": "file:./packages/upstreet-agent/packages/codecs", + "agent-codecs": "^0.0.2", "commander": "^12.0.0", "cookie": "^0.6.0", "cross-spawn": "^7.0.3", @@ -89,12 +88,9 @@ "jimp": "^1.6.0", "json5": "^2.2.3", "jszip": "^3.10.1", - "lamejs": "file:./packages/upstreet-agent/packages/codecs/packages/lamejs", - "libopusjs": "file:./packages/upstreet-agent/packages/codecs/packages/libopusjs", "memoize-one": "^6.0.0", "mime": "^4.0.1", "mkdirp": "^3.0.1", - "mpg123-decoder": "file:./packages/upstreet-agent/packages/codecs/packages/mpg123-decoder", "open": "^10.1.0", "openai": "^4.56.0", "ora": "^8.1.1", diff --git a/packages/usdk/packages/upstreet-agent/package.json b/packages/usdk/packages/upstreet-agent/package.json index a809f26ce..4ea5c91cf 100644 --- a/packages/usdk/packages/upstreet-agent/package.json +++ b/packages/usdk/packages/upstreet-agent/package.json @@ -10,7 +10,7 @@ "@tsndr/cloudflare-worker-jwt": "2.5.3", "@types/jest": "^29.5.13", "browser-util-inspect": "^0.2.0", - "codecs": "file:./packages/codecs", + "agent-codecs": "^0.0.2", "debouncer": "file:./packages/debouncer", "dedent": "^1.5.3", "dotenv": "^16.4.5", diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json index 37ad986f7..236403797 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json @@ -3,6 +3,6 @@ "main": "browser-runtime.ts", "dependencies": { "react-agents": "file:../react-agents", - "codecs": "file:../codecs" + "agent-codecs": "^0.0.2" } } From 5afa016eb1219c488a68f045e35a2f5cbf90cfc3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:37:15 -0800 Subject: [PATCH 13/31] Update lock --- pnpm-lock.yaml | 163 ++++++++++++++++--------------------------------- 1 file changed, 52 insertions(+), 111 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8e0716ab..090695d7d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -98,9 +98,6 @@ importers: '@types/three': specifier: ^0.167.1 version: 0.167.2 - '@upstreet/multiplayer': - specifier: file:../../packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer - version: multiplayer@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer '@vercel/analytics': specifier: 1.1.2 version: 1.1.2 @@ -110,6 +107,12 @@ importers: '@vercel/og': specifier: 0.6.2 version: 0.6.2 + agent-codecs: + specifier: ^0.0.2 + version: 0.0.2 + agent-multiplayer: + specifier: ^0.0.4 + version: 0.0.4 ai: specifier: 3.1.5 version: 3.1.5(openai@4.76.1(zod@3.24.1))(react@18.2.0)(solid-js@1.9.3)(svelte@4.2.19)(vue@3.5.13(typescript@5.7.2))(zod@3.24.1) @@ -122,9 +125,6 @@ importers: clsx: specifier: 2.1.0 version: 2.1.0 - codecs: - specifier: file:../../packages/usdk/packages/upstreet-agent/packages/codecs - version: link:../../packages/usdk/packages/upstreet-agent/packages/codecs cookie: specifier: ^0.6.0 version: 0.6.0 @@ -243,8 +243,8 @@ importers: specifier: ^0.167.1 version: 0.167.1 u8-encoder: - specifier: ^0.0.3 - version: 0.0.3 + specifier: ^0.0.5 + version: 0.0.5 ucom: specifier: file:../../packages/ucom/src version: file:packages/ucom/src @@ -639,9 +639,9 @@ importers: '@types/estree': specifier: ^1.0.5 version: 1.0.6 - '@wasm-audio-decoders/common': - specifier: file:./packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common + agent-codecs: + specifier: ^0.0.2 + version: 0.0.2 alea: specifier: ^1.0.1 version: 1.0.1 @@ -666,9 +666,6 @@ importers: cli-table3: specifier: ^0.6.4 version: 0.6.5 - codecs: - specifier: file:./packages/upstreet-agent/packages/codecs - version: link:packages/upstreet-agent/packages/codecs commander: specifier: ^12.0.0 version: 12.1.0 @@ -741,15 +738,9 @@ importers: jszip: specifier: ^3.10.1 version: 3.10.1 - lamejs: - specifier: file:./packages/upstreet-agent/packages/codecs/packages/lamejs - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs latest-version: specifier: ^9.0.0 version: 9.0.0 - libopusjs: - specifier: file:./packages/upstreet-agent/packages/codecs/packages/libopusjs - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs memoize-one: specifier: ^6.0.0 version: 6.0.0 @@ -759,9 +750,6 @@ importers: mkdirp: specifier: ^3.0.1 version: 3.0.1 - mpg123-decoder: - specifier: file:./packages/upstreet-agent/packages/codecs/packages/mpg123-decoder - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder open: specifier: ^10.1.0 version: 10.1.0 @@ -823,8 +811,8 @@ importers: specifier: ^1.0.4 version: 1.0.4 u8-encoder: - specifier: ^0.0.3 - version: 0.0.3 + specifier: ^0.0.5 + version: 0.0.5 unique-names-generator: specifier: ^4.7.1 version: 4.7.1 @@ -954,12 +942,12 @@ importers: '@types/jest': specifier: ^29.5.13 version: 29.5.14 + agent-codecs: + specifier: ^0.0.2 + version: 0.0.2 browser-util-inspect: specifier: ^0.2.0 version: 0.2.0 - codecs: - specifier: file:./packages/codecs - version: link:packages/codecs debouncer: specifier: file:./packages/debouncer version: link:packages/debouncer @@ -1030,8 +1018,8 @@ importers: specifier: ^5.6.2 version: 5.7.2 u8-encoder: - specifier: ^0.0.3 - version: 0.0.3 + specifier: ^0.0.5 + version: 0.0.5 uuid-by-string: specifier: ^4.0.0 version: 4.0.0 @@ -1058,24 +1046,6 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) - packages/usdk/packages/upstreet-agent/packages/codecs: - dependencies: - lamejs: - specifier: file:./packages/lamejs - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs - libopusjs: - specifier: file:./packages/libopusjs - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs - mpg123-decoder: - specifier: file:./packages/mpg123-decoder - version: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder - queue-manager-async: - specifier: ^0.0.1 - version: 0.0.1 - u8-encoder: - specifier: ^0.0.3 - version: 0.0.3 - packages/usdk/packages/upstreet-agent/packages/debouncer: {} packages/usdk/packages/upstreet-agent/packages/playwright-core-lite: {} @@ -1086,9 +1056,9 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-browser: dependencies: - codecs: - specifier: file:../codecs - version: link:../codecs + agent-codecs: + specifier: ^0.0.2 + version: 0.0.2 react-agents: specifier: file:../react-agents version: link:../react-agents @@ -1104,9 +1074,9 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: - '@upstreet/multiplayer': - specifier: file:./packages/multiplayer - version: multiplayer@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer + agent-multiplayer: + specifier: ^0.0.4 + version: 0.0.4 react-agents: specifier: file:../react-agents version: link:../react-agents @@ -6163,9 +6133,6 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - '@wasm-audio-decoders/common@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common': - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common, type: directory} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -6304,6 +6271,12 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agent-codecs@0.0.2: + resolution: {integrity: sha512-IdhYyL/DgTukr1nkGpZerBoqAosR66jheA1ETOCyfgO0SC2NP5sLy3zsKF+cMyBoYX4IK1Bk7JRreWkQGuPMSw==} + + agent-multiplayer@0.0.4: + resolution: {integrity: sha512-hTQm8YudSiL197UUk8BmxyR30tKxHGoSi3SaUnW7vqtIjzqgwMo/eGBe6v8IlpJy5lY1U1DAOn0XP8QtevFKtQ==} + agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -7138,9 +7111,6 @@ packages: code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - codecs@file:packages/usdk/packages/upstreet-agent/packages/codecs: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/codecs, type: directory} - collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -10204,9 +10174,6 @@ packages: resolution: {integrity: sha512-Sz49ZWR/BjNOq+2UK1k9ONZUVq8eyuCj30Zgc8VrRNtFlTBZduzuvehUd5kjQF6/Fms3Ir3EYqzJryw9tRvsSw==} engines: {node: '>=18'} - lamejs@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs, type: directory} - language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -10245,9 +10212,6 @@ packages: engines: {node: '>=16'} hasBin: true - libopusjs@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs, type: directory} - lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -10971,9 +10935,6 @@ packages: motion-utils@11.13.0: resolution: {integrity: sha512-lq6TzXkH5c/ysJQBxgLXgM01qwBH1b4goTPh57VvZWJbVJZF/0SB31UWEn4EIqbVPf3au88n2rvK17SpDTja1A==} - mpg123-decoder@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder, type: directory} - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -10987,9 +10948,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multiplayer@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer, type: directory} - mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true @@ -13726,8 +13684,11 @@ packages: engines: {node: '>=14.17'} hasBin: true - u8-encoder@0.0.3: - resolution: {integrity: sha512-s/D0gcsrw2QhgK3vXbIOP10laR42GvhVnBGFBuApkN46IJ0uBCbK7sn6vUCHRukjLFHWgvcxy02wCUx5uTVJ1g==} + u8-encoder@0.0.4: + resolution: {integrity: sha512-dI0lrSax+ymc0LNKiFhLkmqoxWHJYNQ3ryi74jg8/SvDWHL+9nLVnyUwxW3b6PouXtwavIpFaDL199mhU1lODw==} + + u8-encoder@0.0.5: + resolution: {integrity: sha512-AOwAoUlu8DiT0AwNeRSt5oT+Dsz6Iy172FUD+Jvvb7ZRHtGWO6+DShGd0if8u0y/QQWwUrW1Mixo/vA/Qa5IsQ==} ucom@file:packages/ucom/src: resolution: {directory: packages/ucom/src, type: directory} @@ -13954,9 +13915,6 @@ packages: '@types/react': optional: true - use-strict@1.0.1: - resolution: {integrity: sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ==} - use-sync-external-store@1.2.2: resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: @@ -20942,11 +20900,6 @@ snapshots: '@vue/shared@3.5.13': {} - '@wasm-audio-decoders/common@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common': - dependencies: - '@eshaz/web-worker': 1.2.2 - simple-yenc: 1.0.4 - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -21101,6 +21054,17 @@ snapshots: agent-base@7.1.3: {} + agent-codecs@0.0.2: + dependencies: + queue-manager-async: 0.0.1 + u8-encoder: 0.0.5 + + agent-multiplayer@0.0.4: + dependencies: + '@cloudflare/kv-asset-handler': 0.3.4 + u8-encoder: 0.0.4 + yjs: 13.6.20 + agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 @@ -22033,14 +21997,6 @@ snapshots: estree-walker: 3.0.3 periscopic: 3.1.0 - codecs@file:packages/usdk/packages/upstreet-agent/packages/codecs: - dependencies: - lamejs: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs - libopusjs: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs - mpg123-decoder: file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder - queue-manager-async: 0.0.1 - u8-encoder: 0.0.3 - collapse-white-space@2.1.0: {} collect-v8-coverage@1.0.2: {} @@ -26100,10 +26056,6 @@ snapshots: ky@1.7.3: {} - lamejs@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/lamejs: - dependencies: - use-strict: 1.0.1 - language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -26173,8 +26125,6 @@ snapshots: dependencies: isomorphic.js: 0.2.5 - libopusjs@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/libopusjs: {} - lie@3.1.1: dependencies: immediate: 3.0.6 @@ -27321,10 +27271,6 @@ snapshots: motion-utils@11.13.0: {} - mpg123-decoder@file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder: - dependencies: - '@wasm-audio-decoders/common': file:packages/usdk/packages/upstreet-agent/packages/codecs/packages/mpg123-decoder/packages/wasm-audio-decoders-common - mri@1.2.0: {} ms@2.0.0: {} @@ -27333,11 +27279,6 @@ snapshots: ms@2.1.3: {} - multiplayer@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer: - dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - yjs: 13.6.20 - mustache@4.2.0: {} mz@2.7.0: @@ -28478,7 +28419,7 @@ snapshots: react-agents-client@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: - '@upstreet/multiplayer': multiplayer@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client/packages/multiplayer + agent-multiplayer: 0.0.4 react-agents: file:packages/usdk/packages/upstreet-agent/packages/react-agents react-agents-node@file:packages/usdk/packages/upstreet-agent/packages/react-agents-node: @@ -30518,7 +30459,9 @@ snapshots: typescript@5.7.2: {} - u8-encoder@0.0.3: {} + u8-encoder@0.0.4: {} + + u8-encoder@0.0.5: {} ucom@file:packages/ucom/src: {} @@ -30696,8 +30639,8 @@ snapshots: '@supabase/supabase-js': 2.47.5 '@tsndr/cloudflare-worker-jwt': 2.5.3 '@types/jest': 29.5.14 + agent-codecs: 0.0.2 browser-util-inspect: 0.2.0 - codecs: file:packages/usdk/packages/upstreet-agent/packages/codecs debouncer: file:packages/usdk/packages/upstreet-agent/packages/debouncer dedent: 1.5.3(babel-plugin-macros@3.1.0) dotenv: 16.4.7 @@ -30721,7 +30664,7 @@ snapshots: ts-jest: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.20.2)(jest@29.7.0(@types/node@18.19.68)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@18.19.68)(typescript@4.9.5)))(typescript@5.7.2) twitter-api-sdk: 1.2.1 typescript: 5.7.2 - u8-encoder: 0.0.3 + u8-encoder: 0.0.5 uuid-by-string: 4.0.0 yjs: 13.6.20 zod: 3.24.1 @@ -30831,8 +30774,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.16 - use-strict@1.0.1: {} - use-sync-external-store@1.2.2(react@18.2.0): dependencies: react: 18.2.0 From b1c93144cf48776791e202f43323f35ef4da25ce Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:51:45 -0800 Subject: [PATCH 14/31] Remove debouncer package --- .../packages/debouncer/debouncer.mjs | 106 ------------------ .../packages/debouncer/package.json | 5 - 2 files changed, 111 deletions(-) delete mode 100644 packages/usdk/packages/upstreet-agent/packages/debouncer/debouncer.mjs delete mode 100644 packages/usdk/packages/upstreet-agent/packages/debouncer/package.json diff --git a/packages/usdk/packages/upstreet-agent/packages/debouncer/debouncer.mjs b/packages/usdk/packages/upstreet-agent/packages/debouncer/debouncer.mjs deleted file mode 100644 index 2a50e0365..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/debouncer/debouncer.mjs +++ /dev/null @@ -1,106 +0,0 @@ -export class Debouncer extends EventTarget { - queueLength = 0; - running = false; - queue = []; - constructor({ - queueLength = 1, - } = {}) { - super(); - - this.queueLength = queueLength; - } - isIdle() { - return !this.running; - } - async waitForTurn(fn) { - if (!this.running) { - this.running = true; - this.dispatchEvent(new MessageEvent('idlechange', { - data: { - idle: false, - }, - })); - - let result, error; - try { - result = await fn(); - } catch(err) { - error = err; - } - - this.running = false; - if (this.queue.length > 0) { - const entry = this.queue.shift(); - this.waitForTurn(entry.call); - } else { - this.dispatchEvent(new MessageEvent('idlechange', { - data: { - idle: true, - }, - })); - } - - if (!error) { - return result; - } else { - throw error; - } - } else { - const { - promise, - resolve, - reject, - } = Promise.withResolvers(); - const call = async () => { - let result, error; - try { - result = await fn(); - } catch(err) { - error = err; - } - - if (!error) { - resolve(result); - return result; - } else { - reject(error); - throw error; - } - }; - const entry = { - call, - resolve, - reject, - }; - this.queue.push(entry); - while (this.queue.length > this.queueLength) { - const entry = this.queue.shift(); - entry.resolve(); - } - const result = await promise; - return result; - } - } -} - -/* export class MultiDebouncer { - constructor(opts) { - this.opts = opts; - - this.debouncers = new Map(); - } - async waitForTurn(key, fn) { - let debouncer = this.debouncers.get(key); - if (!debouncer) { - debouncer = new Debouncer(this.opts); - this.debouncers.set(key, debouncer); - debouncer.addEventListener('idlechange', e => { - const { idle } = e.data; - if (idle) { - this.debouncers.delete(key); - } - }); - } - return await debouncer.waitForTurn(fn); - } -} */ \ No newline at end of file diff --git a/packages/usdk/packages/upstreet-agent/packages/debouncer/package.json b/packages/usdk/packages/upstreet-agent/packages/debouncer/package.json deleted file mode 100644 index 28f4607b6..000000000 --- a/packages/usdk/packages/upstreet-agent/packages/debouncer/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "debouncer", - "version": "0.0.1", - "main": "debouncer.mjs" -} From 2b7c1d4a4cf9da28420222ceabc1a445bd9dd119 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:51:58 -0800 Subject: [PATCH 15/31] Update debouncer-async dep --- packages/usdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/usdk/package.json b/packages/usdk/package.json index 811bc09e8..b873e6fcb 100644 --- a/packages/usdk/package.json +++ b/packages/usdk/package.json @@ -71,7 +71,7 @@ "commander": "^12.0.0", "cookie": "^0.6.0", "cross-spawn": "^7.0.3", - "debouncer": "file:./packages/upstreet-agent/packages/debouncer", + "debouncer-async": "^0.0.1", "dedent": "^1.5.3", "dotenv": "^16.4.5", "electron": "^31.3.0", From fdc93d0d0a2ce1b85a7466e3c1f74b9aa9945696 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:56:35 -0800 Subject: [PATCH 16/31] Update cli imports --- packages/usdk/cli.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/usdk/cli.js b/packages/usdk/cli.js index 7ce00a08b..f6dc9fe6b 100644 --- a/packages/usdk/cli.js +++ b/packages/usdk/cli.js @@ -87,11 +87,11 @@ import { // import { // env, // } from './lib/env.mjs'; -import { timeAgo } from './packages/upstreet-agent/packages/react-agents/util/time-ago.mjs'; +// import { timeAgo } from './packages/upstreet-agent/packages/react-agents/util/time-ago.mjs'; import { featureSpecs } from './packages/upstreet-agent/packages/react-agents/util/agent-features-spec.mjs'; -import { AudioDecodeStream } from './packages/upstreet-agent/packages/codecs/audio-decode.mjs'; -import { WebPEncoder } from './packages/upstreet-agent/packages/codecs/webp-codec.mjs'; -import * as codecs from './packages/upstreet-agent/packages/codecs/ws-codec-runtime-fs.mjs'; +import { AudioDecodeStream } from 'agent-codecs/audio-decode.mjs'; +import { WebPEncoder } from 'agent-codecs/webp-codec.mjs'; +import * as codecs from 'agent-codecs/ws-codec-runtime-fs.mjs'; // import { runJest } from './lib/jest-util.mjs'; import { logUpstreetBanner } from './util/logger/log-utils.mjs'; import { makeCorsHeaders, getServerOpts } from './util/server-utils.mjs'; @@ -99,7 +99,7 @@ import { makeCorsHeaders, getServerOpts } from './util/server-utils.mjs'; // generateMnemonic, // } from './util/ethereum-utils.mjs'; import LoggerFactory from './util/logger/logger-factory.mjs'; -import { getLatestVersion } from './lib/version.mjs'; +// import { getLatestVersion } from './lib/version.mjs'; // import { // getDirectoryHash, // } from './util/hash-util.mjs'; From 37a84a28910db31e072bd15beaf4447ffeb0d22d Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:56:52 -0800 Subject: [PATCH 17/31] Update package.jsons --- apps/chat/package.json | 2 +- packages/usdk/package.json | 2 +- packages/usdk/packages/upstreet-agent/package.json | 4 ++-- .../upstreet-agent/packages/react-agents-browser/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 12aece912..163cd6c65 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -61,7 +61,7 @@ "class-variance-authority": "0.7.0", "classnames": "2.5.1", "clsx": "2.1.0", - "agent-codecs": "^0.0.2", + "agent-codecs": "^0.0.3", "cookie": "^0.6.0", "d3-scale": "4.0.2", "date-fns": "3.3.1", diff --git a/packages/usdk/package.json b/packages/usdk/package.json index b873e6fcb..409ee0001 100644 --- a/packages/usdk/package.json +++ b/packages/usdk/package.json @@ -67,7 +67,7 @@ "chalk": "^5.3.0", "character-card-utils": "file:./packages/upstreet-agent/packages/character-card-utils", "cli-table3": "^0.6.4", - "agent-codecs": "^0.0.2", + "agent-codecs": "^0.0.3", "commander": "^12.0.0", "cookie": "^0.6.0", "cross-spawn": "^7.0.3", diff --git a/packages/usdk/packages/upstreet-agent/package.json b/packages/usdk/packages/upstreet-agent/package.json index 4ea5c91cf..c71f27eb1 100644 --- a/packages/usdk/packages/upstreet-agent/package.json +++ b/packages/usdk/packages/upstreet-agent/package.json @@ -10,8 +10,8 @@ "@tsndr/cloudflare-worker-jwt": "2.5.3", "@types/jest": "^29.5.13", "browser-util-inspect": "^0.2.0", - "agent-codecs": "^0.0.2", - "debouncer": "file:./packages/debouncer", + "agent-codecs": "^0.0.3", + "debouncer-async": "^0.0.1", "dedent": "^1.5.3", "dotenv": "^16.4.5", "ethers": "^6.12.0", diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json index 236403797..092c7dc87 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-browser/package.json @@ -3,6 +3,6 @@ "main": "browser-runtime.ts", "dependencies": { "react-agents": "file:../react-agents", - "agent-codecs": "^0.0.2" + "agent-codecs": "^0.0.3" } } From bea464f719bf26ea055d9e54f50b7dd2b90d8100 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 19:57:01 -0800 Subject: [PATCH 18/31] Update agent-codecs imports --- .../packages/react-agents/devices/audio-transcriber.mjs | 2 +- .../packages/react-agents/devices/video-input.mjs | 2 +- .../packages/react-agents/util/audio-perception.mjs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/audio-transcriber.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/audio-transcriber.mjs index cdfc304f6..d5096f41d 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/audio-transcriber.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/audio-transcriber.mjs @@ -1,5 +1,5 @@ import { transcribeRealtime } from '../util/audio-perception.mjs'; -import { resample } from 'codecs/resample.mjs'; +import { resample } from 'agent-codecs/resample.mjs'; import { AudioChunker } from '../util/audio-chunker.mjs'; // diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs index 478f1ca07..5eb43323d 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/devices/video-input.mjs @@ -5,7 +5,7 @@ import { intToRGBA } from '@jimp/utils'; import chalk from 'chalk'; import ansiEscapeSequences from 'ansi-escape-sequences'; import { QueueManager } from 'queue-manager-async'; -import { WebPEncoder } from 'codecs/webp-codec.mjs'; +import { WebPEncoder } from 'agent-codecs/webp-codec.mjs'; // diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs index 1e182a4e7..c5d73fad6 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/audio-perception.mjs @@ -2,8 +2,8 @@ import { mulaw } from '../lib/alawmulaw/dist/alawmulaw.mjs'; import { floatTo16Bit, // int16ToFloat32, -} from 'codecs/convert.mjs'; -import { AudioEncodeStream } from 'codecs/audio-encode.mjs'; +} from 'agent-codecs/convert.mjs'; +import { AudioEncodeStream } from 'agent-codecs/audio-encode.mjs'; import { QueueManager } from 'queue-manager-async'; import { aiHost, From 1efd07ef4abb3bcc9f9b69348bf20d7828406962 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 20:00:18 -0800 Subject: [PATCH 19/31] Update lock --- pnpm-lock.yaml | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 090695d7d..e5dae97b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,8 +108,8 @@ importers: specifier: 0.6.2 version: 0.6.2 agent-codecs: - specifier: ^0.0.2 - version: 0.0.2 + specifier: ^0.0.3 + version: 0.0.3 agent-multiplayer: specifier: ^0.0.4 version: 0.0.4 @@ -640,8 +640,8 @@ importers: specifier: ^1.0.5 version: 1.0.6 agent-codecs: - specifier: ^0.0.2 - version: 0.0.2 + specifier: ^0.0.3 + version: 0.0.3 alea: specifier: ^1.0.1 version: 1.0.1 @@ -678,9 +678,9 @@ importers: cross-spawn: specifier: ^7.0.3 version: 7.0.6 - debouncer: - specifier: file:./packages/upstreet-agent/packages/debouncer - version: link:packages/upstreet-agent/packages/debouncer + debouncer-async: + specifier: ^0.0.1 + version: 0.0.1 dedent: specifier: ^1.5.3 version: 1.5.3(babel-plugin-macros@3.1.0) @@ -943,14 +943,14 @@ importers: specifier: ^29.5.13 version: 29.5.14 agent-codecs: - specifier: ^0.0.2 - version: 0.0.2 + specifier: ^0.0.3 + version: 0.0.3 browser-util-inspect: specifier: ^0.2.0 version: 0.2.0 - debouncer: - specifier: file:./packages/debouncer - version: link:packages/debouncer + debouncer-async: + specifier: ^0.0.1 + version: 0.0.1 dedent: specifier: ^1.5.3 version: 1.5.3(babel-plugin-macros@3.1.0) @@ -1046,8 +1046,6 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) - packages/usdk/packages/upstreet-agent/packages/debouncer: {} - packages/usdk/packages/upstreet-agent/packages/playwright-core-lite: {} packages/usdk/packages/upstreet-agent/packages/react: {} @@ -1057,8 +1055,8 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-browser: dependencies: agent-codecs: - specifier: ^0.0.2 - version: 0.0.2 + specifier: ^0.0.3 + version: 0.0.3 react-agents: specifier: file:../react-agents version: link:../react-agents @@ -6271,8 +6269,8 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - agent-codecs@0.0.2: - resolution: {integrity: sha512-IdhYyL/DgTukr1nkGpZerBoqAosR66jheA1ETOCyfgO0SC2NP5sLy3zsKF+cMyBoYX4IK1Bk7JRreWkQGuPMSw==} + agent-codecs@0.0.3: + resolution: {integrity: sha512-xVZPYW5UqRBOuB7hQxASh/+h1bqJLEgRgKBItqpPQKvF0NyCCwWsML3Z825K9tVE4Aro1hiWEhosEOyeHx0ybg==} agent-multiplayer@0.0.4: resolution: {integrity: sha512-hTQm8YudSiL197UUk8BmxyR30tKxHGoSi3SaUnW7vqtIjzqgwMo/eGBe6v8IlpJy5lY1U1DAOn0XP8QtevFKtQ==} @@ -7555,8 +7553,8 @@ packages: debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - debouncer@file:packages/usdk/packages/upstreet-agent/packages/debouncer: - resolution: {directory: packages/usdk/packages/upstreet-agent/packages/debouncer, type: directory} + debouncer-async@0.0.1: + resolution: {integrity: sha512-6H5dq8Cz9Gz9LnwUJr8MiFLXXnGy+jlBflBzB0X/tAGS0RWHT1kS+7X/vcFDn55cDpOengu0fi09iwfQrSVW5A==} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -21054,7 +21052,7 @@ snapshots: agent-base@7.1.3: {} - agent-codecs@0.0.2: + agent-codecs@0.0.3: dependencies: queue-manager-async: 0.0.1 u8-encoder: 0.0.5 @@ -22493,7 +22491,7 @@ snapshots: debounce@1.2.1: {} - debouncer@file:packages/usdk/packages/upstreet-agent/packages/debouncer: {} + debouncer-async@0.0.1: {} debug@2.6.9: dependencies: @@ -30639,9 +30637,9 @@ snapshots: '@supabase/supabase-js': 2.47.5 '@tsndr/cloudflare-worker-jwt': 2.5.3 '@types/jest': 29.5.14 - agent-codecs: 0.0.2 + agent-codecs: 0.0.3 browser-util-inspect: 0.2.0 - debouncer: file:packages/usdk/packages/upstreet-agent/packages/debouncer + debouncer-async: 0.0.1 dedent: 1.5.3(babel-plugin-macros@3.1.0) dotenv: 16.4.7 ethers: 6.13.4 From 08b5b7820e77db922c93b144e6f6766cbf1951b0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 20:00:26 -0800 Subject: [PATCH 20/31] More imports fixes --- packages/usdk/lib/interactor.js | 2 +- packages/usdk/lib/zip-util.mjs | 2 +- packages/usdk/util/connect-utils.mjs | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/usdk/lib/interactor.js b/packages/usdk/lib/interactor.js index aa8635644..ea9758a43 100644 --- a/packages/usdk/lib/interactor.js +++ b/packages/usdk/lib/interactor.js @@ -2,7 +2,7 @@ import { z } from 'zod'; import dedent from 'dedent'; import { defaultModels } from '../packages/upstreet-agent/packages/react-agents/constants.mjs'; import { fetchJsonCompletion } from '../packages/upstreet-agent/packages/react-agents/util/fetch.mjs'; -import { QueueManager } from 'queue-manager'; +import { QueueManager } from 'queue-manager-async'; // diff --git a/packages/usdk/lib/zip-util.mjs b/packages/usdk/lib/zip-util.mjs index 9461fbe41..62cb95150 100644 --- a/packages/usdk/lib/zip-util.mjs +++ b/packages/usdk/lib/zip-util.mjs @@ -5,7 +5,7 @@ import { mkdirp } from 'mkdirp'; import { rimraf } from 'rimraf'; import JSZip from 'jszip'; import archiver from 'archiver'; -import { QueueManager } from 'queue-manager'; +import { QueueManager } from 'queue-manager-async'; // Helper function to filter files with regular expressions const filterFiles = (files, excludePatterns) => { diff --git a/packages/usdk/util/connect-utils.mjs b/packages/usdk/util/connect-utils.mjs index 28d027634..0c93fb8fa 100644 --- a/packages/usdk/util/connect-utils.mjs +++ b/packages/usdk/util/connect-utils.mjs @@ -7,7 +7,7 @@ import alea from 'alea'; import pc from 'picocolors'; import { uniqueNamesGenerator, adjectives, colors, animals } from 'unique-names-generator'; -import { QueueManager } from '../packages/upstreet-agent/packages/queue-manager/queue-manager.mjs'; +import { QueueManager } from 'queue-manager-async'; // import { lembed } from '../packages/upstreet-agent/packages/react-agents/util/embedding.mjs'; import { makeId } from '../packages/upstreet-agent/packages/react-agents/util/util.mjs'; import { parseAgentSpecs } from '../lib/agent-spec-utils.mjs'; @@ -33,8 +33,8 @@ import { } from '../packages/upstreet-agent/packages/react-agents/devices/video-input.mjs'; import { getLoginJwt } from '../util/login-util.mjs'; import { ReactAgentsClient, ReactAgentsMultiplayerConnection } from '../packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs'; -import { AudioDecodeStream } from '../packages/upstreet-agent/packages/codecs/audio-decode.mjs'; -import * as codecs from '../packages/upstreet-agent/packages/codecs/ws-codec-runtime-fs.mjs'; +import { AudioDecodeStream } from 'agent-codecs/audio-decode.mjs'; +import * as codecs from 'agent-codecs/ws-codec-runtime-fs.mjs'; import { webbrowserActionsToText } from '../packages/upstreet-agent/packages/react-agents/util/browser-action-utils.mjs'; import { From f149fa426318aab0413f45c900a589bc542e4db4 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:08:58 -0800 Subject: [PATCH 21/31] Update agent-multiplayer dep --- apps/chat/package.json | 2 +- .../upstreet-agent/packages/react-agents-client/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 163cd6c65..6232c0226 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -53,7 +53,7 @@ "@tsndr/cloudflare-worker-jwt": "^2.5.3", "@types/eventsource": "^1.1.15", "@types/three": "^0.167.1", - "agent-multiplayer": "^0.0.4", + "agent-multiplayer": "^0.0.6", "@vercel/analytics": "1.1.2", "@vercel/kv": "1.0.1", "@vercel/og": "0.6.2", diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json index 2a292877a..3e9c00b79 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json @@ -4,6 +4,6 @@ "main": "react-agents-client.mjs", "dependencies": { "react-agents": "file:../react-agents", - "agent-multiplayer": "^0.0.4" + "agent-multiplayer": "^0.0.6" } } From 273dada03b6bf2cb82c4827663333b45daf50593 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:09:08 -0800 Subject: [PATCH 22/31] Update lock --- pnpm-lock.yaml | 140 +++++-------------------------------------------- 1 file changed, 14 insertions(+), 126 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5dae97b0..e73feb689 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,8 +111,8 @@ importers: specifier: ^0.0.3 version: 0.0.3 agent-multiplayer: - specifier: ^0.0.4 - version: 0.0.4 + specifier: ^0.0.6 + version: 0.0.6 ai: specifier: 3.1.5 version: 3.1.5(openai@4.76.1(zod@3.24.1))(react@18.2.0)(solid-js@1.9.3)(svelte@4.2.19)(vue@3.5.13(typescript@5.7.2))(zod@3.24.1) @@ -560,7 +560,7 @@ importers: version: 29.7.0(@babel/core@7.26.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + version: 29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -587,7 +587,7 @@ importers: version: 6.1.1(rollup@3.29.5)(typescript@5.7.2) rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + version: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) sass: specifier: ^1.76.0 version: 1.82.0 @@ -1073,8 +1073,8 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: agent-multiplayer: - specifier: ^0.0.4 - version: 0.0.4 + specifier: ^0.0.6 + version: 0.0.6 react-agents: specifier: file:../react-agents version: link:../react-agents @@ -6272,8 +6272,8 @@ packages: agent-codecs@0.0.3: resolution: {integrity: sha512-xVZPYW5UqRBOuB7hQxASh/+h1bqJLEgRgKBItqpPQKvF0NyCCwWsML3Z825K9tVE4Aro1hiWEhosEOyeHx0ybg==} - agent-multiplayer@0.0.4: - resolution: {integrity: sha512-hTQm8YudSiL197UUk8BmxyR30tKxHGoSi3SaUnW7vqtIjzqgwMo/eGBe6v8IlpJy5lY1U1DAOn0XP8QtevFKtQ==} + agent-multiplayer@0.0.6: + resolution: {integrity: sha512-1fhsLizDY4laAhUTJNYuwWt2FOFG0QjbgoZiZVKG1cirIUphwWtGu+748/mfZzD5VgrOlCR/zVYWYejuXDwk7A==} agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} @@ -16252,41 +16252,6 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.7.8 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2))': dependencies: '@jest/console': 29.7.0 @@ -21057,7 +21022,7 @@ snapshots: queue-manager-async: 0.0.1 u8-encoder: 0.0.5 - agent-multiplayer@0.0.4: + agent-multiplayer@0.0.6: dependencies: '@cloudflare/kv-asset-handler': 0.3.4 u8-encoder: 0.0.4 @@ -22220,21 +22185,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-jest@29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@jest/types': 29.6.3 @@ -25369,25 +25319,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-cli@29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) @@ -25469,37 +25400,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): - dependencies: - '@babel/core': 7.26.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0(babel-plugin-macros@3.1.0) - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 22.7.8 - ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@babel/core': 7.26.0 @@ -25815,18 +25715,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): - dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest@29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) @@ -27968,13 +27856,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2) + ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2) postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: @@ -28417,7 +28305,7 @@ snapshots: react-agents-client@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: - agent-multiplayer: 0.0.4 + agent-multiplayer: 0.0.6 react-agents: file:packages/usdk/packages/upstreet-agent/packages/react-agents react-agents-node@file:packages/usdk/packages/upstreet-agent/packages/react-agents-node: @@ -29084,7 +28972,7 @@ snapshots: dependencies: rollup-plugin-inject: 3.0.2 - rollup-plugin-postcss@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + rollup-plugin-postcss@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -29093,7 +28981,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.4.49 - postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) postcss-modules: 4.3.1(postcss@8.4.49) promise.series: 0.2.0 resolve: 1.22.8 From 70e08147af202b477a6229335c7c96f97aab4099 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:09:23 -0800 Subject: [PATCH 23/31] Rewriting react agents client --- .../react-agents-client.mjs | 121 +++++++++++++++--- 1 file changed, 101 insertions(+), 20 deletions(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs index 4b0934715..586b2cb5d 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs @@ -1,8 +1,9 @@ import { multiplayerEndpointUrl, } from 'react-agents/util/endpoints.mjs'; -import { NetworkRealms } from './packages/multiplayer/public/network-realms.mjs'; // XXX should be a deduplicated import, in a separate npm module -// import { webbrowserActionsToText } from './packages/upstreet-agent/packages/react-agents/util/browser-action-utils.mjs'; +import * as agentMultiplayer from 'agent-multiplayer'; +import { METHODS, METHOD_NAMES } from 'agent-multiplayer'; +// import type { AgentMultiplayerApi } from 'agent-multiplayer'; import { Player, } from './util/player.mjs'; @@ -12,7 +13,8 @@ import { SpeakerMap, } from './util/maps.mjs'; -export class ReactAgentsClient { +// XXX handle joins +/* export class ReactAgentsClient { url; constructor(url) { this.url = url; @@ -56,9 +58,81 @@ export class ReactAgentsClient { } } } -} +} */ + +const waitForMessageType = (agentMultiplayerApi, method) => { + const methodName = METHOD_NAMES[method]; + if (!methodName) { + throw new Error(`Unknown method: ${method}`); + } + + return new Promise((resolve, reject) => { + const onmethod = (o) => { + resolve(o); + webSocket.removeEventListener(methodName, onmethod); + webSocket.removeEventListener('close', onclose); + webSocket.removeEventListener('error', onerror); + }; + agentMultiplayerApi.addEventListener(methodName, onmethod); + + const onclose = () => { + reject(new Error('AgentMultiplayerApi closed')); + }; + agentMultiplayerApi.addEventListener('close', onclose); + + const onerror = (e) => { + reject(e); + }; + agentMultiplayerApi.addEventListener('error', onerror); + }); +}; + +class ReactAgentsMultiplayerConnection { + static async connect({ + agentMultiplayerConnection, + profile, + signal, + }) { + // 1. set the player data + // 2. wait for network init message + // 3. bind listeners + + agentMultiplayerConnection.send({ + method: METHODS.SET_PLAYER_DATA, + args: { + playerData: profile, + }, + }); + + const networkInitMessage = await waitForMessageType(agentMultiplayerConnection, METHODS.NETWORK_INIT); + if (signal?.aborted) { + throw new Error('Connection aborted'); + } + const { + playerId, + players, + } = networkInitMessage.args; + + // set up result + + const result = new EventTarget(); + + const playersMap = new PlayersMap(); + result.playersMap = playersMap; + const typingMap = new TypingMap(); + result.typingMap = typingMap; + const speakerMap = new SpeakerMap(); + result.speakerMap = speakerMap; + + // initialize local player + + // initialize remote players + + // XXX + + return result; + } -export class ReactAgentsMultiplayerConnection extends EventTarget { static logLevels = { error: 0, warn: 1, @@ -66,6 +140,7 @@ export class ReactAgentsMultiplayerConnection extends EventTarget { debug: 3, }; static defaultLogLevel = ReactAgentsMultiplayerConnection.logLevels.info; + room; profile; metadata; @@ -74,19 +149,19 @@ export class ReactAgentsMultiplayerConnection extends EventTarget { speakerMap = new SpeakerMap(); realms; connectPromise; - constructor({ - room, - profile, - metadata = {}, - }) { - super(); + // constructor({ + // room, + // profile, + // metadata = {}, + // }) { + // super(); - this.room = room; - this.profile = profile; - this.metadata = metadata; + // this.room = room; + // this.profile = profile; + // this.metadata = metadata; - this.connectPromise = this.connect(); - } + // this.connectPromise = this.connect(); + // } log(...args) { this.dispatchEvent(new MessageEvent('log', { data: { @@ -315,14 +390,20 @@ export class ReactAgentsMultiplayerConnection extends EventTarget { return this.realms.removeVideoSource(videoSource); } } + export const connect = async ({ room, profile, + signal, }) => { - const connection = new ReactAgentsMultiplayerConnection({ - room, + const u = `${multiplayerEndpointUrl}/room/${room}/websocket`; + const agentMultiplayerConnection = await agentMultiplayer.connect(u, { + signal, + }); + const ramConnection = await ReactAgentsMultiplayerConnection.connect({ + agentMultiplayerConnection, profile, + signal, }); - await connection.waitForConnect(); - return connection; + return ramConnection; }; \ No newline at end of file From c37d59d3ecbd822589309757241016abe3c7e0aa Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:09:32 -0800 Subject: [PATCH 24/31] Update multiplayer endpoint --- .../upstreet-agent/packages/react-agents/util/endpoints.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/endpoints.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/endpoints.mjs index 5db4ba4ec..cd7d19379 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents/util/endpoints.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents/util/endpoints.mjs @@ -1,7 +1,7 @@ export const aiHost = `https://ai.upstreet.ai`; export const aiProxyHost = `ai-proxy.isekaichat.workers.dev`; export const authHost = 'https://auth.upstreet.ai'; -export const multiplayerEndpointUrl = 'wss://multiplayer.isekaichat.workers.dev'; +export const multiplayerEndpointUrl = 'wss://agent-multiplayer.isekaichat.workers.dev'; export const deployEndpointUrl = `https://deploy.upstreet.ai`; export const r2EndpointUrl = `https://r2.upstreet.ai`; export const chatEndpointUrl = `https://upstreet.ai`; From 83ea35ff177dbe97cd76a0793278cf741edf4fe3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:50:42 -0800 Subject: [PATCH 25/31] Update agent-multiplayer dep --- apps/chat/package.json | 2 +- .../upstreet-agent/packages/react-agents-client/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 6232c0226..76963ec02 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -53,7 +53,7 @@ "@tsndr/cloudflare-worker-jwt": "^2.5.3", "@types/eventsource": "^1.1.15", "@types/three": "^0.167.1", - "agent-multiplayer": "^0.0.6", + "agent-multiplayer": "^0.0.7", "@vercel/analytics": "1.1.2", "@vercel/kv": "1.0.1", "@vercel/og": "0.6.2", diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json index 3e9c00b79..ff4b0f749 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json @@ -4,6 +4,6 @@ "main": "react-agents-client.mjs", "dependencies": { "react-agents": "file:../react-agents", - "agent-multiplayer": "^0.0.6" + "agent-multiplayer": "^0.0.7" } } From 8dc7513dc4663fda481497e8990ec1f531d39d4e Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:50:51 -0800 Subject: [PATCH 26/31] Update lock --- pnpm-lock.yaml | 140 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 126 insertions(+), 14 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e73feb689..9c5e14559 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,8 +111,8 @@ importers: specifier: ^0.0.3 version: 0.0.3 agent-multiplayer: - specifier: ^0.0.6 - version: 0.0.6 + specifier: ^0.0.7 + version: 0.0.7 ai: specifier: 3.1.5 version: 3.1.5(openai@4.76.1(zod@3.24.1))(react@18.2.0)(solid-js@1.9.3)(svelte@4.2.19)(vue@3.5.13(typescript@5.7.2))(zod@3.24.1) @@ -560,7 +560,7 @@ importers: version: 29.7.0(@babel/core@7.26.0) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) + version: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -587,7 +587,7 @@ importers: version: 6.1.1(rollup@3.29.5)(typescript@5.7.2) rollup-plugin-postcss: specifier: ^4.0.2 - version: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) + version: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) sass: specifier: ^1.76.0 version: 1.82.0 @@ -1073,8 +1073,8 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: agent-multiplayer: - specifier: ^0.0.6 - version: 0.0.6 + specifier: ^0.0.7 + version: 0.0.7 react-agents: specifier: file:../react-agents version: link:../react-agents @@ -6272,8 +6272,8 @@ packages: agent-codecs@0.0.3: resolution: {integrity: sha512-xVZPYW5UqRBOuB7hQxASh/+h1bqJLEgRgKBItqpPQKvF0NyCCwWsML3Z825K9tVE4Aro1hiWEhosEOyeHx0ybg==} - agent-multiplayer@0.0.6: - resolution: {integrity: sha512-1fhsLizDY4laAhUTJNYuwWt2FOFG0QjbgoZiZVKG1cirIUphwWtGu+748/mfZzD5VgrOlCR/zVYWYejuXDwk7A==} + agent-multiplayer@0.0.7: + resolution: {integrity: sha512-++vBmIhoAhQ4oqZlK3ZOv2U+VnUo0x+ZOSu5FbQJPNrD9GO7pOaPZkQ6KCO7T/RzRdkENjTblwLHv/ZSYvFabQ==} agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} @@ -16252,6 +16252,41 @@ snapshots: - supports-color - ts-node + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.7.8 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2))': dependencies: '@jest/console': 29.7.0 @@ -21022,7 +21057,7 @@ snapshots: queue-manager-async: 0.0.1 u8-encoder: 0.0.5 - agent-multiplayer@0.0.6: + agent-multiplayer@0.0.7: dependencies: '@cloudflare/kv-asset-handler': 0.3.4 u8-encoder: 0.0.4 @@ -22185,6 +22220,21 @@ snapshots: - supports-color - ts-node + create-jest@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + create-jest@29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@jest/types': 29.6.3 @@ -25319,6 +25369,25 @@ snapshots: - supports-color - ts-node + jest-cli@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest-cli@29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) @@ -25400,6 +25469,37 @@ snapshots: - babel-plugin-macros - supports-color + jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + dependencies: + '@babel/core': 7.26.0 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.7.8 + ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + jest-config@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@babel/core': 7.26.0 @@ -25715,6 +25815,18 @@ snapshots: - supports-color - ts-node + jest@29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.7.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest@29.7.0(@types/node@22.8.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): dependencies: '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) @@ -27856,13 +27968,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): + postcss-load-config@3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2) + ts-node: 10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2) postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@20.11.5)(typescript@5.7.2)): dependencies: @@ -28305,7 +28417,7 @@ snapshots: react-agents-client@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: - agent-multiplayer: 0.0.6 + agent-multiplayer: 0.0.7 react-agents: file:packages/usdk/packages/upstreet-agent/packages/react-agents react-agents-node@file:packages/usdk/packages/upstreet-agent/packages/react-agents-node: @@ -28972,7 +29084,7 @@ snapshots: dependencies: rollup-plugin-inject: 3.0.2 - rollup-plugin-postcss@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)): + rollup-plugin-postcss@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)): dependencies: chalk: 4.1.2 concat-with-sourcemaps: 1.1.0 @@ -28981,7 +29093,7 @@ snapshots: p-queue: 6.6.2 pify: 5.0.0 postcss: 8.4.49 - postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.8.1)(typescript@5.7.2)) + postcss-load-config: 3.1.4(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.10.1(@swc/helpers@0.5.13))(@types/node@22.7.8)(typescript@5.7.2)) postcss-modules: 4.3.1(postcss@8.4.49) promise.series: 0.2.0 resolve: 1.22.8 From f1c76c6db2c4ffe8e433f2038df7d38f79d3b189 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:51:24 -0800 Subject: [PATCH 27/31] Update react agents clients --- .../react-agents-client.mjs | 159 +++++++++++++++++- 1 file changed, 154 insertions(+), 5 deletions(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs index 586b2cb5d..287e87624 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs @@ -87,6 +87,13 @@ const waitForMessageType = (agentMultiplayerApi, method) => { }); }; +// type ReactAgentsMultiplayerConnectionApi = { +// playersMap: PlayersMap; +// typingMap: TypingMap; +// speakerMap: SpeakerMap; +// log: (...args: any[]) => void; +// }; + class ReactAgentsMultiplayerConnection { static async connect({ agentMultiplayerConnection, @@ -114,21 +121,163 @@ class ReactAgentsMultiplayerConnection { } = networkInitMessage.args; // set up result - const result = new EventTarget(); - + // members + result.playerId = playerId; const playersMap = new PlayersMap(); result.playersMap = playersMap; const typingMap = new TypingMap(); result.typingMap = typingMap; const speakerMap = new SpeakerMap(); result.speakerMap = speakerMap; + // methods + result.log = (...args) => { + agentMultiplayerConnection.send({ + method: METHODS.LOG, + args: { + playerId, + args, + }, + }); + }; + result.sendChatMessage = (message, attachments) => { + agentMultiplayerConnection.send({ + method: METHODS.CHAT, + args: { + playerId, + message, + attachments, + }, + }); + }; + result.setTyping = (typing) => { + agentMultiplayerConnection.send({ + method: METHODS.TYPING, + args: { + playerId, + typing, + }, + }); + }; + result.setSpeaking = (speaking) => { + agentMultiplayerConnection.send({ + method: METHODS.SPEAKING, + args: { + playerId, + speaking, + }, + }); + }; // initialize local player + const localPlayer = new Player(playerId, profile); + playersMap.add(playerId, localPlayer); // initialize remote players + for (const player of players) { + const { + playerId, + playerData, + } = player; + const remotePlayer = new Player(playerId, playerData); + playersMap.add(playerId, remotePlayer); + } - // XXX + // bind listeners + [ + [METHODS.CHAT, 'chat'], + [METHODS.LOG, 'log'], + [METHODS.AUDIO, 'audio'], + [METHODS.AUDIOSTART, 'audiostart'], + [METHODS.AUDIOEND, 'audioend'], + [METHODS.VIDEO, 'video'], + [METHODS.VIDEOSTART, 'videostart'], + [METHODS.VIDEOEND, 'videoend'], + ].forEach(([method, eventName]) => { + const methodName = METHOD_NAMES[method]; + if (!methodName) { + throw new Error(`Unknown method: ${method}`); + } + agentMultiplayerConnection.addEventListener(methodName, e => { + result.dispatchEvent(new MessageEvent(eventName, { + data: e.data, + })); + }); + }); + agentMultiplayerConnection.addEventListener(METHOD_NAMES[METHODS.JOIN], e => { + const { + playerId, + playerData, + } = e.data; + let remotePlayer = playersMap.get(playerId); + if (!remotePlayer) { + remotePlayer = new Player(playerId, playerData); + playersMap.add(playerId, remotePlayer); + + result.dispatchEvent(new MessageEvent('join', { + data: { + player: remotePlayer, + }, + })); + } else { + result.log('remote player already in playersMap', playerId); + throw new Error('remote player already in playersMap: ' + playerId); + } + }); + agentMultiplayerConnection.addEventListener(METHOD_NAMES[METHODS.LEAVE], e => { + const { + playerId, + } = e.data; + const remotePlayer = playersMap.get(playerId); + if (remotePlayer) { + playersMap.remove(playerId); + result.dispatchEvent(new MessageEvent('leave', { + data: { + player: remotePlayer, + }, + })); + } else { + result.log('remote player not found during leave', playerId); + throw new Error('remote player not found during leave'); + } + }); + agentMultiplayerConnection.addEventListener(METHOD_NAMES[METHODS.TYPING], e => { + const { + playerId, + typing, + } = e.data; + typingMap.set(playerId, typing); + }); + agentMultiplayerConnection.addEventListener(METHOD_NAMES[METHODS.SPEAKING], e => { + const { + playerId, + speaking, + } = e.data; + speakerMap.set(playerId, speaking); + }); + agentMultiplayerConnection.addEventListener(METHOD_NAMES[METHODS.SET_PLAYER_DATA], e => { + const { + playerId, + playerData, + } = e.data; + const player = playersMap.get(playerId); + if (player) { + player.setPlayerData(playerData); + } else { + result.log('player not found during set player data', playerId); + throw new Error('player not found during set player data: ' + playerId); + } + }); + [ + 'close', + 'error', + ].forEach(eventName => { + agentMultiplayerConnection.addEventListener(eventName, e => { + result.dispatchEvent(new MessageEvent(eventName, { + data: e.data, + })); + }); + }); return result; } @@ -141,7 +290,7 @@ class ReactAgentsMultiplayerConnection { }; static defaultLogLevel = ReactAgentsMultiplayerConnection.logLevels.info; - room; + /* room; profile; metadata; playersMap = new PlayersMap(); @@ -388,7 +537,7 @@ class ReactAgentsMultiplayerConnection { } removeVideoSource(videoSource) { return this.realms.removeVideoSource(videoSource); - } + } */ } export const connect = async ({ From 26e50ad507faae431f72b55edde3b17c9267b5b0 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 21:51:32 -0800 Subject: [PATCH 28/31] Update maps code --- .../react-agents-client/util/maps.mjs | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/util/maps.mjs b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/util/maps.mjs index 2eac76cea..bb0316ae1 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/util/maps.mjs +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/util/maps.mjs @@ -43,19 +43,28 @@ export class PlayersMap extends EventTarget { } export class TypingMap extends EventTarget { #internalMap = new Map(); // playerId: string -> { userId: string, name: string, typing: boolean } - getMap() { - return this.#internalMap; + // getMap() { + // return this.#internalMap; + // } + get(playerId) { + return this.#internalMap.get(playerId); } - set(playerId, spec) { - this.#internalMap.set(playerId, spec); + set(playerId, typing) { + this.#internalMap.set(playerId, typing); this.dispatchEvent(new MessageEvent('typingchange', { - data: spec, + data: { + playerId, + typing, + }, })); } clear() { - for (const [playerId, spec] of this.#internalMap) { + for (const [playerId, typing] of this.#internalMap) { this.dispatchEvent(new MessageEvent('typingchange', { - data: spec, + data: { + playerId, + typing, + }, })); } this.#internalMap.clear(); @@ -63,7 +72,34 @@ export class TypingMap extends EventTarget { } export class SpeakerMap extends EventTarget { #internalMap = new Map(); // playerId: string -> boolean - #localSpeakingCount = 0; + // getMap() { + // return this.#internalMap; + // } + get(playerId) { + return this.#internalMap.get(playerId); + } + set(playerId, speaking) { + this.#internalMap.set(playerId, speaking); + this.dispatchEvent(new MessageEvent('speakingchange', { + data: { + playerId, + speaking, + }, + })); + } + clear() { + for (const [playerId, speaking] of this.#internalMap) { + this.dispatchEvent(new MessageEvent('speakingchange', { + data: { + playerId, + speaking, + }, + })); + } + this.#internalMap.clear(); + } + + /* #localSpeakingCount = 0; #lastPlaying = false; getRemote(playerId) { return this.#internalMap.get(playerId) ?? 0; @@ -172,5 +208,5 @@ export class SpeakerMap extends EventTarget { this.#internalMap.clear(); this.#localSpeakingCount = 0; this.#lastPlaying = false; - } + } */ } \ No newline at end of file From f983318426fd8580ea21dc03413c2f7e13afc91a Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 22:39:46 -0800 Subject: [PATCH 29/31] Update agent-multiplayer dep --- apps/chat/package.json | 2 +- .../upstreet-agent/packages/react-agents-client/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chat/package.json b/apps/chat/package.json index 76963ec02..7e4afc42f 100644 --- a/apps/chat/package.json +++ b/apps/chat/package.json @@ -53,7 +53,7 @@ "@tsndr/cloudflare-worker-jwt": "^2.5.3", "@types/eventsource": "^1.1.15", "@types/three": "^0.167.1", - "agent-multiplayer": "^0.0.7", + "agent-multiplayer": "^0.0.8", "@vercel/analytics": "1.1.2", "@vercel/kv": "1.0.1", "@vercel/og": "0.6.2", diff --git a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json index ff4b0f749..bfbc05dfc 100644 --- a/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json +++ b/packages/usdk/packages/upstreet-agent/packages/react-agents-client/package.json @@ -4,6 +4,6 @@ "main": "react-agents-client.mjs", "dependencies": { "react-agents": "file:../react-agents", - "agent-multiplayer": "^0.0.7" + "agent-multiplayer": "^0.0.8" } } From b7c422d3fef3f149ca2941cd16da2eb63daf9f78 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 22:39:58 -0800 Subject: [PATCH 30/31] Update lock --- pnpm-lock.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c5e14559..f75aba262 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,8 +111,8 @@ importers: specifier: ^0.0.3 version: 0.0.3 agent-multiplayer: - specifier: ^0.0.7 - version: 0.0.7 + specifier: ^0.0.8 + version: 0.0.8 ai: specifier: 3.1.5 version: 3.1.5(openai@4.76.1(zod@3.24.1))(react@18.2.0)(solid-js@1.9.3)(svelte@4.2.19)(vue@3.5.13(typescript@5.7.2))(zod@3.24.1) @@ -1073,8 +1073,8 @@ importers: packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: agent-multiplayer: - specifier: ^0.0.7 - version: 0.0.7 + specifier: ^0.0.8 + version: 0.0.8 react-agents: specifier: file:../react-agents version: link:../react-agents @@ -6272,8 +6272,8 @@ packages: agent-codecs@0.0.3: resolution: {integrity: sha512-xVZPYW5UqRBOuB7hQxASh/+h1bqJLEgRgKBItqpPQKvF0NyCCwWsML3Z825K9tVE4Aro1hiWEhosEOyeHx0ybg==} - agent-multiplayer@0.0.7: - resolution: {integrity: sha512-++vBmIhoAhQ4oqZlK3ZOv2U+VnUo0x+ZOSu5FbQJPNrD9GO7pOaPZkQ6KCO7T/RzRdkENjTblwLHv/ZSYvFabQ==} + agent-multiplayer@0.0.8: + resolution: {integrity: sha512-/R19mMbGKVvQn41lqk43nAni251rCMXqDxylKOJ3WF5ximus/gw0D1yHfcLu+2ImVSSHwYhhgONWk6FwjwQKPA==} agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} @@ -21057,7 +21057,7 @@ snapshots: queue-manager-async: 0.0.1 u8-encoder: 0.0.5 - agent-multiplayer@0.0.7: + agent-multiplayer@0.0.8: dependencies: '@cloudflare/kv-asset-handler': 0.3.4 u8-encoder: 0.0.4 @@ -28417,7 +28417,7 @@ snapshots: react-agents-client@file:packages/usdk/packages/upstreet-agent/packages/react-agents-client: dependencies: - agent-multiplayer: 0.0.7 + agent-multiplayer: 0.0.8 react-agents: file:packages/usdk/packages/upstreet-agent/packages/react-agents react-agents-node@file:packages/usdk/packages/upstreet-agent/packages/react-agents-node: From e76111a62b84ccb67f759d0e860c47a221fe9cc3 Mon Sep 17 00:00:00 2001 From: Avaer Kazmer Date: Sun, 16 Feb 2025 22:40:26 -0800 Subject: [PATCH 31/31] Updating connect utils --- packages/usdk/util/connect-utils.mjs | 75 +++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 12 deletions(-) diff --git a/packages/usdk/util/connect-utils.mjs b/packages/usdk/util/connect-utils.mjs index 0c93fb8fa..bf0f92370 100644 --- a/packages/usdk/util/connect-utils.mjs +++ b/packages/usdk/util/connect-utils.mjs @@ -19,6 +19,7 @@ import { workersHost, aiProxyHost, usdkDiscordUrl, + multiplayerEndpointUrl, } from '../packages/upstreet-agent/packages/react-agents/util/endpoints.mjs'; import { @@ -32,7 +33,9 @@ import { TerminalVideoRenderer, } from '../packages/upstreet-agent/packages/react-agents/devices/video-input.mjs'; import { getLoginJwt } from '../util/login-util.mjs'; -import { ReactAgentsClient, ReactAgentsMultiplayerConnection } from '../packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs'; +// import { ReactAgentsClient, ReactAgentsMultiplayerConnection } from '../packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs'; +import * as reactAgentsClient from '../packages/upstreet-agent/packages/react-agents-client/react-agents-client.mjs'; +// XXX finish this import { AudioDecodeStream } from 'agent-codecs/audio-decode.mjs'; import * as codecs from 'agent-codecs/ws-codec-runtime-fs.mjs'; import { webbrowserActionsToText } from '../packages/upstreet-agent/packages/react-agents/util/browser-action-utils.mjs'; @@ -87,6 +90,40 @@ const getUserProfile = async () => { return user; }; +const agentJoin = async ({ + agentUrl, + endpointUrl, + room, + only, +}) => { + const res = await fetch(`${agentUrl}/join`, { + method: 'POST', + body: JSON.stringify({ + endpointUrl, + room, + only, + }), + }); + const json = await res.json(); + return json; +}; + +const agentLeave = async ({ + agentUrl, + endpointUrl, + room, +}) => { + const res = await fetch(`${agentUrl}/leave`, { + method: 'POST', + body: JSON.stringify({ + endpointUrl, + room, + }), + }); + const json = await res.json(); + return json; +}; + const startMultiplayerRepl = ({ profile, realms, @@ -930,11 +967,19 @@ export const join = async (args) => { if (room) { try { const joinPromises = agentSpecs.map(async (agentSpec) => { - const u = `${getAgentSpecHost(agentSpec)}`; - const agentClient = new ReactAgentsClient(u); - await agentClient.join(room, { + const agentUrl = `${getAgentSpecHost(agentSpec)}`; + await agentJoin({ + agentUrl, + endpointUrl: multiplayerEndpointUrl, + room, only: true, }); + + // const u = `${getAgentSpecHost(agentSpec)}`; + // const agentClient = new ReactAgentsClient(u); + // await agentClient.join(room, { + // only: true, + // }); }); await Promise.all(joinPromises); } catch (err) { @@ -953,15 +998,21 @@ export const leave = async (args) => { if (agentSpecs.length === 1) { if (room) { const _leaveAgent = async (agentSpec, room) => { - const u = `${getAgentSpecHost(agentSpec)}/leave`; - const leaveReq = await fetch(u, { - method: 'POST', - body: JSON.stringify({ - room, - }), + const agentUrl = `${getAgentSpecHost(agentSpec)}`; + await agentLeave({ + agentUrl, + endpointUrl: multiplayerEndpointUrl, + room, }); - const leaveJson = await leaveReq.json(); - // console.log('leave json', leaveJson); + + // const u = `${getAgentSpecHost(agentSpec)}/leave`; + // const leaveReq = await fetch(u, { + // method: 'POST', + // body: JSON.stringify({ + // room, + // }), + // }); + // const leaveJson = await leaveReq.json(); }; return await _leaveAgent(agentSpecs[0], room);