@marmooo/midy 0.0.8 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/midy-GM1.d.ts +4 -43
- package/esm/midy-GM1.d.ts.map +1 -1
- package/esm/midy-GM1.js +39 -37
- package/esm/midy-GM2.d.ts +64 -113
- package/esm/midy-GM2.d.ts.map +1 -1
- package/esm/midy-GM2.js +301 -95
- package/esm/midy-GMLite.d.ts +4 -39
- package/esm/midy-GMLite.d.ts.map +1 -1
- package/esm/midy-GMLite.js +39 -37
- package/esm/midy.d.ts +64 -135
- package/esm/midy.d.ts.map +1 -1
- package/esm/midy.js +301 -99
- package/package.json +1 -1
- package/script/midy-GM1.d.ts +4 -43
- package/script/midy-GM1.d.ts.map +1 -1
- package/script/midy-GM1.js +39 -37
- package/script/midy-GM2.d.ts +64 -113
- package/script/midy-GM2.d.ts.map +1 -1
- package/script/midy-GM2.js +301 -95
- package/script/midy-GMLite.d.ts +4 -39
- package/script/midy-GMLite.d.ts.map +1 -1
- package/script/midy-GMLite.js +39 -37
- package/script/midy.d.ts +64 -135
- package/script/midy.d.ts.map +1 -1
- package/script/midy.js +301 -99
package/esm/midy-GMLite.js
CHANGED
|
@@ -183,23 +183,23 @@ export class MidyGMLite {
|
|
|
183
183
|
this.totalTime = this.calcTotalTime();
|
|
184
184
|
}
|
|
185
185
|
setChannelAudioNodes(audioContext) {
|
|
186
|
-
const { gainLeft, gainRight } = this.panToGain(
|
|
186
|
+
const { gainLeft, gainRight } = this.panToGain(this.constructor.channelSettings.pan);
|
|
187
187
|
const gainL = new GainNode(audioContext, { gain: gainLeft });
|
|
188
188
|
const gainR = new GainNode(audioContext, { gain: gainRight });
|
|
189
189
|
const merger = new ChannelMergerNode(audioContext, { numberOfInputs: 2 });
|
|
190
190
|
gainL.connect(merger, 0, 0);
|
|
191
191
|
gainR.connect(merger, 0, 1);
|
|
192
|
-
merger.connect(this.masterGain);
|
|
193
192
|
return {
|
|
194
193
|
gainL,
|
|
195
194
|
gainR,
|
|
195
|
+
merger,
|
|
196
196
|
};
|
|
197
197
|
}
|
|
198
198
|
createChannels(audioContext) {
|
|
199
199
|
const channels = Array.from({ length: 16 }, () => {
|
|
200
200
|
return {
|
|
201
|
-
...
|
|
202
|
-
...
|
|
201
|
+
...this.constructor.channelSettings,
|
|
202
|
+
...this.constructor.effectSettings,
|
|
203
203
|
...this.setChannelAudioNodes(audioContext),
|
|
204
204
|
scheduledNotes: new Map(),
|
|
205
205
|
};
|
|
@@ -491,9 +491,9 @@ export class MidyGMLite {
|
|
|
491
491
|
}
|
|
492
492
|
return noteList[0];
|
|
493
493
|
}
|
|
494
|
-
|
|
495
|
-
gainNode.connect(channel.
|
|
496
|
-
|
|
494
|
+
connectEffects(channel, gainNode) {
|
|
495
|
+
gainNode.connect(channel.merger);
|
|
496
|
+
merger.connect(this.masterGain);
|
|
497
497
|
}
|
|
498
498
|
cbToRatio(cb) {
|
|
499
499
|
return Math.pow(10, cb / 200);
|
|
@@ -559,7 +559,7 @@ export class MidyGMLite {
|
|
|
559
559
|
startModulation(channel, note, time) {
|
|
560
560
|
const { instrumentKey } = note;
|
|
561
561
|
note.modLFOGain = new GainNode(this.audioContext, {
|
|
562
|
-
gain: this.cbToRatio(instrumentKey.modLfoToVolume
|
|
562
|
+
gain: this.cbToRatio(instrumentKey.modLfoToVolume + channel.modulation),
|
|
563
563
|
});
|
|
564
564
|
note.modLFO = new OscillatorNode(this.audioContext, {
|
|
565
565
|
frequency: this.centToHz(instrumentKey.freqModLFO),
|
|
@@ -598,7 +598,7 @@ export class MidyGMLite {
|
|
|
598
598
|
if (!instrumentKey)
|
|
599
599
|
return;
|
|
600
600
|
const note = await this.createNote(channel, instrumentKey, noteNumber, velocity, startTime, isSF3);
|
|
601
|
-
this.
|
|
601
|
+
this.connectEffects(channel, note.gainNode);
|
|
602
602
|
const scheduledNotes = channel.scheduledNotes;
|
|
603
603
|
if (scheduledNotes.has(noteNumber)) {
|
|
604
604
|
scheduledNotes.get(noteNumber).push(note);
|
|
@@ -617,39 +617,41 @@ export class MidyGMLite {
|
|
|
617
617
|
return;
|
|
618
618
|
if (!channel.scheduledNotes.has(noteNumber))
|
|
619
619
|
return;
|
|
620
|
-
const
|
|
621
|
-
for (let i = 0; i <
|
|
622
|
-
const
|
|
623
|
-
if (!
|
|
620
|
+
const scheduledNotes = channel.scheduledNotes.get(noteNumber);
|
|
621
|
+
for (let i = 0; i < scheduledNotes.length; i++) {
|
|
622
|
+
const note = scheduledNotes[i];
|
|
623
|
+
if (!note)
|
|
624
624
|
continue;
|
|
625
|
-
if (
|
|
625
|
+
if (note.ending)
|
|
626
626
|
continue;
|
|
627
|
-
const { bufferSource, filterNode, gainNode, modLFO, modLFOGain, instrumentKey, } = targetNote;
|
|
628
627
|
const velocityRate = (velocity + 127) / 127;
|
|
629
|
-
const volEndTime = stopTime +
|
|
630
|
-
|
|
631
|
-
gainNode.gain
|
|
628
|
+
const volEndTime = stopTime +
|
|
629
|
+
note.instrumentKey.volRelease * velocityRate;
|
|
630
|
+
note.gainNode.gain
|
|
631
|
+
.cancelScheduledValues(stopTime)
|
|
632
|
+
.linearRampToValueAtTime(0, volEndTime);
|
|
632
633
|
const maxFreq = this.audioContext.sampleRate / 2;
|
|
633
|
-
const baseFreq = this.centToHz(instrumentKey.initialFilterFc);
|
|
634
|
+
const baseFreq = this.centToHz(note.instrumentKey.initialFilterFc);
|
|
634
635
|
const adjustedBaseFreq = Math.min(maxFreq, baseFreq);
|
|
635
|
-
const modEndTime = stopTime +
|
|
636
|
-
|
|
636
|
+
const modEndTime = stopTime +
|
|
637
|
+
note.instrumentKey.modRelease * velocityRate;
|
|
638
|
+
note.filterNode.frequency
|
|
637
639
|
.cancelScheduledValues(stopTime)
|
|
638
640
|
.linearRampToValueAtTime(adjustedBaseFreq, modEndTime);
|
|
639
|
-
|
|
641
|
+
note.ending = true;
|
|
640
642
|
this.scheduleTask(() => {
|
|
641
|
-
bufferSource.loop = false;
|
|
643
|
+
note.bufferSource.loop = false;
|
|
642
644
|
}, stopTime);
|
|
643
645
|
return new Promise((resolve) => {
|
|
644
|
-
bufferSource.onended = () => {
|
|
645
|
-
|
|
646
|
-
bufferSource.disconnect(
|
|
647
|
-
filterNode.disconnect(
|
|
648
|
-
gainNode.disconnect(
|
|
649
|
-
if (modLFOGain)
|
|
650
|
-
modLFOGain.disconnect(
|
|
651
|
-
if (modLFO)
|
|
652
|
-
modLFO.stop();
|
|
646
|
+
note.bufferSource.onended = () => {
|
|
647
|
+
scheduledNotes[i] = null;
|
|
648
|
+
note.bufferSource.disconnect();
|
|
649
|
+
note.filterNode.disconnect();
|
|
650
|
+
note.gainNode.disconnect();
|
|
651
|
+
if (note.modLFOGain)
|
|
652
|
+
note.modLFOGain.disconnect();
|
|
653
|
+
if (note.modLFO)
|
|
654
|
+
note.modLFO.stop();
|
|
653
655
|
resolve();
|
|
654
656
|
};
|
|
655
657
|
bufferSource.stop(volEndTime);
|
|
@@ -891,11 +893,11 @@ export class MidyGMLite {
|
|
|
891
893
|
case 2: // GM System Off
|
|
892
894
|
break;
|
|
893
895
|
default:
|
|
894
|
-
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
896
|
+
console.warn(`Unsupported Exclusive Message: ${data}`);
|
|
895
897
|
}
|
|
896
898
|
break;
|
|
897
899
|
default:
|
|
898
|
-
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
900
|
+
console.warn(`Unsupported Exclusive Message: ${data}`);
|
|
899
901
|
}
|
|
900
902
|
}
|
|
901
903
|
GM1SystemOn() {
|
|
@@ -914,11 +916,11 @@ export class MidyGMLite {
|
|
|
914
916
|
case 1:
|
|
915
917
|
return this.handleMasterVolumeSysEx(data);
|
|
916
918
|
default:
|
|
917
|
-
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
919
|
+
console.warn(`Unsupported Exclusive Message: ${data}`);
|
|
918
920
|
}
|
|
919
921
|
break;
|
|
920
922
|
default:
|
|
921
|
-
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
923
|
+
console.warn(`Unsupported Exclusive Message: ${data}`);
|
|
922
924
|
}
|
|
923
925
|
}
|
|
924
926
|
handleMasterVolumeSysEx(data) {
|
|
@@ -936,7 +938,7 @@ export class MidyGMLite {
|
|
|
936
938
|
}
|
|
937
939
|
}
|
|
938
940
|
handleExclusiveMessage(data) {
|
|
939
|
-
console.warn(`Unsupported Exclusive Message ${data}`);
|
|
941
|
+
console.warn(`Unsupported Exclusive Message: ${data}`);
|
|
940
942
|
}
|
|
941
943
|
handleSysEx(data) {
|
|
942
944
|
switch (data[0]) {
|
package/esm/midy.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export class Midy {
|
|
|
4
4
|
volume: number;
|
|
5
5
|
pan: number;
|
|
6
6
|
portamentoTime: number;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
reverbSendLevel: number;
|
|
8
|
+
chorusSendLevel: number;
|
|
9
9
|
vibratoRate: number;
|
|
10
10
|
vibratoDepth: number;
|
|
11
11
|
vibratoDelay: number;
|
|
@@ -40,12 +40,26 @@ export class Midy {
|
|
|
40
40
|
lfoFilterDepth: number;
|
|
41
41
|
lfoAmplitudeDepth: number;
|
|
42
42
|
};
|
|
43
|
-
constructor(audioContext: any
|
|
43
|
+
constructor(audioContext: any, options?: {
|
|
44
|
+
reverbAlgorithm: (audioContext: any) => {
|
|
45
|
+
input: any;
|
|
46
|
+
output: any;
|
|
47
|
+
};
|
|
48
|
+
});
|
|
44
49
|
ticksPerBeat: number;
|
|
45
50
|
totalTime: number;
|
|
46
|
-
reverbFactor: number;
|
|
47
51
|
masterFineTuning: number;
|
|
48
52
|
masterCoarseTuning: number;
|
|
53
|
+
reverb: {
|
|
54
|
+
time: number;
|
|
55
|
+
feedback: number;
|
|
56
|
+
};
|
|
57
|
+
chorus: {
|
|
58
|
+
modRate: number;
|
|
59
|
+
modDepth: number;
|
|
60
|
+
feedback: number;
|
|
61
|
+
sendToReverb: number;
|
|
62
|
+
};
|
|
49
63
|
mono: boolean;
|
|
50
64
|
omni: boolean;
|
|
51
65
|
noteCheckInterval: number;
|
|
@@ -63,69 +77,21 @@ export class Midy {
|
|
|
63
77
|
timeline: any[];
|
|
64
78
|
instruments: any[];
|
|
65
79
|
notePromises: any[];
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
sostenutoNotes: Map<any, any>;
|
|
71
|
-
polyphonicKeyPressure: {
|
|
72
|
-
pitchControl: number;
|
|
73
|
-
filterCutoffControl: number;
|
|
74
|
-
amplitudeControl: number;
|
|
75
|
-
lfoPitchDepth: number;
|
|
76
|
-
lfoFilterDepth: number;
|
|
77
|
-
lfoAmplitudeDepth: number;
|
|
78
|
-
};
|
|
79
|
-
channelPressure: {
|
|
80
|
-
pitchControl: number;
|
|
81
|
-
filterCutoffControl: number;
|
|
82
|
-
amplitudeControl: number;
|
|
83
|
-
lfoPitchDepth: number;
|
|
84
|
-
lfoFilterDepth: number;
|
|
85
|
-
lfoAmplitudeDepth: number;
|
|
80
|
+
defaultOptions: {
|
|
81
|
+
reverbAlgorithm: (audioContext: any) => {
|
|
82
|
+
input: any;
|
|
83
|
+
output: any;
|
|
86
84
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
};
|
|
94
|
-
chorusEffect: {
|
|
95
|
-
lfo: any;
|
|
96
|
-
lfoGain: any;
|
|
97
|
-
delayNodes: any[];
|
|
98
|
-
chorusGains: any[];
|
|
85
|
+
};
|
|
86
|
+
audioContext: any;
|
|
87
|
+
options: {
|
|
88
|
+
reverbAlgorithm: (audioContext: any) => {
|
|
89
|
+
input: any;
|
|
90
|
+
output: any;
|
|
99
91
|
};
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
portamento: boolean;
|
|
104
|
-
sostenutoPedal: boolean;
|
|
105
|
-
softPedal: number;
|
|
106
|
-
rpnMSB: number;
|
|
107
|
-
rpnLSB: number;
|
|
108
|
-
pitchBendRange: number;
|
|
109
|
-
currentBufferSource: null;
|
|
110
|
-
volume: number;
|
|
111
|
-
pan: number;
|
|
112
|
-
portamentoTime: number;
|
|
113
|
-
reverb: number;
|
|
114
|
-
chorus: number;
|
|
115
|
-
vibratoRate: number;
|
|
116
|
-
vibratoDepth: number;
|
|
117
|
-
vibratoDelay: number;
|
|
118
|
-
bank: number;
|
|
119
|
-
bankMSB: number;
|
|
120
|
-
bankLSB: number;
|
|
121
|
-
dataMSB: number;
|
|
122
|
-
dataLSB: number;
|
|
123
|
-
program: number;
|
|
124
|
-
pitchBend: number;
|
|
125
|
-
fineTuning: number;
|
|
126
|
-
coarseTuning: number;
|
|
127
|
-
modulationDepthRange: number;
|
|
128
|
-
}[];
|
|
92
|
+
};
|
|
93
|
+
masterGain: any;
|
|
94
|
+
channels: any[];
|
|
129
95
|
initSoundFontTable(): any[];
|
|
130
96
|
addSoundFont(soundFont: any): void;
|
|
131
97
|
loadSoundFont(soundFontUrl: any): Promise<void>;
|
|
@@ -133,79 +99,20 @@ export class Midy {
|
|
|
133
99
|
setChannelAudioNodes(audioContext: any): {
|
|
134
100
|
gainL: any;
|
|
135
101
|
gainR: any;
|
|
102
|
+
merger: any;
|
|
136
103
|
reverbEffect: {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
wetGain: any;
|
|
104
|
+
input: any;
|
|
105
|
+
output: any;
|
|
140
106
|
};
|
|
141
107
|
chorusEffect: {
|
|
142
108
|
lfo: any;
|
|
143
109
|
lfoGain: any;
|
|
144
110
|
delayNodes: any[];
|
|
145
111
|
chorusGains: any[];
|
|
112
|
+
output: any;
|
|
146
113
|
};
|
|
147
114
|
};
|
|
148
|
-
createChannels(audioContext: any):
|
|
149
|
-
scheduledNotes: Map<any, any>;
|
|
150
|
-
sostenutoNotes: Map<any, any>;
|
|
151
|
-
polyphonicKeyPressure: {
|
|
152
|
-
pitchControl: number;
|
|
153
|
-
filterCutoffControl: number;
|
|
154
|
-
amplitudeControl: number;
|
|
155
|
-
lfoPitchDepth: number;
|
|
156
|
-
lfoFilterDepth: number;
|
|
157
|
-
lfoAmplitudeDepth: number;
|
|
158
|
-
};
|
|
159
|
-
channelPressure: {
|
|
160
|
-
pitchControl: number;
|
|
161
|
-
filterCutoffControl: number;
|
|
162
|
-
amplitudeControl: number;
|
|
163
|
-
lfoPitchDepth: number;
|
|
164
|
-
lfoFilterDepth: number;
|
|
165
|
-
lfoAmplitudeDepth: number;
|
|
166
|
-
};
|
|
167
|
-
gainL: any;
|
|
168
|
-
gainR: any;
|
|
169
|
-
reverbEffect: {
|
|
170
|
-
convolverNode: any;
|
|
171
|
-
dryGain: any;
|
|
172
|
-
wetGain: any;
|
|
173
|
-
};
|
|
174
|
-
chorusEffect: {
|
|
175
|
-
lfo: any;
|
|
176
|
-
lfoGain: any;
|
|
177
|
-
delayNodes: any[];
|
|
178
|
-
chorusGains: any[];
|
|
179
|
-
};
|
|
180
|
-
expression: number;
|
|
181
|
-
modulation: number;
|
|
182
|
-
sustainPedal: boolean;
|
|
183
|
-
portamento: boolean;
|
|
184
|
-
sostenutoPedal: boolean;
|
|
185
|
-
softPedal: number;
|
|
186
|
-
rpnMSB: number;
|
|
187
|
-
rpnLSB: number;
|
|
188
|
-
pitchBendRange: number;
|
|
189
|
-
currentBufferSource: null;
|
|
190
|
-
volume: number;
|
|
191
|
-
pan: number;
|
|
192
|
-
portamentoTime: number;
|
|
193
|
-
reverb: number;
|
|
194
|
-
chorus: number;
|
|
195
|
-
vibratoRate: number;
|
|
196
|
-
vibratoDepth: number;
|
|
197
|
-
vibratoDelay: number;
|
|
198
|
-
bank: number;
|
|
199
|
-
bankMSB: number;
|
|
200
|
-
bankLSB: number;
|
|
201
|
-
dataMSB: number;
|
|
202
|
-
dataLSB: number;
|
|
203
|
-
program: number;
|
|
204
|
-
pitchBend: number;
|
|
205
|
-
fineTuning: number;
|
|
206
|
-
coarseTuning: number;
|
|
207
|
-
modulationDepthRange: number;
|
|
208
|
-
}[];
|
|
115
|
+
createChannels(audioContext: any): any[];
|
|
209
116
|
createNoteBuffer(instrumentKey: any, isSF3: any): Promise<any>;
|
|
210
117
|
createNoteBufferNode(instrumentKey: any, isSF3: any): Promise<any>;
|
|
211
118
|
convertToFloat32Array(uint8Array: any): Float32Array;
|
|
@@ -228,18 +135,27 @@ export class Midy {
|
|
|
228
135
|
currentTime(): number;
|
|
229
136
|
getActiveNotes(channel: any, time: any): Map<any, any>;
|
|
230
137
|
getActiveNote(noteList: any, time: any): any;
|
|
231
|
-
|
|
138
|
+
createConvolutionReverbImpulse(audioContext: any, decay: any, preDecay: any): any;
|
|
139
|
+
createConvolutionReverb(audioContext: any, impulse: any): {
|
|
140
|
+
input: any;
|
|
141
|
+
output: any;
|
|
232
142
|
convolverNode: any;
|
|
233
|
-
|
|
234
|
-
|
|
143
|
+
};
|
|
144
|
+
createCombFilter(audioContext: any, input: any, delay: any, feedback: any): any;
|
|
145
|
+
createAllpassFilter(audioContext: any, input: any, delay: any, feedback: any): any;
|
|
146
|
+
generateDistributedArray(center: any, count: any, varianceRatio?: number, randomness?: number): any[];
|
|
147
|
+
createSchroederReverb(audioContext: any, combDelays: any, combFeedbacks: any, allpassDelays: any, allpassFeedbacks: any): {
|
|
148
|
+
input: any;
|
|
149
|
+
output: any;
|
|
235
150
|
};
|
|
236
151
|
createChorusEffect(audioContext: any, options?: {}): {
|
|
237
152
|
lfo: any;
|
|
238
153
|
lfoGain: any;
|
|
239
154
|
delayNodes: any[];
|
|
240
155
|
chorusGains: any[];
|
|
156
|
+
output: any;
|
|
241
157
|
};
|
|
242
|
-
|
|
158
|
+
connectEffects(channel: any, gainNode: any): void;
|
|
243
159
|
cbToRatio(cb: any): number;
|
|
244
160
|
centToHz(cent: any): number;
|
|
245
161
|
calcSemitoneOffset(channel: any): any;
|
|
@@ -279,8 +195,8 @@ export class Midy {
|
|
|
279
195
|
updateChannelGain(channel: any): void;
|
|
280
196
|
setSustainPedal(channelNumber: any, value: any): void;
|
|
281
197
|
setPortamento(channelNumber: any, value: any): void;
|
|
282
|
-
setReverbSendLevel(channelNumber: any,
|
|
283
|
-
setChorusSendLevel(channelNumber: any,
|
|
198
|
+
setReverbSendLevel(channelNumber: any, reverbSendLevel: any): void;
|
|
199
|
+
setChorusSendLevel(channelNumber: any, chorusSendLevel: any): void;
|
|
284
200
|
setSostenutoPedal(channelNumber: any, value: any): void;
|
|
285
201
|
setSoftPedal(channelNumber: any, softPedal: any): void;
|
|
286
202
|
setVibratoRate(channelNumber: any, vibratoRate: any): void;
|
|
@@ -320,6 +236,19 @@ export class Midy {
|
|
|
320
236
|
setMasterFineTuning(fineTuning: any): void;
|
|
321
237
|
handleMasterCoarseTuningSysEx(data: any): void;
|
|
322
238
|
setMasterCoarseTuning(coarseTuning: any): void;
|
|
239
|
+
handleGlobalParameterControl(data: any): void;
|
|
240
|
+
handleReverbParameter(data: any): void;
|
|
241
|
+
setReverbType(type: any): void;
|
|
242
|
+
getReverbTimeFromType(type: any): number | undefined;
|
|
243
|
+
setReverbTime(value: any): void;
|
|
244
|
+
getReverbTime(value: any): number;
|
|
245
|
+
calcDelay(rt60: any, feedback: any): number;
|
|
246
|
+
handleChorusParameter(data: any): void;
|
|
247
|
+
setChorusType(type: any): void;
|
|
248
|
+
setChorusModRate(value: any): void;
|
|
249
|
+
setChorusModDepth(value: any): void;
|
|
250
|
+
setChorusFeedback(value: any): void;
|
|
251
|
+
setChorusSendToReverb(value: any): void;
|
|
323
252
|
handleExclusiveMessage(data: any): void;
|
|
324
253
|
handleSysEx(data: any): void;
|
|
325
254
|
scheduleTask(callback: any, startTime: any): Promise<any>;
|
package/esm/midy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"AAuBA;
|
|
1
|
+
{"version":3,"file":"midy.d.ts","sourceRoot":"","sources":["../src/midy.js"],"names":[],"mappings":"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"}
|